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

面試官問 Vue 性能優化,我該怎么回答

開發 前端
本文是作者通過實際項目的優化實踐進行總結而來,希望讀者讀完本文,有一定的啟發思考,從而對自己的項目進行優化起到幫助。

前言

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

  • Vue 代碼層面的優化;

  • webpack 配置層面的優化;

  • 基礎的 Web 技術層面的優化。

一、代碼層面的優化

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. 復制代碼 

不推薦:

  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. 復制代碼 

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.   "presets": [["es2015", { "modules"false }]], 
  2.   "plugins": [ 
  3.     [ 
  4.       "component"
  5.       { 
  6.         "libraryName""element-ui"
  7.         "styleLibraryName""theme-chalk" 
  8.       } 
  9.     ] 
  10.   ] 
  11. 復制代碼 

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

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

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

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. 復制代碼 

如果要看插件的更多詳細內容,可以查看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 代表中等速度 )

開發環境推薦: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. 復制代碼 

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

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 開啟成功 :

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 停止錄制

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

總結

本文通過以下三部分組成:Vue 代碼層面的優化、webpack 配置層面的優化、基礎的 Web 技術層面的優化;來介紹怎么去優化 Vue 項目的性能。希望對讀完本文的你有幫助、有啟發,如果有不足之處,歡迎批評指正交流!

責任編輯:張燕妮 來源: code秘密花園
相關推薦

2022-11-23 17:44:10

HadoopHDFS

2019-11-21 08:40:44

面試官優化性能

2022-11-04 08:47:52

底層算法數據

2021-05-27 07:14:52

ZooKeeper節點類型

2022-06-29 16:59:21

Vue3Vue2面試

2021-10-22 08:37:13

消息不丟失rocketmq消息隊列

2021-11-08 09:18:01

CAS面試場景

2021-12-25 22:31:10

MarkWord面試synchronize

2019-08-23 09:20:35

Spring 5編程Java

2023-03-30 07:34:10

Linux性能數據結構

2020-12-01 11:50:49

數據庫Redis面試

2021-08-02 08:34:20

React性能優化

2021-11-05 06:57:50

HTTPHTTPS端口

2022-01-05 08:56:20

Vue修飾符面試

2021-12-02 08:19:06

MVCC面試數據庫

2024-03-25 11:03:38

Vue修飾符lazy

2019-02-15 20:00:49

軟件測試工程師面試

2021-12-16 18:38:13

面試Synchronize

2021-01-06 05:36:25

拉鏈表數倉數據

2010-08-23 15:06:52

發問
點贊
收藏

51CTO技術棧公眾號

欧美日韩电影一区| 91麻豆国产精品久久| 中文字幕欧美视频在线| 中文字幕第22页| 性欧美videos高清hd4k| 丁香六月综合激情| 欧美亚洲激情视频| 欧美一区二区三区粗大| 欧州一区二区三区| 精品日本美女福利在线观看| 日韩欧美亚洲精品| 精品国产av 无码一区二区三区| 亚洲黄色毛片| 中文字幕亚洲无线码a| 一区二区三区人妻| 免费日韩电影| 有坂深雪av一区二区精品| 精品乱码一区| 国产精品毛片一区二区在线看舒淇| 欧美视频日韩| 中文字幕亚洲欧美一区二区三区| 三上悠亚 电影| 欧美91看片特黄aaaa| 综合亚洲深深色噜噜狠狠网站| 国产精品日韩一区二区| 中文字幕人成人乱码亚洲电影| 精品99视频| xvideos亚洲| 亚洲成人日韩在线| 香蕉成人app| 欧美在线影院一区二区| 青草青青在线视频| 免费av在线网站| 国产成人亚洲综合色影视| 国产999在线| 精品少妇爆乳无码av无码专区| 成人激情免费视频| 日韩精品福利网站| 99国产精品免费视频| 99re久久| 日韩欧美999| 国产精品一色哟哟| 国产成人在线视频免费观看| 国产欧美一二三区| 免费精品视频一区| 人妻无码一区二区三区久久99 | 91在线丨porny丨国产| 成人淫片在线看| 欧美三级网站在线观看| 国产精品一区毛片| 久久久久在线观看| 黄色一级片在线| 九九热免费在线观看| av中文字幕一区二区三区| 91香蕉视频mp4| 精品国产电影| 人人妻人人澡人人爽人人欧美一区| 国产精品综合在线视频| 国产在线一区二区三区| 亚洲午夜精品久久久| 日韩在线观看一区二区| 国产成人黄色av| 黄瓜视频在线免费观看| 欧美一级专区| 欧洲精品毛片网站| 国产农村妇女aaaaa视频| 宅男噜噜噜66国产日韩在线观看| 亚洲91精品在线| 日韩精品成人一区| 中国女人久久久| 日本成人免费在线| 欧美人一级淫片a免费播放| 日韩在线卡一卡二| 国产欧美一区二区三区在线看 | 欧美做受高潮6| 精品大片一区二区| 中文字幕久久亚洲| 美女三级黄色片| 真实国产乱子伦精品一区二区三区| 久久久国产一区| 69av视频在线| 亚洲激情社区| 国产91在线播放精品91| 中文字幕av免费观看| 美腿丝袜在线亚洲一区| 成人性生交xxxxx网站| www久久久久久| 成人动漫精品一区二区| 蜜桃臀一区二区三区| 国产在线视频福利| 中文字幕中文字幕一区| 国产一级大片免费看| www欧美xxxx| 色哟哟日韩精品| 五月天婷婷影视| av综合网页| 亚洲视频电影图片偷拍一区| 在线观看天堂av| 亚洲夜间福利| 国产精品久久久久不卡| av一级黄色片| 久久综合色8888| 椎名由奈jux491在线播放| 欧美xxxx视频| 欧美亚洲图片小说| 好吊操视频这里只有精品| 免费黄色成人| 欧美成人精品在线播放| 你懂的国产在线| 精彩视频一区二区三区| 精品国产一区二区三区免费 | 国产精品乱码人人做人人爱| 日本一道在线观看| 卡通欧美亚洲| 日韩亚洲欧美一区| 三上悠亚影音先锋| 欧美日韩天堂| 国产欧美日韩专区发布| 性感美女福利视频| 亚洲另类在线一区| 日韩精品 欧美| 久久久精品区| 中文字幕成人在线| 日韩成年人视频| 国产一区免费电影| 日韩成人在线资源| av毛片午夜不卡高**水| 91精品一区二区三区久久久久久| 精品少妇人妻一区二区黑料社区 | 日韩欧美精品在线观看视频| 久久av网站| 日韩一区二区三区xxxx| 久久精品久久久久久久| 波多野洁衣一区| a级片一区二区| 热久久久久久| 在线播放精品一区二区三区| 永久免费看片在线播放| 国产成人综合亚洲网站| 一本一本a久久| 涩涩视频在线观看| 91精品国产乱码久久久竹菊| 日韩在线免费视频| 中文字幕av第一页| 久久综合久久综合久久| 久久精品无码中文字幕| 不卡精品视频| 久久精品小视频| 中文字幕在线一| 久久久久九九视频| 乱子伦视频在线看| 偷拍精品福利视频导航| 2019日本中文字幕| 天天干,夜夜操| 亚洲1区2区3区4区| 中国极品少妇xxxx| 亚洲青涩在线| 久草一区二区| av综合电影网站| 亚洲美女av电影| 69亚洲精品久久久蜜桃小说 | 青草在线视频| 欧美va亚洲va| 国产五月天婷婷| 成人黄色在线看| 男女超爽视频免费播放| 日韩高清一级| 国产91网红主播在线观看| 国产毛片在线| 欧美日韩精品一区二区在线播放| 青青青视频在线免费观看| 麻豆视频一区二区| 亚洲 日韩 国产第一区| 亚洲精品乱码日韩| 久久综合久久美利坚合众国| 国产成人精品毛片| 亚洲地区一二三色| 亚洲国产欧美视频| 奇米在线7777在线精品| 一区二区三区四区国产| 久久伦理中文字幕| 97色在线观看| 国产鲁鲁视频在线观看免费| 欧美日韩国产另类一区| 国语对白在线播放| 成人激情小说乱人伦| 久久久999视频| 日韩电影一区| 官网99热精品| 欧美与亚洲与日本直播| 久久夜色精品国产欧美乱| 欧美自拍偷拍一区二区| 色婷婷综合激情| 97成人资源站| 91小视频在线观看| 欧美三级午夜理伦三级富婆| 午夜久久久久| 欧美二区在线看| 国产精品久久免费视频 | 久久精品视频国产| 久久影视一区二区| 在线播放黄色av| 亚洲一区欧美二区| 久久免费视频2| 欧美调教视频| 91午夜理伦私人影院| 黄视频免费在线看| 精品国产一区二区三区四区在线观看 | 人妻无码中文久久久久专区| 毛片一区二区三区| 国产极品粉嫩福利姬萌白酱 | 少妇高潮喷水在线观看| 日韩av有码| 久久99精品国产99久久| 精品91福利视频| 国产精品高潮呻吟久久av无限| 制服丝袜在线播放| 视频直播国产精品| 黄色在线免费播放| 免费观看成人性生生活片| 久久久久999| 酒色婷婷桃色成人免费av网| 欧美成人性福生活免费看| 中文字幕日韩三级| 欧美视频二区36p| 国产精品19乱码一区二区三区| 亚洲国产精品精华液2区45| 在线xxxxx| 国产盗摄一区二区三区| 色天使在线观看| 日日夜夜精品视频免费| 热99这里只有精品| 欧美日韩三区| 国产 国语对白 露脸| 日韩不卡一区| 亚洲二区三区四区| 国产剧情在线观看一区| 久久久久久国产精品mv| 9l亚洲国产成人精品一区二三| 91久热免费在线视频| 国产精品亚洲成在人线| 国产98色在线| 在线人成日本视频| 国内外成人免费激情在线视频网站| 超碰在线最新| 久久精品在线播放| 色开心亚洲综合| 最近2019中文字幕mv免费看 | 在线免费看av片| 在线观看免费视频综合| 手机在线看片1024| 日本韩国欧美三级| 亚洲天堂视频在线播放| 在线观看av一区| 最近中文在线观看| 欧美午夜精品一区| 这里只有精品9| 欧美日韩亚洲综合在线| 在线观看国产精品视频| 欧美日韩国产在线观看| 亚洲熟妇无码久久精品| 欧美精品日韩一区| www.麻豆av| 亚洲成人教育av| 日韩一区二区三区不卡| 亚洲激情 国产| 欧美日韩激情视频一区二区三区| 精品亚洲精品福利线在观看| 每日更新av在线播放| 国产午夜精品视频免费不卡69堂| 日本1级在线| 亚洲三级 欧美三级| 国产黄色在线| 自拍偷拍亚洲精品| 国产三区在线观看| 国内伊人久久久久久网站视频| 国产免费拔擦拔擦8x在线播放 | 3d动漫一区二区三区在线观看| 成人性生交大片免费观看嘿嘿视频| 国产激情综合| 狠狠干一区二区| 精品欧美激情在线观看| 一本一道久久a久久精品综合 | 777米奇影视第四色| 欧美aaaaa成人免费观看视频| 色啦啦av综合| 成人午夜免费视频| 日本二区在线观看| 中文字幕一区二区三区蜜月| 久草网视频在线观看| 午夜电影一区二区| 中文字幕免费观看视频| 精品免费国产二区三区| 激情视频在线观看免费| 久热精品视频在线免费观看 | 午夜精品爽啪视频| 在线视频精品免费| 日韩欧美一级精品久久| 裸体xxxx视频在线| 欧美精品做受xxx性少妇| 香蕉伊大人中文在线观看| 国产欧美精品一区二区三区介绍| h视频久久久| 日韩一本精品| 日韩天天综合| 亚洲va在线va天堂va偷拍| 成人av网址在线| 91av手机在线| 亚洲成人资源网| 国产精品久久久久久在线| 亚洲精品国产精品乱码不99按摩| 在线观看免费网站黄| 久久人91精品久久久久久不卡| 日韩毛片在线| 好吊色欧美一区二区三区四区| 性xxxx欧美老肥妇牲乱| 免费男同深夜夜行网站 | 欧美一区二区成人| 二区三区在线| 欧洲精品在线视频| 欧美三级电影在线| 国产曰肥老太婆无遮挡| 狠狠网亚洲精品| 青青草自拍偷拍| 日本丰满少妇一区二区三区| 少妇av一区二区| 97精品中文字幕| 成人免费毛片播放| 久久久久久久久免费| 日本天堂网在线观看| 日韩欧美电影在线| а√资源新版在线天堂| 国产主播喷水一区二区| 精品一区二区三区在线 | 日本黑人久久| 国产日韩欧美三级| 中文字幕免费在线播放| 亚洲va韩国va欧美va| 亚洲毛片在线播放| 欧美精品久久久久久久免费观看| 欧美视频精品全部免费观看| 亚洲一区二区三区在线观看视频| 日韩电影在线观看网站| 久久精品国产亚洲av久| 欧美日韩免费看| 午夜性色福利影院| 91成品人片a无限观看| 日韩极品少妇| 欧美三级一级片| 久久综合九色欧美综合狠狠| 中文字幕在线观看视频网站| 亚洲成人性视频| 嗯~啊~轻一点视频日本在线观看| 91九色视频在线观看| 欧美日韩亚洲一区| 亚洲国产综合av| 亚洲成av人片www| 91久久精品无码一区二区| 日日狠狠久久偷偷四色综合免费| 丁香花在线观看完整版电影| 国产日本一区二区三区| 欧美三级第一页| 成人性生活免费看| 五月天久久比比资源色| 国家队第一季免费高清在线观看| 全球成人中文在线| 精品无人区麻豆乱码久久久| 亚洲精品高清无码视频| 国产日韩欧美电影| 国产又黄又猛又爽| 久久综合伊人77777| 盗摄系列偷拍视频精品tp| 日韩视频在线视频| 国产亚洲欧美色| 国模私拍一区二区| 精品自拍视频在线观看| 成人在线视频你懂的| 18黄暴禁片在线观看| 久久久精品蜜桃| 中文字幕在线网址| 国内精品在线一区| 亚洲动漫在线观看| 999这里有精品| 一卡二卡三卡日韩欧美| 免费毛片在线| 国产精品国产三级国产aⅴ9色| 成人激情电影在线| 日本精品一区在线| 亚洲国产成人av| 蝌蚪视频在线播放| 亚洲精品日韩av| 韩国亚洲精品| 国产jjizz一区二区三区视频| 91精品国产乱码久久蜜臀| 波多野结衣在线观看| 一区二区不卡在线视频 午夜欧美不卡'| 国产精品77777| 中文在线观看av| 欧美极品少妇xxxxⅹ裸体艺术| 国产一区网站|