精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Vue項目性能優化實踐

開發 前端
本文通過以下三部分組成:Vue 代碼層面的優化、webpack 配置層面的優化、基礎的 Web 技術層面的優化;來介紹怎么去優化 Vue 項目的性能。

前言

Vue 框架通過數據雙向綁定和虛擬 DOM 技術,幫我們處理了前端開發中最臟最累的 DOM 操作部分, 我們不再需要去考慮如何操作 DOM 以及如何最高效地操作 DOM;但 Vue 項目中仍然存在項目首屏優化、Webpack 編譯配置優化等問題,所以我們仍然需要去關注 Vue 項目性能方面的優化,使項目具有更高效的性能、更好的用戶體驗。本文是作者通過實際項目的優化實踐進行總結而來,希望讀者讀完本文,有一定的啟發思考,從而對自己的項目進行優化起到幫助。本文內容分為以下三部分組成:

  •  Vue 代碼層面的優化;
  •  webpack 配置層面的優化;
  •  基礎的 Web 技術層面的優化。

辛苦整理良久,還望手動點贊鼓勵~

github地址為:https://github.com/fengshi123/blog,匯總了作者的所有博客,也歡迎關注及 star ~

一、代碼層面的優化

1.1、v-if 和 v-show 區分使用場景

v-if 是 真正 的條件渲染,因為它會確保在切換過程中條件塊內的事件監聽器和子組件適當地被銷毀和重建;也是惰性的:如果在初始渲染時條件為假,則什么也不做——直到條件第一次變為真時,才會開始渲染條件塊。

v-show 就簡單得多, 不管初始條件是什么,元素總是會被渲染,并且只是簡單地基于 CSS 的 display 屬性進行切換。

所以,v-if 適用于在運行時很少改變條件,不需要頻繁切換條件的場景;v-show 則適用于需要非常頻繁切換條件的場景。

1.2、computed 和 watch 區分使用場景

computed: 是計算屬性,依賴其它屬性值,并且 computed 的值有緩存,只有它依賴的屬性值發生改變,下一次獲取 computed 的值時才會重新計算 computed 的值;

watch: 更多的是「觀察」的作用,類似于某些數據的監聽回調 ,每當監聽的數據變化時都會執行回調進行后續操作;

運用場景:

  •  當我們需要進行數值計算,并且依賴于其它數據時,應該使用 computed,因為可以利用 computed 的緩存特性,避免每次獲取值時,都要重新計算;
  •  當我們需要在數據變化時執行異步或開銷較大的操作時,應該使用 watch,使用 watch 選項允許我們執行異步操作 ( 訪問一個 API ),限制我們執行該操作的頻率,并在我們得到最終結果前,設置中間狀態。這些都是計算屬性無法做到的。

1.3、v-for 遍歷必須為 item 添加 key,且避免同時使用 v-if

(1)v-for 遍歷必須為 item 添加 key

在列表數據進行遍歷渲染時,需要為每一項 item 設置唯一 key 值,方便 Vue.js 內部機制精準找到該條列表數據。當 state 更新時,新的狀態值和舊的狀態值對比,較快地定位到 diff 。

(2)v-for 遍歷避免同時使用 v-if

v-for 比 v-if 優先級高,如果每一次都需要遍歷整個數組,將會影響速度,尤其是當之需要渲染很小一部分的時候,必要情況下應該替換成 computed 屬性。

推薦: 

  1. <ul>  
  2.   <li  
  3.     v-for="user in activeUsers"  
  4.     :key="user.id"> 
  5.      {{ user.name }}  
  6.   </li>  
  7. </ul>  
  8. computed: {  
  9.   activeUsers: function () {  
  10.     return this.users.filter(function (user) {  
  11.  return user.isActive  
  12.     })  
  13.   }  
  14.  
  15. 復制代碼 

不推薦: 

  1. <ul>  
  2.   <li  
  3.     v-for="user in users"  
  4.     v-if="user.isActive"  
  5.     :key="user.id">  
  6.     {{ user.name }}  
  7.   </li>  
  8. </ul>  
  9. 復制代碼 

1.4、長列表性能優化

Vue 會通過 Object.defineProperty 對數據進行劫持,來實現視圖響應數據的變化,然而有些時候我們的組件就是純粹的數據展示,不會有任何改變,我們就不需要 Vue 來劫持我們的數據,在大量數據展示的情況下,這能夠很明顯的減少組件初始化的時間,那如何禁止 Vue 劫持我們的數據呢?可以通過 Object.freeze 方法來凍結一個對象,一旦被凍結的對象就再也不能被修改了。 

  1. export default {  
  2.   data: () => ({  
  3.     users: {}  
  4.   }),  
  5.   async created() {  
  6.     const users = await axios.get("/api/users");  
  7.     this.users = Object.freeze(users);  
  8.   }  
  9. };  
  10. 復制代碼 

1.5、事件的銷毀

Vue 組件銷毀時,會自動清理它與其它實例的連接,解綁它的全部指令及事件監聽器,但是僅限于組件本身的事件。如果在 js 內使用 addEventListene 等方式是不會自動銷毀的,我們需要在組件銷毀時手動移除這些事件的監聽,以免造成內存泄露,如: 

  1. created() {  
  2.   addEventListener('click', this.click, false)  
  3. },  
  4. beforeDestroy() {  
  5.   removeEventListener('click', this.click, false)  
  6.  
  7. 復制代碼 

1.6、圖片資源懶加載

對于圖片過多的頁面,為了加速頁面加載速度,所以很多時候我們需要將頁面內未出現在可視區域內的圖片先不做加載, 等到滾動到可視區域后再去加載。這樣對于頁面加載性能上會有很大的提升,也提高了用戶體驗。我們在項目中使用 Vue 的 vue-lazyload 插件:

(1)安裝插件 

  1. npm install vue-lazyload --save-dev  
  2. 復制代碼 

(2)在入口文件 man.js 中引入并使用 

  1. import VueLazyload from 'vue-lazyload'  
  2. 復制代碼 

然后再 vue 中直接使用 

  1. Vue.use(VueLazyload)  
  2. 復制代碼 

或者添加自定義選項 

  1. Vue.use(VueLazyload, {  
  2. preLoad: 1.3,  
  3. error: 'dist/error.png',  
  4. loading: 'dist/loading.gif',  
  5. attempt: 1  
  6. })  
  7. 復制代碼 

(3)在 vue 文件中將 img 標簽的 src 屬性直接改為 v-lazy ,從而將圖片顯示方式更改為懶加載顯示: 

  1. <img v-lazy="/static/img/1.png">  
  2. 復制代碼 

以上為 vue-lazyload 插件的簡單使用,如果要看插件的更多參數選項,可以查看 vue-lazyload 的 github 地址。

1.7、路由懶加載

Vue 是單頁面應用,可能會有很多的路由引入 ,這樣使用 webpcak 打包后的文件很大,當進入首頁時,加載的資源過多,頁面會出現白屏的情況,不利于用戶體驗。如果我們能把不同路由對應的組件分割成不同的代碼塊,然后當路由被訪問的時候才加載對應的組件,這樣就更加高效了。這樣會大大提高首屏顯示的速度,但是可能其他的頁面的速度就會降下來。

路由懶加載: 

  1. const Foo = () => import('./Foo.vue')  
  2. const router = new VueRouter({  
  3.   routes: [  
  4.     { path: '/foo', component: Foo }  
  5.   ]  
  6. })  
  7. 復制代碼 

1.8、第三方插件的按需引入

我們在項目中經常會需要引入第三方插件,如果我們直接引入整個插件,會導致項目的體積太大,我們可以借助 babel-plugin-component ,然后可以只引入需要的組件,以達到減小項目體積的目的。以下為項目中引入 element-ui 組件庫為例:

(1)首先,安裝 babel-plugin-component : 

  1. npm install babel-plugin-component -D  
  2. 復制代碼 

(2)然后,將 .babelrc 修改為: 

  1.  
  2.   "presets": [["es2015", { "modules": false }]],  
  3.   "plugins": [  
  4.     [  
  5.       "component",  
  6.       {  
  7.         "libraryName": "element-ui",  
  8.         "styleLibraryName": "theme-chalk"  
  9.       }  
  10.     ]  
  11.   ]  
  12.  
  13. 復制代碼 

(3)在 main.js 中引入部分組件: 

  1. import Vue from 'vue';  
  2. import { Button, Select } from 'element-ui';  
  3.  Vue.use(Button)  
  4.  Vue.use(Select)  
  5. 復制代碼 

1.9、優化無限列表性能

如果你的應用存在非常長或者無限滾動的列表,那么需要采用 窗口化 的技術來優化性能,只需要渲染少部分區域的內容,減少重新渲染組件和創建 dom 節點的時間。你可以參考以下開源項目 vue-virtual-scroll-list 和 vue-virtual-scroller 來優化這種無限列表的場景的。

1.10、服務端渲染 SSR or 預渲染

服務端渲染是指 Vue 在客戶端將標簽渲染成的整個 html 片段的工作在服務端完成,服務端形成的 html 片段直接返回給客戶端這個過程就叫做服務端渲染。

(1)服務端渲染的優點:

  •  更好的 SEO:因為 SPA 頁面的內容是通過 Ajax 獲取,而搜索引擎爬取工具并不會等待 Ajax 異步完成后再抓取頁面內容,所以在 SPA 中是抓取不到頁面通過 Ajax 獲取到的內容;而 SSR 是直接由服務端返回已經渲染好的頁面(數據已經包含在頁面中),所以搜索引擎爬取工具可以抓取渲染好的頁面;
  •  更快的內容到達時間(首屏加載更快):SPA 會等待所有 Vue 編譯后的 js 文件都下載完成后,才開始進行頁面的渲染,文件下載等需要一定的時間等,所以首屏渲染需要一定的時間;SSR 直接由服務端渲染好頁面直接返回顯示,無需等待下載 js 文件及再去渲染等,所以 SSR 有更快的內容到達時間;

(2)服務端渲染的缺點:

  •  更多的開發條件限制:例如服務端渲染只支持 beforCreate 和 created 兩個鉤子函數,這會導致一些外部擴展庫需要特殊處理,才能在服務端渲染應用程序中運行;并且與可以部署在任何靜態文件服務器上的完全靜態單頁面應用程序 SPA 不同,服務端渲染應用程序,需要處于 Node.js server 運行環境;
  •  更多的服務器負載:在 Node.js 中渲染完整的應用程序,顯然會比僅僅提供靜態文件的 server 更加大量占用CPU 資源,因此如果你預料在高流量環境下使用,請準備相應的服務器負載,并明智地采用緩存策略。

如果你的項目的 SEO 和 首屏渲染是評價項目的關鍵指標,那么你的項目就需要服務端渲染來幫助你實現最佳的初始加載性能和 SEO,具體的 Vue SSR 如何實現,可以參考作者的另一篇文章《Vue SSR 踩坑之旅》。如果你的 Vue 項目只需改善少數營銷頁面(例如  /, /about, /contact 等)的 SEO,那么你可能需要預渲染,在構建時 (build time) 簡單地生成針對特定路由的靜態 HTML 文件。優點是設置預渲染更簡單,并可以將你的前端作為一個完全靜態的站點,具體你可以使用 prerender-spa-plugin 就可以輕松地添加預渲染 。

二、Webpack 層面的優化

2.1、Webpack 對圖片進行壓縮

在 vue 項目中除了可以在 webpack.base.conf.js 中 url-loader 中設置 limit 大小來對圖片處理,對小于 limit 的圖片轉化為 base64 格式,其余的不做操作。所以對有些較大的圖片資源,在請求資源的時候,加載會很慢,我們可以用 image-webpack-loader來壓縮圖片:

(1)首先,安裝 image-webpack-loader : 

  1. npm install image-webpack-loader --save-dev  
  2. 復制代碼 

(2)然后,在 webpack.base.conf.js 中進行配置: 

  1.  
  2.   test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,  
  3.   use:[  
  4.     {  
  5.     loader: 'url-loader',  
  6.     options: {  
  7.       limit: 10000,  
  8.       name: utils.assetsPath('img/[name].[hash:7].[ext]')  
  9.       }  
  10.     },  
  11.     {  
  12.       loader: 'image-webpack-loader',  
  13.       options: {  
  14.         bypassOnDebug: true,  
  15.       }  
  16.     }  
  17.   ]  
  18.  復制代碼 

2.2、減少 ES6 轉為 ES5 的冗余代碼

Babel 插件會在將 ES6 代碼轉換成 ES5 代碼時會注入一些輔助函數,例如下面的 ES6 代碼: 

  1. class HelloWebpack extends Component{...}  
  2. 復制代碼 

這段代碼再被轉換成能正常運行的 ES5 代碼時需要以下兩個輔助函數: 

  1. babel-runtime/helpers/createClass  // 用于實現 class 語法  
  2. babel-runtime/helpers/inherits  // 用于實現 extends 語法  
  3. 復制代碼 

在默認情況下, Babel 會在每個輸出文件中內嵌這些依賴的輔助函數代碼,如果多個源代碼文件都依賴這些輔助函數,那么這些輔助函數的代碼將會出現很多次,造成代碼冗余。為了不讓這些輔助函數的代碼重復出現,可以在依賴它們時通過 require('babel-runtime/helpers/createClass') 的方式導入,這樣就能做到只讓它們出現一次。babel-plugin-transform-runtime 插件就是用來實現這個作用的,將相關輔助函數進行替換成導入語句,從而減小 babel 編譯出來的代碼的文件大小。

(1)首先,安裝 babel-plugin-transform-runtime : 

  1. npm install babel-plugin-transform-runtime --save-dev  
  2. 復制代碼 

(2)然后,修改 .babelrc 配置文件為: 

  1. "plugins": [  
  2.     "transform-runtime"  
  3.  
  4. 復制代碼 

如果要看插件的更多詳細內容,可以查看babel-plugin-transform-runtime 的 詳細介紹。

2.3、提取公共代碼

如果項目中沒有去將每個頁面的第三方庫和公共模塊提取出來,則項目會存在以下問題:

  •  相同的資源被重復加載,浪費用戶的流量和服務器的成本。
  •  每個頁面需要加載的資源太大,導致網頁首屏加載緩慢,影響用戶體驗。

所以我們需要將多個頁面的公共代碼抽離成單獨的文件,來優化以上問題 。Webpack 內置了專門用于提取多個Chunk 中的公共部分的插件 CommonsChunkPlugin,我們在項目中 CommonsChunkPlugin 的配置如下: 

  1. // 所有在 package.json 里面依賴的包,都會被打包進 vendor.js 這個文件中。  
  2. new webpack.optimize.CommonsChunkPlugin({  
  3.   name: 'vendor',  
  4.   minChunks: function(module, count) {  
  5.     return (  
  6.       module.resource &&  
  7.       /\.js$/.test(module.resource) &&  
  8.       module.resource.indexOf(  
  9.         path.join(__dirname, '../node_modules')  
  10.       ) === 0  
  11.     );  
  12.   }  
  13. }),  
  14. // 抽取出代碼模塊的映射關系  
  15. new webpack.optimize.CommonsChunkPlugin({  
  16.   name: 'manifest',  
  17.   chunks: ['vendor']  
  18. })  
  19. 復制代碼 

如果要看插件的更多詳細內容,可以查看 CommonsChunkPlugin 的 詳細介紹。

2.4、模板預編譯

當使用 DOM 內模板或 JavaScript 內的字符串模板時,模板會在運行時被編譯為渲染函數。通常情況下這個過程已經足夠快了,但對性能敏感的應用還是最好避免這種用法。

預編譯模板最簡單的方式就是使用單文件組件——相關的構建設置會自動把預編譯處理好,所以構建好的代碼已經包含了編譯出來的渲染函數而不是原始的模板字符串。

如果你使用 webpack,并且喜歡分離 JavaScript 和模板文件,你可以使用 vue-template-loader,它也可以在構建過程中把模板文件轉換成為 JavaScript 渲染函數。

2.5、提取組件的 CSS

當使用單文件組件時,組件內的 CSS 會以 style 標簽的方式通過 JavaScript 動態注入。這有一些小小的運行時開銷,如果你使用服務端渲染,這會導致一段 “無樣式內容閃爍 (fouc) ” 。將所有組件的 CSS 提取到同一個文件可以避免這個問題,也會讓 CSS 更好地進行壓縮和緩存。

查閱這個構建工具各自的文檔來了解更多:

  •  webpack + vue-loader ( vue-cli 的 webpack 模板已經預先配置好)
  •  Browserify + vueify
  •  Rollup + rollup-plugin-vue

2.6、優化 SourceMap

我們在項目進行打包后,會將開發中的多個文件代碼打包到一個文件中,并且經過壓縮、去掉多余的空格、babel編譯化后,最終將編譯得到的代碼會用于線上環境,那么這樣處理后的代碼和源代碼會有很大的差別,當有 bug的時候,我們只能定位到壓縮處理后的代碼位置,無法定位到開發環境中的代碼,對于開發來說不好調式定位問題,因此 sourceMap 出現了,它就是為了解決不好調式代碼問題的。

SourceMap 的可選值如下(+ 號越多,代表速度越快,- 號越多,代表速度越慢, o 代表中等速度 )

1.png

開發環境推薦:cheap-module-eval-source-map

生產環境推薦:cheap-module-source-map

原因如下:

  •  cheap:源代碼中的列信息是沒有任何作用,因此我們打包后的文件不希望包含列相關信息,只有行信息能建立打包前后的依賴關系。因此不管是開發環境或生產環境,我們都希望添加 cheap 的基本類型來忽略打包前后的列信息;
  •  module :不管是開發環境還是正式環境,我們都希望能定位到bug的源代碼具體的位置,比如說某個 Vue 文件報錯了,我們希望能定位到具體的 Vue 文件,因此我們也需要 module 配置;
  •  soure-map :source-map 會為每一個打包后的模塊生成獨立的 soucemap 文件 ,因此我們需要增加source-map 屬性;
  •  eval-source-map:eval 打包代碼的速度非常快,因為它不生成 map 文件,但是可以對 eval 組合使用 eval-source-map 使用會將 map 文件以 DataURL 的形式存在打包后的 js 文件中。在正式環境中不要使用 eval-source-map, 因為它會增加文件的大小,但是在開發環境中,可以試用下,因為他們打包的速度很快。

2.7、構建結果輸出分析

Webpack 輸出的代碼可讀性非常差而且文件非常大,讓我們非常頭疼。為了更簡單、直觀地分析輸出結果,社區中出現了許多可視化分析工具。這些工具以圖形的方式將結果更直觀地展示出來,讓我們快速了解問題所在。接下來講解我們在 Vue 項目中用到的分析工具:webpack-bundle-analyzer 。

我們在項目中 webpack.prod.conf.js 進行配置: 

  1. if (config.build.bundleAnalyzerReport) {  
  2.   var BundleAnalyzerPlugin =   require('webpack-bundle-analyzer').BundleAnalyzerPlugin;  
  3.   webpackConfig.plugins.push(new BundleAnalyzerPlugin());  
  4.  
  5. 復制代碼 

執行 $ npm run build \--report 后生成分析報告如下:

1.png

2.8、Vue 項目的編譯優化

如果你的 Vue 項目使用 Webpack 編譯,需要你喝一杯咖啡的時間,那么也許你需要對項目的 Webpack 配置進行優化,提高 Webpack 的構建效率。具體如何進行 Vue 項目的 Webpack 構建優化,可以參考作者的另一篇文章《 Vue 項目 Webpack 優化實踐》

三、基礎的 Web 技術優化

3.1、開啟 gzip 壓縮

gzip 是 GNUzip 的縮寫,最早用于 UNIX 系統的文件壓縮。HTTP 協議上的 gzip 編碼是一種用來改進 web 應用程序性能的技術,web 服務器和客戶端(瀏覽器)必須共同支持 gzip。目前主流的瀏覽器,Chrome,firefox,IE等都支持該協議。常見的服務器如 Apache,Nginx,IIS 同樣支持,gzip 壓縮效率非常高,通常可以達到 70% 的壓縮率,也就是說,如果你的網頁有 30K,壓縮之后就變成了 9K 左右

以下我們以服務端使用我們熟悉的 express 為例,開啟 gzip 非常簡單,相關步驟如下:

  •  安裝: 
  1. npm install compression --save  
  2. 復制代碼 
  •  添加代碼邏輯: 
  1. var compression = require('compression');  
  2. var app = express();  
  3. app.use(compression())  
  4. 復制代碼 
  •  重啟服務,觀察網絡面板里面的 response header,如果看到如下紅圈里的字段則表明 gzip 開啟成功 :   

1.png

3.2、瀏覽器緩存

為了提高用戶加載頁面的速度,對靜態資源進行緩存是非常必要的,根據是否需要重新向服務器發起請求來分類,將 HTTP 緩存規則分為兩大類(強制緩存,對比緩存),如果對緩存機制還不是了解很清楚的,可以參考作者寫的關于 HTTP 緩存的文章《深入理解HTTP緩存機制及原理》,這里不再贅述。

3.3、CDN 的使用

瀏覽器從服務器上下載 CSS、js 和圖片等文件時都要和服務器連接,而大部分服務器的帶寬有限,如果超過限制,網頁就半天反應不過來。而 CDN 可以通過不同的域名來加載文件,從而使下載文件的并發連接數大大增加,且CDN 具有更好的可用性,更低的網絡延遲和丟包率 。

3.4、使用 Chrome Performance 查找性能瓶頸

Chrome 的 Performance 面板可以錄制一段時間內的 js 執行細節及時間。使用 Chrome 開發者工具分析頁面性能的步驟如下。

  1.  打開 Chrome 開發者工具,切換到 Performance 面板
  2.  點擊 Record 開始錄制
  3.  刷新頁面或展開某個節點
  4.  點擊 Stop 停止錄制

1.png

更多關于 Performance 的內容可以點擊這里查看。

總結

本文通過以下三部分組成:Vue 代碼層面的優化、webpack 配置層面的優化、基礎的 Web 技術層面的優化;來介紹怎么去優化 Vue 項目的性能。希望對讀完本文的你有幫助、有啟發。

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2021-01-08 09:40:40

優化VUE性能

2020-03-23 15:15:57

MySQL性能優化數據庫

2010-07-06 09:07:09

2022-10-28 13:41:51

字節SDK監控

2021-09-24 14:02:53

性能優化實踐

2019-08-02 11:28:45

HadoopYARN調度系統

2021-02-02 13:45:31

Vue代碼前端

2022-03-29 13:27:22

Android優化APP

2017-03-01 20:53:56

HBase實踐

2014-03-19 14:34:06

JQuery高性能

2016-11-17 09:00:46

HBase優化策略

2022-07-08 09:38:27

攜程酒店Flutter技術跨平臺整合

2022-07-15 09:20:17

性能優化方案

2012-12-24 09:55:15

JavaJava WebJava優化

2021-09-02 10:10:59

技術VS Code實踐

2011-08-11 09:45:25

2025-01-21 14:00:00

Golang數據結構struct

2023-05-31 06:49:54

圖表查詢數據查詢

2023-12-30 14:05:32

Golangstruct數據結構

2022-12-28 20:11:25

圖數據庫
點贊
收藏

51CTO技術棧公眾號

国内av一区二区| 手机看片福利永久国产日韩| 麻豆国产尤物av尤物在线观看| 国模大尺度视频一区二区| 亚洲美女淫视频| 精品国产一区二区三区四区精华| 亚洲天堂视频在线播放| 亚洲综合中文| 日韩国产高清污视频在线观看| 欧美日韩在线成人| 国产原创视频在线观看| 91亚洲国产成人精品一区二三| 国产精品视频yy9099| 久久久久久久国产精品毛片| 精品久久视频| 亚洲第一视频网站| 色戒在线免费观看| 欧美xxxhd| 亚洲欧美激情插 | 国产精品麻豆| 色偷偷成人一区二区三区91| 中文字幕色呦呦| 在线观看麻豆蜜桃| 91丝袜高跟美女视频| 91在线观看免费| 亚洲 小说区 图片区| 99热精品在线| 欧美激情在线观看视频| 中文国语毛片高清视频| 在线观看欧美理论a影院| 欧美一级高清片| 日本超碰在线观看| av在线一区不卡| 欧美视频在线免费| 国产男女免费视频| 欧美aaa免费| 亚洲六月丁香色婷婷综合久久 | 你懂得在线网址| caoporm超碰国产精品| 亚洲自拍小视频| 国产一区二区三区三州| 蜜桃av一区二区三区| 日韩美女视频在线观看| 超碰超碰超碰超碰| 中文日韩欧美| 91av在线影院| 你懂的国产视频| 亚洲黄页一区| 91成人在线视频| 欧美亚韩一区二区三区| 一区在线视频| 日韩中文字幕精品视频| 亚洲精品无码一区二区| 亚洲乱码一区| 亚洲成人av在线播放| 稀缺呦国内精品呦| 精品日产乱码久久久久久仙踪林| 亚洲二区中文字幕| 亚洲国产欧美视频| 伊人久久大香线蕉| 一本大道亚洲视频| 日韩一级片在线免费观看| 精品久久久久久久久久久aⅴ| 一本一本久久a久久精品牛牛影视| 草草影院第一页| 国产一卡不卡| 色婷婷久久av| 免看一级a毛片一片成人不卡| 国内一区二区三区| 91av视频在线观看| 欧美brazzers| 国产在线精品一区二区夜色| 亚洲www在线观看| 亚洲爆乳无码一区二区三区| 成人免费视频视频在线观看免费 | 亚洲精品97久久中文字幕| 国产精品1区2区| 激情伦成人综合小说| 欧美成人综合在线| 中文字幕一区二区三区不卡 | 久久久com| 国产日本在线| 亚洲三级免费观看| 成人一级生活片| 午夜不卡影院| 欧美喷水一区二区| 国产国语老龄妇女a片| 日韩美脚连裤袜丝袜在线| 精品久久国产字幕高潮| 香蕉久久久久久av成人| 丝袜av一区| 日韩在线视频一区| 日本少妇xxxx动漫| 蜜臂av日日欢夜夜爽一区| 超碰97在线资源| 成人精品一区二区三区免费| 亚洲乱码日产精品bd| 熟女性饥渴一区二区三区| 亚洲成人高清| 精品伊人久久97| 男人操女人的视频网站| 裸体素人女欧美日韩| 亚洲综合一区二区不卡| 欧美成熟毛茸茸| 亚洲一区免费视频| 男操女免费网站| 欧美成人基地| 久久夜色精品国产欧美乱| 丁香六月婷婷综合| 国产一区91精品张津瑜| 日韩午夜视频在线观看| bl视频在线免费观看| 精品视频在线免费观看| 久久一区二区电影| 午夜精品久久| 国产日韩在线视频| 人成在线免费视频| 亚洲一区二区av电影| www.cao超碰| 国产成人影院| 78色国产精品| 黄色av网站免费在线观看| 国产精品久久三| 黄在线观看网站| 精品精品国产毛片在线看| 久久综合电影一区| 中文字幕一区二区三区免费看| aaa欧美色吧激情视频| 青青草原网站在线观看| 成人黄色毛片| 永久免费精品影视网站| 免费观看一区二区三区毛片| 国产不卡一区视频| 好色先生视频污| 深夜日韩欧美| 中文字幕欧美视频在线| 国产精品suv一区| 久久网站热最新地址| 国产极品尤物在线| 加勒比色老久久爱综合网| 欧美第一黄色网| 99久久婷婷国产一区二区三区| 中文字幕av在线一区二区三区| 成年人免费大片| 欧美人与拘性视交免费看| 26uuu国产精品视频| 色婷婷中文字幕| 午夜激情久久久| 黄色激情在线观看| 亚洲青涩在线| 久久久久久欧美精品色一二三四| 91九色porn在线资源| 精品1区2区在线观看| 国产大片aaa| 97久久人人超碰| 欧美三级午夜理伦三级| 国产99精品一区| 国产精品69精品一区二区三区| 国产亚洲依依| 欧美日韩成人综合天天影院| 中文字幕观看av| 国产精品综合一区二区三区| av日韩在线看| 欧美亚视频在线中文字幕免费| 亲子乱一区二区三区电影| 韩国三级av在线免费观看| 欧美午夜电影网| 四虎精品免费视频| 国产成人99久久亚洲综合精品| 国产精品www在线观看| 色88888久久久久久影院| 欧美中文字幕视频| 在线a人片免费观看视频| 在线成人午夜影院| 日本免费一二三区| 国产日韩欧美综合在线| 午夜国产福利在线观看| 国产精品黄色| 青娱乐国产91| 精品91福利视频| 欧美亚洲一级片| 伊人免费在线| 精品999久久久| 中文字幕久久久久| 亚洲一区二区三区小说| 97超碰在线资源| 国产一区二区成人久久免费影院| 被灌满精子的波多野结衣| 视频国产一区| 北条麻妃高清一区| 日本欧美一区| 欧美精品www| www.在线视频.com| 亚洲成人动漫在线播放| 中文字幕在线2018| 亚洲成人综合视频| 后入内射无码人妻一区| 成人av手机在线观看| 欧美wwwwwww| 亚洲在线播放| 日韩一级特黄毛片| 成人免费电影网址| 久久精品国产一区二区三区不卡| 亚洲精品自拍| 国产成人在线一区| 成全电影大全在线观看| 中文字幕在线国产精品| 无码国产色欲xxxx视频| 91精品久久久久久久91蜜桃 | 日韩一级二级三级精品视频| 欧美亚洲另类小说| 夜色激情一区二区| 国产wwwwxxxx| 国产午夜精品福利| 国产chinese中国hdxxxx| 麻豆精品精品国产自在97香蕉 | 紧缚捆绑精品一区二区| 99福利在线观看| 黑人一区二区| 国产av不卡一区二区| 欧美日韩精品在线一区| 精品在线不卡| 国产区精品视频在线观看豆花| 国产一区二中文字幕在线看| 深夜成人影院| 日本精品va在线观看| а√天堂8资源在线| 九色精品免费永久在线| 黄色成年人视频在线观看| 在线看日韩欧美| 国产鲁鲁视频在线观看免费| 亚洲精品一区久久久久久| 六月丁香综合网| 欧美v日韩v国产v| 999免费视频| 91精品国产乱| a级片免费观看| 3d成人h动漫网站入口| 伊人网av在线| 欧美私人免费视频| 中文字幕视频免费观看| 黄页网站在线| 久久精品一区二区三区不卡| 男生和女生一起差差差视频| 日本不卡一区二区| 国产一区二区色| 一炮成瘾1v1高h| 日本道在线观看一区二区| 精品在线视频观看| 一区二区三区欧美久久| 日韩三级av高清片| 久久久在线观看| 日本在线视频网址| 欧美国产日韩一区二区三区| 日本资源在线| 国产成人日日夜夜| 99国产视频在线| 国产高清精品二区| 亚洲精品免费av| 日韩中文一区二区| 久久久久久少妇| 国产亚洲一二三区| 六月婷婷七月丁香| 国产婷婷色一区二区三区四区| 精品人妻互换一区二区三区| 久久久久国色av免费看影院| 日本黄色小视频在线观看| 国产精品久久毛片| 日本天堂中文字幕| 婷婷丁香久久五月婷婷| 欧美精品一二三四区| 国产伦一区二区三区| 久久久久久久久久久久久9999| 精品中文字幕一区二区三区av| 色一情一区二区三区四区| 日韩av免费播放| 国产91在线观看丝袜| 婷婷中文字幕在线观看| 国产在线精品免费| 特级特黄刘亦菲aaa级| 91欧美一区二区| 五月婷婷婷婷婷| 亚洲精品国产品国语在线app| 久久精品这里有| 日本韩国欧美一区二区三区| 日本中文字幕片| 国产精品亚洲二区| 亚洲精品影院| 欧美一区视频| 3d动漫一区二区三区| 日本成人超碰在线观看| 亚洲天堂一区二区在线观看| av不卡在线播放| 登山的目的在线| 亚洲va在线va天堂| 伊人久久久久久久久| 黄色免费成人| 国产成人无码a区在线观看视频| 嫩草成人www欧美| 99日在线视频| 91在线码无精品| 日韩在线中文字幕视频| 日韩欧美国产免费播放| 国产伦精品一区二区三区四区| 精品日韩在线观看| 日本黄色录像片| 91一区一区三区| xxxx日本少妇| 欧美在线小视频| 日韩一级片免费| 久久五月天综合| 日韩影片中文字幕| 成人在线观看91| 亚洲高清影视| 免费看国产黄色片| 91影院在线观看| 日韩精品一区二区av| 日韩一区二区免费视频| www.91在线| 日本午夜人人精品| 免费看久久久| 2018中文字幕第一页| 狠狠色丁香婷婷综合| 日本乱子伦xxxx| 欧美日韩亚洲视频| 成人午夜视频一区二区播放| 久久天天躁日日躁| av成人在线看| 日韩影片在线播放| 久久精品麻豆| 蜜桃精品成人影片| 亚洲大片精品永久免费| www.久久久久久| 欧美成人免费小视频| 欧美在线一级| 一区二区不卡在线观看| 日韩在线a电影| 最近中文字幕免费视频| 欧美日韩一区免费| 亚州男人的天堂| 91精品国产乱码久久久久久久久| 白白在线精品| 可以看毛片的网址| 成a人片亚洲日本久久| 久久精品www| 亚洲国产99精品国自产| 2021中文字幕在线| 精品国产_亚洲人成在线| 一区二区三区四区五区精品视频 | 亚洲人成网站在线播放2019| 人人精品人人爱| 三级黄色录像视频| 日韩一区二区三区在线观看| 色呦呦在线播放| 国产色综合一区二区三区| 亚洲理论在线| 蜜桃精品一区二区| 在线视频国内一区二区| 午夜久久福利视频| 久久亚洲免费| 天堂成人娱乐在线视频免费播放网站 | 中文字幕69页| 一本色道久久综合狠狠躁篇怎么玩 | 欧美一区二区三区影院| 一区二区三区四区av| 开心激情综合网| 午夜精品久久久久久不卡8050| 天天av天天翘| 国产精品成人一区| 99re6这里只有精品| 一级黄色大片儿| 天天亚洲美女在线视频| 精品亚洲综合| 亚洲va久久久噜噜噜| 亚洲一级高清| 国产一二三四五区| 在线电影院国产精品| ririsao久久精品一区| 欧美凹凸一区二区三区视频| 日本成人在线电影网| 日韩成人毛片视频| 亚洲精品白浆高清久久久久久| 吞精囗交69激情欧美| 青青草原国产免费| av亚洲精华国产精华精| 中文字幕人妻互换av久久| 九九久久精品一区| 亚洲人成网站77777在线观看| 最新天堂中文在线| 亚洲成人精品在线观看| 国产视频第一区| 91亚洲精品丁香在线观看| 久久福利毛片| 青青草原在线免费观看视频| 亚洲另类图片色| 欧美影院视频| 精品久久久久久中文字幕2017| 一区二区三区在线不卡| 国产精品久久久久一区二区国产| av噜噜色噜噜久久|