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

「Webpack」從0到1學會 Code Splitting

開發(fā) 前端
在默認的配置情況下,我們知道,webpack 會把所有代碼打包到一個 chunk 中,舉個例子當你的一個單頁面應(yīng)用很大的時候,你可能就需要將每個路由拆分到一個 chunk 中,這樣才方便我們實現(xiàn)按需加載。

[[408514]]

本文轉(zhuǎn)載自微信公眾號「微醫(yī)大前端技術(shù)」,作者焦傳鍇。轉(zhuǎn)載本文請聯(lián)系微醫(yī)大前端技術(shù)公眾號。

一、前言

在默認的配置情況下,我們知道,webpack 會把所有代碼打包到一個 chunk 中,舉個例子當你的一個單頁面應(yīng)用很大的時候,你可能就需要將每個路由拆分到一個 chunk 中,這樣才方便我們實現(xiàn)按需加載。

代碼分離是 webpack 中最引人注目的特性之一。此特性能夠把代碼分離到不同的 bundle 中,然后可以按需加載或并行加載這些文件。代碼分離可以用于獲取更小的 bundle,以及控制資源加載優(yōu)先級,如果使用合理,會極大影響加載時間。

二、關(guān)于代碼分割

接下來我們會分別分析不同的代碼分隔方式帶來的打包差異,首先我們的項目假設(shè)有這兩個簡單的文件??

index.js

  1. import { mul } from './test' 
  2. import $ from 'jquery' 
  3.  
  4. console.log($) 
  5. console.log(mul(2, 3)) 

test.js

  1. import $ from 'jquery' 
  2.  
  3. console.log($) 
  4.  
  5. function mul(a, b) { 
  6.     return a * b 
  7.  
  8. export { mul } 

可以看到現(xiàn)在他們二者都依賴于 jquery 這個庫,并且相互之間也會有依賴。

當我們在默認配置的情況下進行打包,結(jié)果是這樣的??,會把所有內(nèi)容打包進一個 main bundle 內(nèi)(324kb)

那么我們?nèi)绾斡米钪苯拥姆绞綇倪@個 bundle 中分離出其他模塊呢?

1. 多入口

webpack 配置中的 entry ,可以設(shè)置為多個,也就是說我們可以分別將 index 和 test 文件分別作為入口:

  1. // entry: './src/index.js', 原來的單入口 
  2. /** 現(xiàn)在分別將它們作為入口 */ 
  3. entry:{ 
  4.   index:'./src/index.js'
  5.   test:'./src/test.js' 
  6. }, 
  7. output: { 
  8.   filename: '[name].[hash:8].js'
  9.   path: path.resolve(__dirname, './dist'), 
  10. }, 

這樣讓我們看一下這樣打包后的結(jié)果:

確實打包出了兩個文件!但是為什么兩個文件都有 320+kb 呢?不是說好拆分獲取更小的 bundle ?這是因為由于二者都引入了 jquery 而 webpack 從兩次入口進行打包分析的時候會每次都將依賴的模塊分別打包進去

沒錯,這種配置的方式確實會帶來一些隱患以及不便:

  • 如果入口 chunk 之間包含一些重復(fù)的模塊,那些重復(fù)模塊都會被引入到各個 bundle 中。
  • 這種方法不夠靈活,并且不能動態(tài)地將核心應(yīng)用程序邏輯中的代碼拆分出來。

那么有沒有方式可以既可以將共同依賴的模塊進行打包分離,又不用進行繁瑣的手動配置入口的方式呢?那必然是有的。

2. SplitChunksPlugin

SplitChunks 是 webpack5 自帶的開箱即用的一個插件,他可以將滿足規(guī)則的 chunk 進行分離,也可以自定義配置。在 webpack5 中用它取代了 webpack4 中的用來解決重復(fù)依賴的 CommonsChunkPlugin 。

讓我們在我們的 webpack 配置中加上一些配置:

  1. entry: './src/index.js', // 這里我們改回單入口 
  2. /** 加上如下設(shè)置 */ 
  3. optimization: { 
  4.   splitChunks: { 
  5.     chunks: 'all'
  6.   }, 
  7. }, 

打包后的結(jié)果如圖:

可以看到很明顯除了根據(jù)入口打包出的 main bundle 之外,還多出了一個名為 vendors-node_modules_jquery_dist_jquery_js.xxxxx.js ,顯然這樣我們將公用的 jquery 模塊就提取出來了。

接下來我們來探究一下 SplitChunksPlugin 。首先看下配置的默認值:

  1. splitChunks: { 
  2.     // 表示選擇哪些 chunks 進行分割,可選值有:async,initial 和 all 
  3.     chunks: "async"
  4.     // 表示新分離出的 chunk 必須大于等于 minSize,20000,約 20kb。 
  5.     minSize: 20000, 
  6.     // 通過確保拆分后剩余的最小 chunk 體積超過限制來避免大小為零的模塊,僅在剩余單個 chunk 時生效 
  7.     minRemainingSize: 0, 
  8.     // 表示一個模塊至少應(yīng)被 minChunks 個 chunk 所包含才能分割。默認為 1。 
  9.     minChunks: 1, 
  10.     // 表示按需加載文件時,并行請求的最大數(shù)目。 
  11.     maxAsyncRequests: 30, 
  12.     // 表示加載入口文件時,并行請求的最大數(shù)目。 
  13.     maxInitialRequests: 30, 
  14.     // 強制執(zhí)行拆分的體積閾值和其他限制(minRemainingSize,maxAsyncRequests,maxInitialRequests)將被忽略 
  15.     enforceSizeThreshold: 50000, 
  16.     // cacheGroups 下可以可以配置多個組,每個組根據(jù) test 設(shè)置條件,符合 test 條件的模塊,就分配到該組。模塊可以被多個組引用,但最終會根據(jù) priority 來決定打包到哪個組中。默認將所有來自 node_modules 目錄的模塊打包至 vendors 組,將兩個以上的 chunk 所共享的模塊打包至 default 組。 
  17.     cacheGroups: { 
  18.         defaultVendors: { 
  19.             test: /[\\/]node_modules[\\/]/, 
  20.             // 一個模塊可以屬于多個緩存組。優(yōu)化將優(yōu)先考慮具有更高 priority(優(yōu)先級)的緩存組。 
  21.             priority: -10, 
  22.             // 如果當前 chunk 包含已從主 bundle 中拆分出的模塊,則它將被重用 
  23.             reuseExistingChunk: true
  24.         }, 
  25.        default: { 
  26.             minChunks: 2, 
  27.             priority: -20, 
  28.             reuseExistingChunk: true 
  29.         } 
  30.     } 

默認情況下,SplitChunks 只會對異步調(diào)用的模塊進行分割(chunks: "async"),并且默認情況下處理的 chunk 至少要有 20kb ,過小的模塊不會被包含進去。

補充一下,默認值會根據(jù) mode 的配置不同有所變化,具體參見源碼:

  1. const { splitChunks } = optimization; 
  2. if (splitChunks) { 
  3.   A(splitChunks, "defaultSizeTypes", () => ["javascript""unknown"]); 
  4.   D(splitChunks, "hidePathInfo", production); 
  5.   D(splitChunks, "chunks""async"); 
  6.   D(splitChunks, "usedExports", optimization.usedExports === true); 
  7.   D(splitChunks, "minChunks", 1); 
  8.   F(splitChunks, "minSize", () => (production ? 20000 : 10000)); 
  9.   F(splitChunks, "minRemainingSize", () => (development ? 0 : undefined)); 
  10.   F(splitChunks, "enforceSizeThreshold", () => (production ? 50000 : 30000)); 
  11.   F(splitChunks, "maxAsyncRequests", () => (production ? 30 : Infinity)); 
  12.   F(splitChunks, "maxInitialRequests", () => (production ? 30 : Infinity)); 
  13.   D(splitChunks, "automaticNameDelimiter""-"); 
  14.   const { cacheGroups } = splitChunks; 
  15.   F(cacheGroups, "default", () => ({ 
  16.     idHint: ""
  17.     reuseExistingChunk: true
  18.     minChunks: 2, 
  19.     priority: -20 
  20.   })); 
  21.   F(cacheGroups, "defaultVendors", () => ({ 
  22.     idHint: "vendors"
  23.     reuseExistingChunk: true
  24.     test: NODE_MODULES_REGEXP, 
  25.     priority: -10 
  26.   })); 

cacheGroups 緩存組是施行分割的重中之重,他可以使用來自 splitChunks.* 的任何選項,但是 test、priority 和 reuseExistingChunk 只能在緩存組級別上進行配置。默認配置中已經(jīng)給我們提供了 Vendors 組和一個 defalut 組,**Vendors **組中使用 test: /[\\/]node_modules[\\/]/ 匹配了 node_modules 中的所有符合規(guī)則的模塊。

Tip:當 webpack 處理文件路徑時,它們始終包含 Unix 系統(tǒng)中的 / 和 Windows 系統(tǒng)中的 \。這就是為什么在 {cacheGroup}.test 字段中使用 [\/] 來表示路徑分隔符的原因。{cacheGroup}.test 中的 / 或 \ 會在跨平臺使用時產(chǎn)生問題。

綜上的配置,我們便可以理解為什么我們在打包中會產(chǎn)生出名為 vendors-node_modules_jquery_dist_jquery_js.db47cc72.js 的文件了。如果你想要對名稱進行自定義的話,也可以使用 splitChunks.name 屬性(每個 cacheGroup 中都可以使用),這個屬性支持使用三種形式:

  • boolean = false 設(shè)為 false 將保持 chunk 的相同名稱,因此不會不必要地更改名稱。這是生產(chǎn)環(huán)境下構(gòu)建的建議值。
  • function (module, chunks, cacheGroupKey) => string 返回值要求是 string 類型,并且在 chunks 數(shù)組中每一個 chunk 都有 chunk.name 和 chunk.hash 屬性,舉個例子 
  1. name(module, chunks, cacheGroupKey) { 
  2.   const moduleFileName = module 
  3.   .identifier() 
  4.   .split('/'
  5.   .reduceRight((item) => item); 
  6.   const allChunksNames = chunks.map((item) => item.name).join('~'); 
  7.   return `${cacheGroupKey}-${allChunksNames}-${moduleFileName}`; 
  8. }, 
  • string 指定字符串或始終返回相同字符串的函數(shù)會將所有常見模塊和 vendor 合并為一個 chunk。這可能會導(dǎo)致更大的初始下載量并減慢頁面加載速度。

另外注意一下 splitChunks.maxAsyncRequests 和 splitChunks.maxInitialRequests 分別指的是按需加載時最大的并行請求數(shù)和頁面初始渲染時候需要的最大并行請求數(shù)

在我們的項目較大時,如果需要對某個依賴單獨拆包的話,可以進行這樣的配置:

  1. cacheGroups: { 
  2.   react: { 
  3.     name'react'
  4.       test: /[\\/]node_modules[\\/](react)/, 
  5.       chunks: 'all'
  6.       priority: -5, 
  7.   }, 
  8.  }, 

這樣打包后就可以拆分指定的包:

更多配置詳見官網(wǎng)配置文檔

3. 動態(tài) import

使用 import()語法 來實現(xiàn)動態(tài)導(dǎo)入也是我們非常推薦的一種代碼分割的方式,我們先來簡單修改一下我們的 index.js ,再來看一下使用后打包的效果:

  1. // import { mul } from './test' 
  2. import $ from 'jquery' 
  3.  
  4. import('./test').then(({ mul }) => { 
  5.     console.log(mul(2,3)) 
  6. }) 
  7.  
  8. console.log($) 
  9. // console.log(mul(2, 3)) 

可以看到,通過 import() 語法導(dǎo)入的模塊在打包時會自動單獨進行打包

值得注意的是,這種語法還有一種很方便的“動態(tài)引用”的方式,他可以加入一些適當?shù)谋磉_式,舉個例子,假設(shè)我們需要加載適當?shù)闹黝}:

  1. const themeType = getUserTheme(); 
  2. import(`./themes/${themeType}`).then((module) => { 
  3.   // do sth aboout theme 
  4. }); 

這樣我們就可以“動態(tài)”加載我們需要的異步模塊,實現(xiàn)的原理主要在于兩點:

至少需要包含模塊相關(guān)的路徑信息,打包可以限定于一個特定的目錄或文件集。

根據(jù)路徑信息 webpack 在打包時會把 ./themes 中的所有文件打包進新的 chunk 中,以便需要時使用到。

4. 魔術(shù)注釋

在上述的 import() 語法中,我們會發(fā)現(xiàn)打包自動生成的文件名并不是我們想要的,我們?nèi)绾尾拍茏约嚎刂拼虬拿Q呢?這里就要引入我們的魔術(shù)注釋(Magic Comments):

  1. import(/* webpackChunkName: "my-chunk-name" */'./test'

通過這樣打包出來的文件:

魔術(shù)注釋不僅僅可以幫我們修改 chunk 名這么簡單,他還可以實現(xiàn)譬如預(yù)加載等功能,這里舉個例子:

我們通過希望在點擊按鈕時才加載我們需要的模塊功能,代碼可以這樣:

  1. // index.js 
  2. document.querySelector('#btn').onclick = function () { 
  3.   import('./test').then(({ mul }) => { 
  4.     console.log(mul(2, 3)); 
  5.   }); 
  6. }; 
  7. //test.js 
  8. function mul(a, b) { 
  9.   return a * b; 
  10. console.log('test 被加載了'); 
  11. export { mul }; 

可以看到,在我們點擊按鈕的同時確實加載了 test.js 的文件資源。但是如果這個模塊是一個很大的模塊,在點擊時進行加載可能會造成長時間 loading 等用戶體驗不是很好的效果,這個時候我們可以使用我們的 /* webpackPrefetch: true */ 方式進行預(yù)獲取,來看下效果:

  1. // index,js 
  2.  
  3. document.querySelector('#btn').onclick = function () { 
  4.   import(/* webpackPrefetch: true */'./test').then(({ mul }) => { 
  5.     console.log(mul(2, 3)); 
  6.   }); 
  7. }; 

可以看到整個過程中,在畫面初始加載的時候,test.js 的資源就已經(jīng)被預(yù)先加載了,而在我們點擊按鈕時,會從 (prefetch cache) 中讀取內(nèi)容。這就是模塊預(yù)獲取的過程。另外我們還有 /* webpackPreload: true */ 的方式進行預(yù)加載。

但是 prefetch 和 preload 聽起來感覺差不多,實際上他們的加載時機等是完全不同的:

  • preload chunk 會在父 chunk 加載時,以并行方式開始加載。prefetch chunk 會在父 chunk 加載結(jié)束后開始加載。
  • preload chunk 具有中等優(yōu)先級,并立即下載。prefetch chunk 在瀏覽器閑置時下載。
  • preload chunk 會在父 chunk 中立即請求,用于當下時刻。prefetch chunk 會用于未來的某個時刻。

三、結(jié)尾

在最初有工程化打包思想時,我們會考慮將多文件打包到一個文件內(nèi)減少多次的資源請求,隨著項目的越來越復(fù)雜,做項目優(yōu)化時,我們發(fā)現(xiàn)項目加載越久用戶體驗就越不好,于是又可以通過代碼分割的方式去減少頁面初加載時的請求過大的資源體積。

本文中僅簡單介紹了常用的 webpack 代碼分割方式,但是在實際的項目中進行性能優(yōu)化時,往往會有更加嚴苛的要求,希望可以通過本文的介紹讓大家快速了解上手代碼分割的技巧與優(yōu)勢。

參考

如何使用 splitChunks 精細控制代碼分割

Code Splitting - Webpack

 

責任編輯:武曉燕 來源: 微醫(yī)大前端技術(shù)
相關(guān)推薦

2016-11-28 16:23:23

戴爾

2022-05-09 08:35:43

面試產(chǎn)品互聯(lián)網(wǎng)

2022-09-02 09:09:25

項目ReactES6

2017-03-19 15:47:50

神經(jīng)網(wǎng)絡(luò)

2021-03-10 09:21:00

Spring開源框架Spring基礎(chǔ)知識

2023-03-06 11:35:55

經(jīng)營分析體系

2024-12-02 11:24:30

Docker編排技術(shù)

2025-11-05 02:11:00

2022-03-15 11:51:00

決策分析模型

2022-11-03 11:31:43

結(jié)構(gòu)分析法監(jiān)測

2023-12-07 07:14:36

WebpackVite

2014-03-17 11:05:00

ScriptCode Blocks

2023-03-19 17:36:38

2019-07-31 10:18:17

Web 開發(fā)Python

2022-04-07 10:02:58

前端檢測工具

2025-07-23 08:13:10

2017-05-27 09:23:10

IOS框架APP框架代碼

2023-03-22 11:41:56

2018-01-16 12:31:33

Python爬蟲數(shù)據(jù)

2022-06-13 07:02:02

Zadig平臺自動化
點贊
收藏

51CTO技術(shù)棧公眾號

激情综合网五月天| 成人亚洲精品777777大片| 日批免费在线观看| 亚洲欧美日韩精品一区二区| 亚洲人成在线免费观看| 久久无码高潮喷水| 欧洲不卡视频| 国产91精品欧美| 欧美在线观看一区二区三区| 亚洲色图欧美色| 日韩一级淫片| 欧亚洲嫩模精品一区三区| 一区二区视频在线观看| 国精品人妻无码一区二区三区喝尿| 欧美亚洲一区二区三区| 久热在线中文字幕色999舞| 国产免费一区二区三区最新6| 黑人巨大精品| 一区二区欧美视频| 日韩精品av一区二区三区| av网站在线观看免费| 免费在线亚洲欧美| 欧美xxxx做受欧美.88| 偷拍女澡堂一区二区三区| 91视频成人| 一本久道中文字幕精品亚洲嫩| 国产手机视频在线观看| 可以在线观看的av| 国产91精品精华液一区二区三区| 国产成人一区三区| 国产精品成人久久| 91精品国产自产拍在线观看蜜| 亚洲成人精品视频| 男人午夜视频在线观看| 国产一区二区主播在线| 亚洲va欧美va人人爽午夜| 手机看片日韩国产| 尤物网址在线观看| 久久免费的精品国产v∧| 99re在线视频上| 一级黄色a毛片| 天堂在线一区二区| 青草青草久热精品视频在线网站| 东方av正在进入| 日韩一区电影| 国产一区二区三区在线播放免费观看| 日本一区二区免费视频| 久久久久久久久成人| 欧美日韩一区国产| 久久九九国产视频| av电影一区| 激情成人在线视频| 国产高清av在线播放| 污污网站在线看| 成人欧美一区二区三区白人| 日韩欧美亚洲在线| 国产综合在线观看| 国产日韩欧美一区二区三区乱码 | 亚洲高清999| 欧美一区二区私人影院日本| 91香蕉视频在线观看视频| 99久久999| 欧美一区二区美女| 激情小说欧美色图| 精品国产影院| 日韩av最新在线观看| 西西大胆午夜视频| 国产欧美日韩精品一区二区免费| 国产亚洲人成网站在线观看| 人妻熟人中文字幕一区二区| 欧美a级片视频| 欧美成人精品一区二区三区| 免费在线观看黄视频| 亚洲视屏一区| 欧美在线一区二区三区四| 欧美亚洲另类小说| 久久成人羞羞网站| av在线不卡观看| 天堂av2024| 久久在线观看免费| 一区二区三区视频| 国内小视频在线看| 欧美日韩中文在线| 小泽玛利亚视频在线观看| 国内不卡的一区二区三区中文字幕 | 一级做a爰片久久毛片美女图片| 中文字幕第24页| 亚洲天天综合| 91av免费观看91av精品在线| 在线免费观看国产精品| 韩日av一区二区| 国产日韩精品推荐| 成黄免费在线| 亚洲一区视频在线| 熟女少妇精品一区二区| 韩国三级大全久久网站| 亚洲欧美在线免费观看| 欧美日韩色视频| 先锋亚洲精品| 亚洲最大成人免费视频| 日韩亚洲视频在线观看| 日韩美女视频一区二区| 自拍日韩亚洲一区在线| 欧美爱爱视频| 日韩精品福利在线| caoporn91| 肉肉av福利一精品导航| http;//www.99re视频| 成年人在线免费观看| 一区二区三区蜜桃| 亚州精品一二三区| 色愁久久久久久| 久久av在线播放| 波多野结衣大片| 成人禁用看黄a在线| 宅男一区二区三区| 成人免费无遮挡| 日韩欧美一区二区不卡| 我想看黄色大片| 一本色道久久综合亚洲精品高清| 91九色视频导航| 久久精品国产亚洲a∨麻豆| 亚洲激情图片一区| 欧美黄色性生活| 日本成人中文| 久久久久久91| 97caocao| 国产精品色噜噜| wwwxxx黄色片| 极品尤物一区| 欧美人与物videos| 91欧美日韩麻豆精品| 国产日韩精品一区二区三区| 国产av熟女一区二区三区| 欧美电影在线观看网站| 亚洲一区二区久久| 在线观看日韩中文字幕| 99视频有精品| 日本福利视频网站| 精品三级国产| 久久精品成人动漫| 在线播放亚洲精品| 亚洲国产高清不卡| 黄色一级二级三级| 精品国产一级毛片| 日韩av快播网址| 香蕉视频免费看| 亚洲3atv精品一区二区三区| 中文字幕在线观看视频www| 99精品电影| 国产欧美中文字幕| 日本在线人成| 3d动漫精品啪啪1区2区免费| 亚洲精品国产精品乱码在线观看| 日本不卡视频一二三区| 特级西西444www大精品视频| 97精品国产综合久久久动漫日韩 | 欧美精品色一区二区三区| 国产又黄又粗视频| 美女爽到高潮91| 亚洲一区二区三区精品在线观看| 久久99国产精品二区高清软件| 综合网日日天干夜夜久久| 国产精品51麻豆cm传媒| 国产精品久久久久久久第一福利| 在线观看国产一级片| 欧美r级电影| 91久久在线视频| av中文字幕在线观看| 日韩一区二区电影在线| 精品人妻在线播放| 91丨porny丨蝌蚪视频| 欧美 国产 小说 另类| 日本大胆欧美| 亚洲综合色激情五月| 51av在线| 中国china体内裑精亚洲片| 91久久精品国产91性色69| 一区二区高清在线| 蜜桃精品成人影片| 奇米精品一区二区三区四区| 国产人妻互换一区二区| 精品久久对白| 国产精品情侣自拍| 性xxxfreexxxx性欧美| 精品国产成人系列| 成人公开免费视频| 国产精品白丝在线| 亚洲啪av永久无码精品放毛片| 国产一区二区三区的电影 | 免费精品视频| 一区二区三区四区视频在线观看| 91麻豆精品激情在线观看最新| 91极品视频在线| 午夜激情视频在线观看| 精品国产乱码久久久久久老虎| 伊人手机在线视频| 中文字幕日韩av资源站| 亚洲色图14p| 精品系列免费在线观看| 九一国产精品视频| 久久综合99| 久久久久高清| 日韩一级淫片| 国产精品久久久999| 欧美韩日亚洲| 中文字幕精品在线| 日本黄色一区二区三区| 欧美日韩免费不卡视频一区二区三区| 久草国产在线观看| 国产精品视频一二三| bl动漫在线观看| 国产在线麻豆精品观看| 国产成人无码一二三区视频| 欧美午夜在线| 最新不卡av| 精品99在线| 久久精品综合一区| 欧美影院在线| 国产精品永久免费观看| 日韩电影av| 91国内在线视频| 男人添女人下部高潮视频在线观看| 一区二区三区无码高清视频| 婷婷丁香一区二区三区| 日韩视频永久免费| 国产一区二区三区在线观看 | 欧美第一黄网免费网站| 日本中文字幕电影在线免费观看| 亚洲免费中文字幕| 无码国产伦一区二区三区视频| 日韩丝袜美女视频| 国产精品高潮呻吟AV无码| 欧美亚洲自拍偷拍| 五月天激情国产综合婷婷婷| 亚洲国产另类精品专区| 欧美三级 欧美一级| 中文字幕日韩精品一区| 国产探花在线视频| 国产精品久久99| 你懂得视频在线观看| 亚洲国产高清不卡| 调教驯服丰满美艳麻麻在线视频| 久久色.com| 右手影院亚洲欧美| 91丨九色丨蝌蚪丨老版| 黄色性生活一级片| 久久亚洲捆绑美女| 天天躁日日躁aaaxxⅹ| 久久欧美中文字幕| 性高潮久久久久久久| 久久久国产一区二区三区四区小说| 亚洲国产精品无码久久久久高潮| 97久久精品人人澡人人爽| 亚洲第一黄色网址| 久久久精品黄色| 微拍福利一区二区| 国产精品三级久久久久三级| 日本黄区免费视频观看| 日韩毛片视频在线看| 亚洲国产成人精品综合99| 亚洲自拍另类综合| 日韩 欧美 综合| 色综合天天在线| 亚洲午夜在线播放| 在线综合亚洲欧美在线视频| 精品国产无码AV| 亚洲国产精品人人爽夜夜爽| 五月婷婷在线观看视频| 国产小视频国产精品| 日本在线观看| 欧美激情小视频| 原纱央莉成人av片| 国产在线播放不卡| 亚洲一区 二区| 久久一区免费| 四季av一区二区凹凸精品| 日韩精品久久一区二区| 国产日韩一区二区三区在线播放| 欧美日韩亚洲一二三| 国产真实乱偷精品视频免| 亚洲中文字幕无码一区| 中文字幕精品在线不卡| 久久久久97国产| 色综合久久久久| 国产丝袜在线视频| 日韩精品视频在线| 米奇777四色精品人人爽| 久久青草精品视频免费观看| 天天免费亚洲黑人免费| 亚洲影影院av| 美女久久99| 丰满人妻一区二区三区53号| 免费在线亚洲欧美| gogo亚洲国模私拍人体| 久久亚洲捆绑美女| 免费一级黄色大片| 欧美日韩极品在线观看一区| 韩国av在线免费观看| 一区三区二区视频| 91美女主播在线视频| 91精品久久久久久久久青青| 国内毛片久久| 艳母动漫在线观看| 久久看片网站| 日本少妇xxxx| 成人欧美一区二区三区白人| 日韩在线视频不卡| 亚洲国产成人爱av在线播放| 欧美jizz18性欧美| 日韩免费在线视频| 国产精品chinese在线观看| 一本久道久久综合| 久久美女性网| 国产高清自拍视频| 夜色激情一区二区| 97人妻精品一区二区三区| 亚洲欧美中文字幕| brazzers在线观看| 97人人干人人| 欧美电影一区| 国产一区二区在线免费播放| 99国产精品久久久久| 久草免费新视频| 日韩一区二区电影网| 日本成a人片在线观看| 国产精品第七十二页| 美女福利一区| 人人妻人人澡人人爽欧美一区双| 国产自产视频一区二区三区| 黄色三级生活片| 在线观看亚洲专区| 邻居大乳一区二区三区| 欧美一级bbbbb性bbbb喷潮片| 中文字幕一区二区三区日韩精品| 国产日本欧美在线| 激情久久五月天| 国产18无套直看片| 欧美视频完全免费看| 黄色av网站在线看| 日韩av片电影专区| 国产99久久久国产精品成人免费| 好吊妞无缓冲视频观看| 99久久99久久精品免费观看| 日韩欧美不卡视频| 亚洲精品在线一区二区| 精灵使的剑舞无删减版在线观看| 91在线免费视频| 亚洲人体av| 欧美日韩一区二区区别是什么 | 一区二区三区在线播放欧美| 日韩一区二区三区免费| 日本不卡免费新一二三区| 日韩专区中文字幕一区二区| 国产熟女一区二区| 欧美日韩情趣电影| 激情成人四房播| 97免费资源站| 国产一区导航| 日本免费www| 欧美精品三级日韩久久| 97超碰在线公开在线看免费| 亚洲影院色无极综合| 亚洲黄色三级| 精品无码人妻一区| 欧美性大战久久久久久久蜜臀| 午夜在线播放| 不卡视频一区二区| 国产一区二区三区的电影| 最新中文字幕av| 在线播放中文一区| 国产福利在线免费观看| 免费看成人午夜电影| 老司机精品视频导航| 蜜臀久久精品久久久用户群体| 精品国产乱码久久久久久影片| 成人影院入口| 伊人久久婷婷色综合98网| 国产成人免费网站| 日韩特级黄色片| 色偷偷av一区二区三区| 果冻天美麻豆一区二区国产| 一本色道无码道dvd在线观看| 国产精品二三区| 黄色av一区二区三区| 日韩美女在线观看| 一个色综合网| 亚洲一区二区三区蜜桃| 6080yy午夜一二三区久久| 女海盗2成人h版中文字幕| 亚洲欧洲日韩精品| 成人一级片在线观看| 免费精品一区二区| 久久91精品国产| 欧洲激情综合| 亚洲自拍偷拍精品| 欧美日韩亚洲不卡| 成人观看网址| a级黄色片网站| 久久久久久99精品|