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

webpack2終極優化

開發 前端
webpack是當下最流行的js打包工具,這得益于網頁應用日益復雜和js模塊化的流行。webpack2增加了一些新特性也正式發布了一段時間,是時候告訴大家如何用webpack2優化你的構建讓它構建出更小的文件尺寸和更好的開發體驗。

[[196557]]

webpack是當下***的js打包工具,這得益于網頁應用日益復雜和js模塊化的流行。webpack2增加了一些新特性也正式發布了一段時間,是時候告訴大家如何用webpack2優化你的構建讓它構建出更小的文件尺寸和更好的開發體驗。

優化輸出

打包結果更小可以讓網頁打開速度更快以及簡約寬帶。可以通過這以下幾點做到

壓縮css

css-loader 在webpack2里默認是沒有開啟壓縮的,***生成的css文件里有很多空格和tab,通過配置

css-loader?minimize參數可以開啟壓縮輸出最小的css。css的壓縮實際是是通過cssnano實現的。

tree-shaking

tree-shaking 是指借助es6 import export 語法靜態性的特點來刪掉export但是沒有import過的東西。要讓tree-shaking工作需要注意以下幾點:

  • 配置babel讓它在編譯轉化es6代碼時不把import export轉換為cmd的module.export,配置如下:
  1. "presets": [ 
  2.  
  3.     [ 
  4.  
  5.       "es2015"
  6.  
  7.       { 
  8.  
  9.         "modules"false 
  10.  
  11.       } 
  12.  
  13.     ] 
  14.  
  15.  
  • 大多數分布到npm的庫里的代碼都是es5的,但是也有部分庫(redux,react-router等等)開始支持tree-shaking。這些庫發布到npm里的代碼即包含es5的又包含全采用了es6 import export 語法的代碼。

拿redux庫來說,npm下載到的目錄結構如下:

  1. ├── es 
  2.  
  3. │   └── utils 
  4.  
  5. ├── lib 
  6.  
  7. │   └── utils  

其中lib目錄里是編譯出的es5代碼,es目錄里是編譯出的采用import export 語法的es5代碼,在redux的package.json文件里有這兩個配置:

  1. main": "lib/index.js", 
  2.  
  3. "jsnext:main""es/index.js" 

這是指這個庫的入口文件的位置,所以要讓webpack去讀取es目錄下的代碼需要使用jsnext:main字段配置的入口,要做到這點webpack需要這樣配置:

  1. module.exports = { 
  2.  
  3. resolve: { 
  4.  
  5.             mainFields: ['jsnext:main','main'], 
  6.  
  7.         } 
  8.  
  9. };  

這會讓webpack先使用jsnext:main字段,在沒有時使用main字段。這樣就可以優化支持tree-shaking的庫。

優化 UglifyJsPlugin

webpack --optimize-minimize 選項會開啟 UglifyJsPlugin來壓縮輸出的js,但是默認的UglifyJsPlugin配置并沒有把代碼壓縮到最小輸出的js里還是有注釋和空格,需要覆蓋默認的配置:

  1. new UglifyJsPlugin({ 
  2.  
  3.     // 最緊湊的輸出 
  4.  
  5.     beautify: false
  6.  
  7.     // 刪除所有的注釋 
  8.  
  9.     comments: false
  10.  
  11.     compress: { 
  12.  
  13.       // 在UglifyJs刪除沒有用到的代碼時不輸出警告   
  14.  
  15.       warnings: false
  16.  
  17.       // 刪除所有的 `console` 語句 
  18.  
  19.       // 還可以兼容ie瀏覽器 
  20.  
  21.       drop_console: true
  22.  
  23.       // 內嵌定義了但是只用到一次的變量 
  24.  
  25.       collapse_vars: true
  26.  
  27.       // 提取出出現多次但是沒有定義成變量去引用的靜態值 
  28.  
  29.       reduce_vars: true
  30.  
  31.     } 
  32.  
  33. })  

定義環境變量 NODE_ENV=production

很多庫里(比如react)有部分代碼是這樣的:

  1. if(process.env.NODE_ENV !== 'production'){ 
  2.  
  3. // 不是生產環境才需要用到的代碼,比如控制臺里看到的警告     
  4.  
  5.  

在環境變量 NODE_ENV 等于 production 的時候UglifyJs會認為if語句里的是死代碼在壓縮代碼時刪掉。

使用 CommonsChunkPlugin 抽取公共代碼

CommonsChunkPlugin可以提取出多個代碼塊都依賴的模塊形成一個單獨的模塊。要發揮CommonsChunkPlugin的作用還需要瀏覽器緩存機制的配合。在應用有多個頁面的場景下提取出所有頁面公共的代碼減少單個頁面的代碼,在不同頁面之間切換時所有頁面公共的代碼之前被加載過而不必重新加載。這個方法可以非常有效的提升應用性能。

在生產環境按照文件內容md5打hash

webpack編譯在生產環境出來的js、css、圖片、字體這些文件應該放到CDN上,再根據文件內容的md5命名文件,利用緩存機制用戶只需要加載一次,第二次加載時就直接訪問緩存。如果你之后有修改就會為對應的文件生產新的md5值。做到以上你需要這樣配置:

  1.  
  2.   output: { 
  3.  
  4.     publicPath: CND_URL, 
  5.  
  6.     filename: '[name]_[chunkhash].js'
  7.  
  8.   }, 
  9.  
  10.  

知道以上原理后我們還可以進一步優化:利用CommonsChunkPlugin提取出使用頁面都依賴的基礎運行環境。比如對于最常見的react體系你可以抽出基礎庫react react-dom redux react-redux到一個單獨的文件而不是和其它文件放在一起打包為一個文件,這樣做的好處是只要你不升級他們的版本這個文件永遠不會被刷新。如果你把這些基礎庫和業務代碼打包在一個文件里每次改動業務代碼都會導致瀏覽器重復下載這些包含基礎庫的代碼。以上的配置為:

  1. // vender.js 文件抽離基礎庫到單獨的一個文件里防止跟隨業務代碼被刷新 
  2.  
  3. // 所有頁面都依賴的第三方庫 
  4.  
  5. // react基礎 
  6.  
  7. import 'react'
  8.  
  9. import 'react-dom'
  10.  
  11. import 'react-redux'
  12.  
  13. // redux基礎 
  14.  
  15. import 'redux'
  16.  
  17. import 'redux-thunk' 
  1. // webpack配置 
  2.  
  3.  
  4.   entry: { 
  5.  
  6.     vendor: './path/to/vendor.js'
  7.  
  8.   }, 
  9.  
  10.  

DedupePlugin 和 OccurrenceOrderPlugin

在webpack1里經常會使用 DedupePlugin 插件來消除重復的模塊以及使用 OccurrenceOrderPlugin 插件讓被依賴次數更高的模塊靠前分到更小的id 來達到輸出更少的代碼,在webpack2里這些已經這兩個插件已經被移除了因為這些功能已經被內置了。

除了壓縮文本代碼外還可以:

  • 用imagemin-webpack-plugin 壓縮圖片
  • 用webpack-spritesmith 合并雪碧圖
  • 對于支持es6的js運行環境使用babili

以上優化點只需要在構建用于生產環境代碼的時候才使用,在開發環境時***關閉因為它們很耗時。

優化開發體驗

優化開發體驗主要從更快的構建和更方便的功能入手。

更快的構建

縮小文件搜索范圍

webpack的resolve.modules配置模塊庫(通常是指node_modules)所在的位置,在js里出現import 'redux'這樣不是相對也不是絕對路徑的寫法時會去node_modules目錄下找。但是默認的配置會采用向上遞歸搜索的方式去尋找node_modules,但通常項目目錄里只有一個node_modules在項目根目錄,為了減少搜索我們直接寫明node_modules的全路徑:

  1. module.exports = { 
  2.  
  3.     resolve: { 
  4.  
  5.         modules: [path.resolve(__dirname, 'node_modules')] 
  6.  
  7.     } 
  8.  
  9. };  

除此之外webpack配置loader時也可以縮小文件搜索范圍。

  • loader的test正則表達式也應該盡可能的簡單,比如在你的項目里只有.js文件時就不要把test寫成/\.jsx?$/
  • loader使用include***只需要處理的文件,比如babel-loader的這兩個配置:

只對項目目錄下src目錄里的代碼進行babel編譯

  1.  
  2.     test: /\.js$/, 
  3.  
  4.     loader: 'babel-loader'
  5.  
  6.     include: path.resolve(__dirname, 'src'
  7.  
  8.  

項目目錄下的所有js都會進行babel編譯,包括龐大的node_modules下的js

  1.  
  2.     test: /\.js$/, 
  3.  
  4.     loader: 'babel-loader' 
  5.  
  6.  

開啟 babel-loader 緩存

babel編譯過程很耗時,好在babel-loader提供緩存編譯結果選項,在重啟webpack時不需要創新編譯而是復用緩存結果減少編譯流程。babel-loader緩存機制默認是關閉的,打開的配置如下:

  1. module.exports = { 
  2.  
  3.     module: { 
  4.  
  5.          loaders: [{ 
  6.  
  7.                 test: /\.js$/, 
  8.  
  9.                 loader: 'babel-loader?cacheDirectory'
  10.  
  11.          }] 
  12.  
  13.   } 
  14.  
  15. };  

使用 alias

resolve.alias 配置路徑映射。

發布到npm的庫大多數都包含兩個目錄,一個是放著cmd模塊化的lib目錄,一個是把所有文件合成一個文件的dist目錄,多數的入口文件是指向lib里面下的。

默認情況下webpack會去讀lib目錄下的入口文件再去遞歸加載其它依賴的文件這個過程很耗時,alias配置可以讓webpack直接使用dist目錄的整體文件減少文件遞歸解析。配置如下:

  1. module.exports = { 
  2.  
  3.   resolve: { 
  4.  
  5.     alias: { 
  6.  
  7.       'moment''moment/min/moment.min.js'
  8.  
  9.       'react''react/dist/react.js'
  10.  
  11.       'react-dom''react-dom/dist/react-dom.js' 
  12.  
  13.     } 
  14.  
  15.   } 
  16.  
  17. };  

使用 noParse

module.noParse 配置哪些文件可以脫離webpack的解析。

有些庫是自成一體不依賴其他庫的沒有使用模塊化的,比如jquey、momentjs、chart.js,要使用它們必須整體全部引入。

webpack是模塊化打包工具完全沒有必要去解析這些文件的依賴,因為它們都不依賴其它文件體積也很龐大,要忽略它們配置如下:

  1. module.exports = { 
  2.  
  3.   module: { 
  4.  
  5.     noParse: /node_modules\/(jquey|moment|chart\.js)/ 
  6.  
  7.   } 
  8.  
  9. };  

除此以外還有很多可以加速的方法:

  • 使用happypack多進程并行構建
  • 使用DllPlugin復用模塊

更方便的功能

模塊熱替換

模塊熱替換是指在開發的過程中修改代碼后不用刷新頁面直接把變化的模塊替換到老模塊讓頁面呈現出***的效果。

webpack-dev-server內置模塊熱替換,配置起來也很方便,下面以react應用為例,步驟如下:

  • 在啟動webpack-dev-server的時候帶上--hot參數開啟模塊熱替換,在開啟--hot后針對css的變化是會自動熱替換的,但是js涉及到復雜的邏輯還需要進一步配置。
  • 配置頁面入口文件
  1. import App from './app'
  2.  
  3.   
  4.  
  5. function run(){ 
  6.  
  7. render(<App/>,document.getElementById('app')); 
  8.  
  9.  
  10. run(); 
  11.  
  12.   
  13.  
  14. // 只在開發模式下配置模塊熱替換 
  15.  
  16. if (process.env.NODE_ENV !== 'production') { 
  17.  
  18.   module.hot.accept('./app', run); 
  19.  
  20.  

當./app發生變化或者當./app依賴的文件發生變化時會把./app編譯成一個模塊去替換老的,替換完畢后重新執行run函數渲染出***的效果。

自動生成html

webpack只做了資源打包的工作還缺少把這些加載到html里運行的功能,在龐大的app里手寫html去加載這些資源是很繁瑣易錯的,我們需要自動正確的加載打包出的資源。

webpack原生不支持這個功能于是我做了一個插件 web-webpack-plugin

具體使用點開鏈接看詳細文檔,使用大概如下:

demo(https://github.com/gwuhaolin/web-webpack-plugin/tree/master/demo/out-html)

webpack配置

  1. module.exports = { 
  2.  
  3.     entry: { 
  4.  
  5.         A: './a'
  6.  
  7.         B: './b'
  8.  
  9.     }, 
  10.  
  11.     plugins: [ 
  12.  
  13.         new WebPlugin({ 
  14.  
  15.             // 輸出的html文件名稱,必填,注意不要重名,重名會覆蓋相互文件。 
  16.  
  17.             filename: 'index.html'
  18.  
  19.             // 該html文件依賴的entry,必須是一個數組。依賴的資源的注入順序按照數組的順序。 
  20.  
  21.             requires: ['A''B'], 
  22.  
  23.         }), 
  24.  
  25.     ] 
  26.  
  27. };  

將會輸出一個index.html文件,這個文件將會自動引入 entry A 和 B 生成的js文件,

輸出的html:

  1. <html> 
  2.  
  3. <head> 
  4.  
  5.     <meta charset="UTF-8"
  6.  
  7. </head> 
  8.  
  9. </body> 
  10.  
  11. <script src="A.js"></script> 
  12.  
  13. <script src="B.js"></script> 
  14.  
  15. </body> 
  16.  
  17. </html>  

輸出的目錄結構

  1. ├── A.js 
  2.  
  3. ├── B.js 
  4.  
  5. └── index.html  

管理多頁面

雖然webpack適用于單頁應用,但復雜的系統經常是由多個單頁應用組成,每個頁面一個功能模塊。webpack給出了js打包方案但缺少管理多個頁面的功能。 web-webpack-plugin的AutoWebPlugin會自動的為你的系統里每個單頁應用生成一個html入口頁,這個入口會自動的注入當前單頁應用依賴的資源,使用它你只需如下幾行代碼:

  1. plugins: [ 
  2.  
  3.     // ./src/pages/ 代表存放所有頁面的根目錄,這個目錄下的每一個目錄被看著是一個單頁應用 
  4.  
  5.     // 會為里面的每一個目錄生成一個html入口 
  6.  
  7.     new AutoWebPlugin('./src/pages/', { 
  8.  
  9.       //使用單頁應用的html模版文件,這里你可以自定義配置 
  10.  
  11.       template: './src/assets/template.html'
  12.  
  13.     }), 
  14.  
  15.   ],  

查看web-webpack-plugin的文檔了解更多

分析輸出結果

如果你對當前的配置輸出或者構建速度不滿意,webpack有一個工具叫做webpack analyze 以可視化的方式直觀的分析構建,來進一步優化構建結果和速度。要使用它你需要在執行webpack的時候帶上--json --profile2個參數,這代表讓webpack把構建結果以json輸出并帶上構建性能信息,使用如下:

  1. webpack --json --profile > stats.json 

會生產一個stats.json文件,再打開webpack analyze 上傳這個文件開始分析。

***附上這篇文章所講到的webpack整體的配置,分為開發環境的webpack.config.js和生產環境的webpack-dist.config.js 

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

2017-05-02 16:29:11

Webpack技巧建議

2017-03-24 10:56:21

Webpack技巧建議

2020-09-19 21:26:56

webpack

2019-03-15 15:00:49

Webpack構建速度前端

2021-09-06 06:45:06

Webpack優化MindMaster

2011-05-16 17:36:05

SEO

2021-11-09 09:57:46

Webpack 前端分包優化

2018-04-19 15:13:53

javascriptwebpackvue.js

2019-03-26 10:02:16

WebpackJavascript前端

2021-12-24 08:01:44

Webpack優化打包

2010-03-31 10:25:41

MyEclipse

2022-06-29 10:06:27

Webpack優化技巧前端

2017-03-28 10:11:12

Webpack 2React加載

2011-07-07 13:27:59

2019-03-05 10:20:49

WebWebpack分離數據

2024-05-30 07:55:43

2022-05-14 08:35:12

Webpack前端

2023-04-27 08:35:20

Webpack 4性能優化

2010-08-17 17:15:16

DB2終極

2023-05-31 08:19:23

Webpack4Webpack 5
點贊
收藏

51CTO技術棧公眾號

亚洲欧美va天堂人熟伦 | 亚洲涩涩av| 婷婷综合在线观看| 免费看国产精品一二区视频| 国产成人无码一区二区在线播放| 欧美伦理影院| 欧美一区二区三区日韩| 亚洲精品国产suv一区88| 精品乱码一区内射人妻无码| 91精品综合久久久久久久久久久| 欧美一级视频精品观看| 国产夫妻自拍一区| 天堂av在线免费观看| 久久婷婷影院| 久久久国产精品免费| 在线观看一区二区三区四区| 日韩大片免费观看| 国产精品视频第一区| 亚洲精品美女久久久| 日韩五码在线观看| 国模吧精品人体gogo| 日韩—二三区免费观看av| 精品一区精品二区| 在线观看国产一级片| 中文在线免费| 久久麻豆一区二区| 亚洲xxxxx电影| 国产污污视频在线观看| 99久久精品费精品国产| 亚洲国产精品美女| 五月天中文字幕在线| 丰满诱人av在线播放| 久久久国产午夜精品| 91视频婷婷| 国产乱码77777777| 久久精品影视| 亚洲第一男人av| 91精品无人成人www| 韩国日本一区| 国产精品精品国产色婷婷| 国产精品一区视频| 国产尤物视频在线观看| 午夜亚洲一区| 久久777国产线看观看精品| 性欧美丰满熟妇xxxx性仙踪林| 亚洲国产精选| 91极品视觉盛宴| 成人免费网站入口| 素人av在线| 成人av电影免费观看| 92国产精品久久久久首页 | 国产日韩中文字幕在线| 啦啦啦免费高清视频在线观看| 久久久久久久久久久妇女| 亚洲人成电影在线| 欧美深性狂猛ⅹxxx深喉| 综合久久伊人| 欧美性色黄大片| 欧美黄网站在线观看| 国产极品人妖在线观看| 亚洲欧美激情小说另类| 日韩av一区二区三区在线观看| 韩国中文字幕hd久久精品| 国产一区二区三区免费| 国产精品电影一区| 五月天综合激情网| 亚洲精品社区| 国产69精品久久久| 欧美成人免费看| 亚洲综合色网| 久久伊人精品视频| 婷婷激情四射网| 久久国产成人精品| 在线观看欧美日韩| 大乳护士喂奶hd| a级日韩大片| 精品福利一区二区三区免费视频| 绯色av蜜臀vs少妇| 99精品中文字幕在线不卡| 日韩午夜在线观看| 国产乱淫av片| 国产成人av毛片| 欧美tk—视频vk| 日本成人在线免费| 国产一级成人av| 亚洲国产成人在线视频| 一个人看的视频www| 日韩欧美高清一区二区三区| 欧美一区二区人人喊爽| wwwww在线观看| caoporn成人| 日韩成人在线免费观看| 亚洲av综合一区二区| 欧美日韩色图| 精品国产一区二区三区在线观看 | 国产又粗又猛又爽又黄视频| 极品美女销魂一区二区三区免费| 亚洲r级在线观看| 黄色成人一级片| 91免费版在线| 亚洲精品国产精品国自产| 老司机午夜在线视频| 一区二区三区中文字幕在线观看| 亚洲色图都市激情| av电影免费在线看| 91国偷自产一区二区使用方法| 爱情岛论坛亚洲首页入口章节| 在线视频成人| 亚洲国产成人精品久久| 久久精品国产亚洲av久| 99久久影视| 91精品国产精品| 五月婷婷丁香在线| 国内精品视频一区二区三区八戒| 肥熟一91porny丨九色丨| 香蕉视频成人在线| 国产精品美女久久福利网站 | 日韩大片在线免费观看| 一区二区日韩精品| 国产在线视频第一页| 乱码第一页成人| 国产精品极品美女粉嫩高清在线| 一级成人免费视频| 波多野结衣一区二区三区| 日韩久久久久久久| 美足av综合网| 欧美在线视频不卡| 男人网站在线观看| 久久久久久美女精品| 欧美最猛性xxxxx亚洲精品| 一级片免费观看视频| av不卡在线观看| 吴梦梦av在线| 欧美xxxxxx| 欧美本精品男人aⅴ天堂| 日本xxxxxxxxx18| 狠狠爱www人成狠狠爱综合网| 国产精品一区二区女厕厕| 少妇人妻偷人精品一区二区 | 午夜三级在线观看| 久久婷婷一区| 国产一区二区三区四区hd| 成人欧美在线| 欧美色视频一区| 在哪里可以看毛片| 亚洲激情亚洲| 97人人做人人人难人人做| 免费成人av电影| 一区二区三区中文在线| 亚洲美女性囗交| 精品高清久久| 欧美最近摘花xxxx摘花| 少妇一区二区三区四区| 一卡二卡三卡日韩欧美| 亚洲男人天堂av在线| 成人情趣视频| 国产成人亚洲综合| 日韩porn| 狠狠久久亚洲欧美专区| 99中文字幕在线| 大胆日韩av| 国产精品成人在线| 蝌蚪视频在线播放| 日本高清不卡一区| 精品少妇人妻一区二区黑料社区| 99热这里只有精品8| 国产精品一区二区在线观看| 欧美高清另类hdvideosexjaⅴ| 3d成人h动漫网站入口| 国产一区二区三区视频播放| 日本在线不卡一区| 日韩精品久久久免费观看 | 免费一区二区三区视频导航| 5566成人精品视频免费| 婷婷婷国产在线视频| 欧美日韩亚洲一区二| 亚洲最大免费视频| 国产日韩欧美一区在线| 久久视频在线观看中文字幕| 在线中文字幕视频观看| 精品日韩一区二区三区免费视频| 国产一级一片免费播放放a| 成人免费视频网站在线观看| 青春草国产视频| 丁香婷婷成人| 国产精品久久久精品| 性开放的欧美大片| 日韩午夜激情免费电影| 日韩欧美a级片| 国产欧美一区二区三区在线老狼| 污片在线免费看| 欧美成人日本| 国产精品xxx在线观看www| 岛国在线视频网站| 在线播放日韩欧美| 国产普通话bbwbbwbbw| 夜夜嗨av一区二区三区中文字幕 | www.com.av| 粉嫩高潮美女一区二区三区| 亚洲美免无码中文字幕在线| 国产va免费精品观看精品视频| 欧美一级黑人aaaaaaa做受| 四虎精品成人免费网站| 欧美午夜精品久久久久久孕妇 | 四虎国产精品免费久久| 欧美日本精品在线| 精品视频二区| 欧美一区二区免费| 日韩特级黄色片| 国产精品三级在线观看| 日本女人性视频| 校园春色综合网| 四虎影院一区二区三区| 日韩一区二区三区色| 97精品视频在线| aaa在线观看| 精品电影一区二区| 人妻中文字幕一区二区三区| 一区二区三区国产精品| 成人午夜剧场视频网站| 国产在线精品不卡| 国产在线青青草| 欧美大片aaaa| 国产主播一区二区三区四区| 国产一区二区三区四区五区3d| 欧美极品欧美精品欧美视频| h视频网站在线观看| 精品捆绑美女sm三区| 亚洲中文无码av在线| 午夜电影网一区| 国产午夜精品理论片| 久久久综合九色合综国产精品| 久久久精品视频国产| 91久久中文| 视色,视色影院,视色影库,视色网| 在线成人动漫av| 国产伦视频一区二区三区| 2019中文亚洲字幕| 国产福利成人在线| 男人av在线播放| 美女av一区二区| 秋霞av在线| 欧美精品一区二区三区很污很色的| 在线观看xxxx| 在线免费亚洲电影| 久久99精品波多结衣一区| 亚洲综合一区在线| 91麻豆免费视频网站| 中文字幕二三区不卡| 国产熟妇久久777777| 99视频精品在线| 91九色蝌蚪porny| 国产高清一区日本| 91性高潮久久久久久久| 韩国精品在线观看| 男女av免费观看| 激情综合中文娱乐网| av中文字幕av| 欧美国产91| 国产精品视频一二三四区| 午夜久久免费观看| 在线看成人av电影| 日韩激情免费| 欧美日韩一区二区视频在线| 亚洲宅男网av| 欧美日韩高清免费| 国产一区二区三区站长工具| 欧美日韩另类丝袜其他| 亚洲影院天堂中文av色| 欧美一区观看| 嫩草一区二区三区| 国产精品xxxx| 菁菁伊人国产精品| 久久99精品国产一区二区三区| 久久资源综合| 久久久久网址| 国产影视一区| 四虎影院一区二区三区 | 日韩精品免费专区| 污污网站免费看| 久久精品国产免费| 三年中文在线观看免费大全中国| 国内精品国产成人| 无码人妻少妇色欲av一区二区| 国产精品一区二区视频| 18禁一区二区三区| av在线综合网| 91成人破解版| 国产精品福利电影一区二区三区四区 | 久久99精品久久久久久久青青日本 | 日韩免费毛片| 久草成人在线| 久久久国产精华液999999| 国产精品va| 久久精品午夜福利| 久久精品国产**网站演员| 日本高清久久久| 国产成人av一区| 国产一级二级在线观看| 欧美国产综合色视频| 色婷婷在线视频观看| 午夜精品久久久久影视| wwwxxx亚洲| 3751色影院一区二区三区| 神马一区二区三区| 尤物tv国产一区| 欧美韩日亚洲| 国产精品久久久久久久久久新婚 | avtt综合网| 欧美综合77777色婷婷| 亚洲影视一区二区三区| 99999精品视频| 国内精品免费**视频| 国产国语性生话播放| 中文字幕一区二区视频| 日韩欧美一区二区一幕| 4438成人网| 精品久久久久一区二区三区| 久久精品福利视频| 伊人久久视频| 亚洲精品日韩av| 蜜桃一区二区| 国产九色porny| 国产激情精品久久久第一区二区| 五月天婷婷丁香网| 色婷婷国产精品| 亚洲人妻一区二区| 久久久免费高清电视剧观看| 美国十次综合久久| 四虎影院一区二区| 精品夜夜嗨av一区二区三区| 久久久视频6r| 日韩欧美成人免费视频| 午夜视频福利在线观看| 久久久久久久999精品视频| 日韩精品免费视频一区二区三区| 一区二区不卡在线观看| 日本视频一区二区三区| 亚洲а∨天堂久久精品2021| 一道本成人在线| 日本大片在线观看| 91成人福利在线| 欧美天堂影院| 久久久久久久午夜| 99久久精品免费看国产免费软件| 久久9999久久免费精品国产| 日韩欧美专区在线| 亚洲男同gay网站| 成人在线视频电影| 亚洲日本欧美| 亚洲av成人片无码| 大桥未久av一区二区三区| 少妇激情av一区二区| 日韩免费观看在线观看| 成人影院在线| 国产九九在线观看| 最新热久久免费视频| 国产日本精品视频| 久久91亚洲人成电影网站| 91精品日本| 无码aⅴ精品一区二区三区浪潮 | 久久亚裔精品欧美| 亚洲专区免费| 国产真人真事毛片视频| 欧美另类久久久品| 国产剧情在线| 国产一区二区精品免费| 久久综合婷婷| 肉色超薄丝袜脚交69xx图片| 日韩亚洲欧美在线| yellow字幕网在线| 日韩经典在线视频| 国产高清无密码一区二区三区| 日韩精品视频播放| 在线观看不卡av| 综合成人在线| 欧在线一二三四区| 亚洲欧美偷拍另类a∨色屁股| 亚洲精品国产一区二| 日本精品久久久久影院| 日韩毛片视频| 国产日韩视频一区| 在线观看日韩一区| 在线中文字幕视频观看| 欧美另类高清视频在线| 国产麻豆欧美日韩一区| 国产精品999在线观看| 中文字幕免费精品一区| 亚洲视频国产| 一区二区三区入口| 亚洲成人福利片| av在线女优影院| 成人xxxxx色| 人人精品人人爱| 精品无码免费视频| 中文字幕在线看视频国产欧美在线看完整| 在线播放一区二区精品视频| 久久9精品区-无套内射无码| 亚洲人成精品久久久久| 免费看男男www网站入口在线|