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

前端構建新世代,Esbuild 原來還能這么玩!

開發 前端
Esbuild 是由 Figma 的 CTO 「Evan Wallace」基于 Golang 開發的一款打包工具,相比傳統的打包工具,主打性能優勢,在構建速度上可以快 10~100 倍。

Hello,我是三元同學。之前停更了一段時間,因為得了流感,一直在家養病,沒來得及更新文章,跟讀者朋友們先說聲抱歉~今天給大家帶來的是我最近寫的原創文章,由于近段時間一直在研究前端構建相關的領域,像 Esbuild、Vite 這些都接觸得比較多了,而且這些工具現在在前端圈也比較熱門,備受業界關注,因此我想我有必要把我研究過的一些東西分享給大家,希望能對你有所幫助。

什么是 Esbuild?

Esbuild 是由 Figma 的 CTO 「Evan Wallace」基于 Golang 開發的一款打包工具,相比傳統的打包工具,主打性能優勢,在構建速度上可以快 10~100 倍。

架構優勢

1. Golang 開發

采用 Go 語言開發,相比于 單線程 + JIT 性質的解釋型語言 ,使用 Go 的優勢在于 :

  • 一方面可以充分利用多線程打包,并且線程之間共享內容,而 JS 如果使用多線程還需要有線程通信(postMessage)的開銷;
  • 另一方面直接編譯成機器碼,而不用像 Node 一樣先將 JS 代碼解析為字節碼,然后轉換為機器碼,大大節省了程序運行時間。

2. 多核并行

內部打包算法充分利用多核 CPU 優勢。Esbuild 內部算法設計是經過精心設計的,盡可能充分利用所有的 CPU 內核。所有的步驟盡可能并行,這也是得益于 Go 當中多線程共享內存的優勢,而在 JS 中所有的步驟只能是串行的。

3. 從零造輪子

從零開始造輪子,沒有任何第三方庫的黑盒邏輯,保證極致的代碼性能。

4. 高效利用內存

一般而言,在 JS 開發的傳統打包工具當中一般會頻繁地解析和傳遞 AST 數據,比如 string -> TS -> JS -> string,這其中會涉及復雜的編譯工具鏈,比如 webpack -> babel -> terser,每次接觸到新的工具鏈,都得重新解析 AST,導致大量的內存占用。而 Esbuild 中從頭到尾盡可能地復用一份 AST 節點數據,從而大大提高了內存的利用效率,提升編譯性能。

與 SWC 對比

速度

下面拿純 Esbuild 和 SWC 來編譯代碼,作為 Transformer 來轉換 800+ 個 tsx 文件,不寫任何的 JS 膠水代碼(如 esbuild-register、esbuild-loader、swc-loader 本身為了適配相應的宿主工具,會寫一堆 JS 膠水代碼,影響判斷)。

從這個例子可以看出,Esbuild 與 SWC 在性能上是在一個量級的,這里通過倉庫的例子 Esbuild 略快,但不排除其他例子里面 SWC 比 Esbuild 略快的場景。

兼容性

Esbuild 本身的限制,包括如下:

  • 沒有 TS 類型檢查
  • 不能操作 AST
  • 不支持裝飾器語法
  • 產物 target 無法降級到 ES5 及以下

意味著需要 ES5 產物的場景只用 Esbuild 無法勝任。

相比之下,SWC 的兼容性更好:

  • 產物支持 ES5 格式
  • 支持裝飾器語法
  • 可以通過寫 JS 插件操作 AST

應用場景

對于 Esbuild 和 SWC,很多時候我們都在對比兩者的性能而忽略了應用場景。對于前端的構建工具來說主要有這樣幾個垂直的功能:

  • Bundler
  • Transformer
  • Minimizer

從上面的速度和兼容性對比可以看出,Esbuild 和 SWC 作為 transformer 性能是差不多的,但 Esbuild 兼容性遠遠不及 SWC。因此,SWC 作為 Transformer 更勝一籌。

但作為 Bundler 以及 Minimizer,SWC 就顯得捉襟見肘了,首先官方的 swcpack 目前基本處于不可用狀態,Minimizer 方面也非常不成熟,很容易碰到兼容性問題。

而 Esbuild 作為 Bundler 已經被 Vite 作為開發階段的依賴預打包工具,同時也被大量用作線上 esm CDN 服務,比如esm.sh等等;作為 Minimizer ,Esbuild 也已足夠成熟,目前已經被 Vite 作為 JS 和 CSS 代碼的壓縮工具用上了生產環境。

綜合來看,SWC 與 Esbuild 的關系類似于當下的 Babel 和 Webpack,前者更適合做兼容性和自定義要求高的 Transformer(比如移動端業務場景),而后者適合做 Bundler 和 Minimizer,以及兼容性和自定義要求均不高的 Transformer。

插件機制

esbuild 插件就是一個對象,里面有name和setup兩個屬性,name是插件的名稱,setup是一個函數,其中入參是一個 build 對象,這個對象上掛載了一些鉤子可供我們自定義一些構建邏輯。以下是一個簡單的esbuild插件示例:

  1. let envPlugin = { 
  2.   name'env'
  3.   setup(build) { 
  4.      // 文件解析時觸發 
  5.     // 將插件作用域限定于env文件,并為其標識命名空間"env-ns" 
  6.     build.onResolve({ filter: /^env$/ }, args => ({ 
  7.       path: args.path, 
  8.       namespace: 'env-ns'
  9.     })) 
  10.  
  11.     // 加載文件時觸發 
  12.     // 只有命名空間為"env-ns"的文件才會被處理 
  13.     // 將process.env對象反序列化為字符串并交由json-loader處理 
  14.     build.onLoad({ filter: /.*/, namespace: 'env-ns' }, () => ({ 
  15.       contents: JSON.stringify(process.env), 
  16.       loader: 'json'
  17.     })) 
  18.   }, 
  19.  
  20. require('esbuild').build({ 
  21.   entryPoints: ['app.js'], 
  22.   bundle: true
  23.   outfile: 'out.js'
  24.   // 應用插件 
  25.   plugins: [envPlugin], 
  26. }).catch(() => process.exit(1)) 

使用如下:

  1. *// 應用了env插件后,構建時將會被替換成process.env對象* 
  2.  
  3. import { PATH } from 'env' 
  4.  
  5. console.log(`PATH is ${PATH}`) 

不過在編寫插件的時候有一些需要注意的地方:

  1. Esbuild 插件機制只可作用于 build API,而不適用于 transformAPI,這意味著 webpack 當中的 esbuild-loader 這種只使用 Esbuild transform 功能的地方無法利用 Esbuild 的插件機制。
  2. 插件中的 filter 正則是使用 go 原生的正則實現的,用來過濾文件,為了不使性能過于劣化,規則應該盡可能嚴格。同時它本身和 JS 的正則也有所區別,比如前瞻(?<=)、后顧(?=)和反向引用(\1)就不支持。
  3. 實際的插件應該考慮到自定義緩存(減少 load 的重復開銷)、sourcemap 合并(源代碼正確映射)和錯誤處理。可以參考 Svelte plugin。

虛擬模塊支持

與 Rollup 對比

作為打包器,一般需要兩種形式的模塊,一種存在于真實的磁盤文件系統中,另一種并不在磁盤而在內存當中,也就是虛擬模塊。Rollup 本身就天然支持虛擬模塊,Vite 基于它的插件機制,也重度使用了虛擬模塊的功能,以 wasm 文件的處理為例:

  1. const wasmHelperId = '/__vite-wasm-helper' 
  2. // helper 函數實現 
  3. const wasmHelper = async (opts = {}, url: string) => { 
  4.   // 省略具體實現 
  5. export const wasmPlugin = (config: ResolvedConfig): Plugin => { 
  6.   return { 
  7.     name'vite:wasm'
  8.     resolveId(id) { 
  9.       if (id === wasmHelperId) { 
  10.         return id 
  11.       } 
  12.     }, 
  13.     async load(id) { 
  14.       if (id === wasmHelperId) { 
  15.         return `export default ${wasmHelperCode}` 
  16.       } 
  17.       if (!id.endsWith('.wasm')) { 
  18.         return 
  19.       } 
  20.       const url = await fileToUrl(id, config, this) 
  21.       // 虛擬模塊 
  22.       return ` 
  23. import initWasm from "${wasmHelperId}" 
  24. export default opts => initWasm(opts, ${JSON.stringify(url)}) 
  25.     } 
  26.   } 

但 Rollup 的虛擬模塊也有一些限制,為了與真實模塊區分開,默認約定要在路徑前面拼上一個'\0'。這樣會對路徑產生一定的入侵性,直接放到瀏覽器進行 import 會出問題(Vite 內部也將 \0 替換成 __xx 這種形式,以免直接將 帶\0 路徑放到瀏覽器中 import):

Esbuild 中對于虛擬模塊的支持更加友好一些,直接通過 namespace 來區分真實模塊和虛擬模塊,這樣也不會有 \0 這樣 hack 操作。

編譯能力

使用 Esbuild 的虛擬模塊,可以完成很豐富的功能,除了上述插件實例中在內存中計算出 env 的值作為模塊內容,還可以模塊名當做一個函數來進行編譯,甚至可以在編譯階段實現函數遞歸的過程。比如這個 Esbuild 插件:

  1.   name'fibo'
  2.   setup(build) { 
  3.     build.onResolve({ filter: /^fib\(\d+\)/ }, args => { 
  4.       return { path: args.path, namespace: 'fib' } 
  5.     }) 
  6.     build.onLoad({ filter: /^fib\(\d+\)/, namespace: 'fib' }, args => { 
  7.       const match = /^fib\((\d+)\)/.exec(args.path); 
  8.       n = Number(match[1]); 
  9.        
  10.       console.log(n); 
  11.       let contents = n < 2 ? `export default ${n+1}` : ` 
  12.           import n1 from 'fib(${n - 1})' 
  13.           import n2 from 'fib(${n - 2})' 
  14.           export default n1 + n2` 
  15.       return { contents } 
  16.     }) 
  17.   } 

引入這個插件,可以解析如下的 import 語句:

  1. import fib5 from 'fib(5)' 
  2.  
  3. console.log(fib5) 
  4.  
  5. // 13 

所有的模塊都是虛擬模塊,在真實文件系統中并不存在

另外,還能借助虛擬模塊來進行 URL Import,支持如下的 import 代碼:

  1. import React from 'https://esm.sh/react@17' 

這也可以在插件當中實現,可參考示例。

落地場景

1. 代碼壓縮工具

Esbuild 的代碼壓縮功能非常優秀,可以甩開傳統的壓縮工具一個量級以上的性能差距。Vite 在 2.6 版本也官宣在生產環境中直接使用 Esbuild 來壓縮 JS 和 CSS 代碼。

2. 代替 ts-node

社區已經有了相應的方案 esno: https://github.com/antfu/esno

  1. ts-node index.ts 
  2. // 替換為 
  3. esno hello.ts 

3. 代替 ts-jest

使用 esbuild-jest 代替ts-jest,我曾經嘗試在某些大型包中使用 esbuild-jest 來作為 transformer,相比 ts-jest,整體大概提升 3 倍測試效率。

Github 地址:https://github.com/aelbore/esbuild-jest

4. 第三方庫 Bundler

Vite 中在開發階段使用 Esbuild 來進行依賴的預打包,將所有用到的第三方依賴轉成 ESM 格式 Bundle 產物,并且未來有用到生產環境的打算。

同時業界也有一些平臺基于純 Esbuild 來做線上 cjs -> esm 的 CDN 服務,比如 esm.sh 和 skypack:

5. 打包 Node 庫

為什么要打包 Node 庫:

  • 減少 node_modules 代碼,避免業務安裝一大堆 node_modules 的代碼,減少安裝體積
  • 提高啟動速度,所有代碼打到一個文件,減少了大量的文件 io 操作
  • 更安全。所有代碼打包也是鎖定依賴版本的一種方式,可以避免之前出現的 coa 包導致的大面積 CI 掛掉的問題,可參考云謙的這篇文章。

這方面 Esbuild 的作用跟現在 vercel 團隊出品的 ncc 差不多,但會對代碼的寫法有一些限制,無法分析動態 require 或者 import 語句含有變量的情況:

6. 小程序編譯

對于小程序的場景,也可以使用 Esbuild 來代替 Webpack,大大提升編譯速度,對于 AST 的轉換則通過 Esbuild 插件嵌入 SWC 來實現,實現快速編譯。詳見 132 的分享 esbuild 上生產。

7. Web 構建

Web 場景就顯得比較復雜了,對于兼容性和周邊工具生態的要求比較高,比如低瀏覽器語法降級、CSS 預編譯器、HMR 等等,如果要用純 Esbuild 來做,還需要補充很多能力。

之前三元同學基于 Esbuild 實現了一套 Web 開發腳手架 ewas,已經在 Github 開源,并且已成功落地到我之前的小冊項目當中,相比 create-react-app 啟動速度提升了 100 倍以上(30s -> 0.3s)。倉庫地址: https://github.com/sanyuan0704/ewas。

如今 Remix 1.0 正式發布,底層使用 Esbuild 構建,帶來了極致的性能體驗,成為 Next.js 強有力的競爭對手。

但總體來說,目前 Esbuild 對于真實的 Web 場景還有很多能力不支持,還有一些硬傷,包括語法不支持降級到ES5,拆包不靈活、不支持 HMR,對于真正能作為 Webpack 一樣的構建工具來講還有很長的路要走。

 

責任編輯:姜華 來源: 三元同學
相關推薦

2025-08-18 07:35:40

2024-10-28 07:10:00

scroll標記前端網格布局

2022-10-31 08:47:21

人臉識別按鍵鍵盤

2022-12-06 17:30:04

2020-05-09 16:45:56

ping命令Linux

2025-08-13 01:11:00

2018-01-25 14:53:20

iPhone技巧刪除照片

2021-08-29 18:13:03

緩存失效數據

2024-03-25 08:03:32

技術面試ShowMeBug協同編程

2018-10-28 17:54:00

分布式事務數據

2021-08-20 15:43:54

iPhone手機iOS

2017-11-27 12:24:02

命令行代碼指令

2021-02-07 08:13:18

@DateTimeFo@NumberFormSpring

2024-10-17 16:55:08

2020-08-14 08:19:25

Shell命令行數據

2021-04-01 05:40:53

分庫分表數據庫MySQL

2017-03-07 09:49:18

存儲

2020-07-29 10:00:13

MySQL雙主架構數據庫

2020-01-07 10:35:21

QQQQ群手機QQ

2017-12-06 15:14:51

AndroidItemRecyclerVie
點贊
收藏

51CTO技術棧公眾號

久久一夜天堂av一区二区三区 | 日韩激情综合| 首页亚洲中字| 亚洲成av人影院在线观看网| 久久草.com| 在线观看国产小视频| 午夜精品久久久久99热蜜桃导演| 亚洲国产成人精品一区二区| 精品国产一区二区三区麻豆小说| 91香蕉在线视频| 欧美色图激情小说| 亚洲成人av片| 福利片一区二区三区| av毛片午夜不卡高**水| 国产精品麻豆欧美日韩ww| 国产成人精品日本亚洲11 | 91久久精品国产91久久性色| 国产成人亚洲欧洲在线| 国产精品成人a在线观看| 亚洲精品白浆高清久久久久久| 日本激情综合网| 午夜av不卡| 一区二区高清在线| 夜夜爽www精品| 三级毛片在线免费看| 国产精品88888| 国产精品一区二区三区在线播放 | 国产成人综合视频| 欧美性猛交xxxx乱大交3| 一区二区三区欧美成人| 色资源在线观看| 国产美女av一区二区三区| 国产成人精品电影久久久| 久久黄色小视频| 999国产精品| 亚洲免费电影在线观看| xxxwww国产| 一区二区三区四区精品视频| 欧美电影影音先锋| 手机看片一级片| 久久野战av| 色综合激情久久| 欧美亚洲国产成人| аⅴ资源天堂资源库在线| 伊人色综合久久天天| 在线免费一区| 黄色网在线免费观看| 中文字幕不卡的av| 亚洲不卡一卡2卡三卡4卡5卡精品| 日本xxxxxwwwww| aaa欧美色吧激情视频| 国产精品美女久久久久av福利| 国产高清免费观看| 国产成人精品一区二区三区四区 | 久久综合伊人77777蜜臀| 99国产精品无码| 午夜精品久久久久久久四虎美女版| 中文国产亚洲喷潮| 日本裸体美女视频| 综合久久99| 久久久久久久999| 日韩少妇高潮抽搐| 美女久久一区| 国产精品美女呻吟| 亚洲在线精品视频| 国产精品一区二区男女羞羞无遮挡| 亚洲综合自拍一区| 欧美熟妇另类久久久久久不卡| av动漫一区二区| 欧美激情第六页| av色图一区| 亚洲乱码精品一二三四区日韩在线| 狠狠干视频网站| 大桥未久在线视频| 欧美91在线|欧美| 精品国产乱码久久久久酒店| 999精品网站| 久久久99精品视频| 蜜桃视频久久一区免费观看入口| eeuss国产一区二区三区 | 亚洲AV无码国产精品午夜字幕 | 欧美精品日韩在线| 欧美va亚洲va日韩∨a综合色| 高清视频欧美一级| www.久久视频| 国产高清视频一区| 欧美精品亚洲| caoporm免费视频在线| 午夜精品福利视频网站| 亚洲 中文字幕 日韩 无码| **精品中文字幕一区二区三区| 欧美成人vr18sexvr| 91网站免费视频| 亚洲激情中文| 日本久久精品视频| 国产ts变态重口人妖hd| 久久久久久久久久看片| 国产资源第一页| 一区一区三区| 日韩一级完整毛片| 国产肥白大熟妇bbbb视频| 欧美国产三级| 国产精品第二页| 免费a视频在线观看| 国产精品嫩草影院av蜜臀| www.射射射| 国产激情综合| 国产亚洲xxx| 日韩av片在线播放| 国产福利不卡视频| 一区二区日本| 色综合天天色| 亚洲老司机av| 日韩欧美亚洲国产| 国产一区二区按摩在线观看| 日本一区二区三区四区在线观看| 七七成人影院| 欧美一区二区三区免费视频| 中文字幕av久久爽一区| 亚洲一区二区免费看| 成人精品水蜜桃| 黄色网在线看| 欧美日产在线观看| 亚洲v国产v欧美v久久久久久| 99热这里只有精品8| 国产91精品一区二区绿帽| 麻豆网站在线| 欧美午夜一区二区三区免费大片| 亚洲啪av永久无码精品放毛片| 亚洲一区 二区 三区| 国产精品欧美激情| 黄色的视频在线免费观看| 粉嫩老牛aⅴ一区二区三区| 成年人小视频在线观看| 午夜久久美女| www.成人av| 欧美aaa免费| 日韩视频在线一区二区| 精品国产欧美日韩不卡在线观看| 久久99精品网久久| 一区二区三区国产福利| 国产精品日韩精品在线播放| 久久精品一区中文字幕| 国产精品一区二区免费视频| 最好看的中文字幕久久| 一区二区三区欧美精品| 偷拍欧美精品| 99re在线视频上| 牛牛在线精品视频| 亚洲成人999| 日日摸天天添天天添破| 国产无一区二区| 69久久久久久| 欧美在线网站| 国产经典一区二区三区| 日本精品600av| 亚洲国产黄色片| 久久国产视频精品| 国产日韩欧美激情| 中文字幕第一页在线视频| 午夜日本精品| 国产日韩一区二区三区| 神马久久资源| 久久精品亚洲一区| 黄色片一区二区三区| 欧美日韩国产在线| 久操视频在线观看免费| 极品尤物av久久免费看| 日本男女交配视频| 欧美久久香蕉| 国产精品露脸自拍| 香蕉久久aⅴ一区二区三区| 亚洲第一福利网站| 无码人妻精品一区二| 亚洲欧美视频在线观看| 午夜视频在线观看国产| 免费精品视频在线| 欧美久久在线观看| 欧美日韩国产一区二区三区不卡 | 国产一区二区三区探花 | 久久丝袜视频| 国产精品亚洲美女av网站| 四虎影院观看视频在线观看 | 黄网站免费在线播放| 精品国产人成亚洲区| 国产精品免费无遮挡无码永久视频| 中文字幕一区二区三区不卡在线| 国产chinese中国hdxxxx| 麻豆高清免费国产一区| r级无码视频在线观看| 日本大胆欧美| 精品一区二区三区国产| 先锋影音网一区二区| 性色av一区二区三区红粉影视| a中文在线播放| 亚洲成人a级网| 中文无码av一区二区三区| 一区二区高清免费观看影视大全 | 精品久久一区| 国产丝袜不卡| 久久精品免视看国产成人| 热久久这里只有| 国内高清免费在线视频| 日韩一区二区三区国产| 国产在线三区| 日韩精品视频免费专区在线播放| 99久久精品无免国产免费 | 91av在线播放视频| 污污片在线免费视频| 色999日韩欧美国产| 青青草视频在线免费观看| 欧美成人伊人久久综合网| 中文字幕日本人妻久久久免费| 午夜视黄欧洲亚洲| 卡通动漫亚洲综合| 国产精品青草综合久久久久99| 少妇特黄一区二区三区| 成人高清视频免费观看| 91网址在线观看精品| 日av在线不卡| 免费男同深夜夜行网站| 国产毛片一区| 国产白丝袜美女久久久久| 欧美国产精品| 精品嫩模一区二区三区| 天天插综合网| 在线视频一区观看| 日本不卡二三区| 亚洲精品在线免费| 成人免费av| 亚洲成人一区二区三区| 成人亚洲一区二区| 先锋影音日韩| 日韩在线看片| 一区二区三区我不卡| 色综合蜜月久久综合网| 亚洲欧洲三级| 色喇叭免费久久综合| 亚洲欧美日韩在线综合| 色999国产精品| 伊人精品久久久久7777| 国产精品久久观看| 看一级黄色录像| 亚洲精品tv久久久久久久久久| 最新av在线免费观看| 亚洲男女av一区二区| 亚洲五码在线观看视频| 黑丝一区二区| 无罩大乳的熟妇正在播放| 亚洲影视综合| 日本熟妇人妻中出| 美女mm1313爽爽久久久蜜臀| 亚洲综合激情视频| 国产精品一区二区免费不卡| 深爱五月综合网| 粉嫩一区二区三区性色av| 黄色污在线观看| 91美女精品福利| 中文字幕 自拍| 久久久亚洲高清| 99精品欧美一区二区| 亚洲免费av观看| 亚洲精品在线观看av| 一本色道综合亚洲| 在线免费看av片| 日韩女优毛片在线| 日韩欧美在线观看一区二区| 夜夜嗨av色一区二区不卡| 免费看a在线观看| 久久久久久网址| 欧美性suv| 亚洲精品欧美日韩专区| 麻豆一区二区| 亚洲草草视频| 亚洲网站在线| 一本久道中文无码字幕av| 国产一区二区三区免费看| 一边摸一边做爽的视频17国产| 国产午夜精品一区二区三区视频| 日韩成人毛片视频| 欧美午夜片欧美片在线观看| 亚洲天堂久久久久| 亚洲国产精久久久久久久| 高清国产福利在线观看| 欧美国产日韩免费| 久久久一本精品| 亚洲最大av网站| 妖精视频一区二区三区免费观看| 波多野结衣激情| 久久蜜桃精品| 无码国产精品久久一区免费| 国产调教视频一区| 五月天婷婷网站| 在线成人av影院| 毛片在线免费| 久久久久中文字幕2018| 成人国产一区| 久久久一本精品99久久精品66| 99精品网站| 天天操天天爽天天射| 粉嫩av一区二区三区粉嫩| 国产大屁股喷水视频在线观看| 亚洲成人av中文| 国产一区二区三区黄片| 亚洲日韩欧美视频一区| av在线加勒比| 99久re热视频这里只有精品6| 欧美限制电影| 久久精品国产精品亚洲色婷婷| 国产在线不卡一卡二卡三卡四卡| 美女被到爽高潮视频| 精品国产乱码久久久久久天美 | 久久精品视频va| 成人在线视频观看| 欧洲精品国产| 在线亚洲免费| 99久久免费看精品国产一区| 亚洲精品久久嫩草网站秘色| 亚洲一区二区视频在线播放| 亚洲视频免费一区| 一个人看的www视频在线免费观看| eeuss一区二区三区| 亚洲欧美亚洲| 九九热视频免费| ...xxx性欧美| 国产又粗又黄又爽视频| 伊人久久综合97精品| 日本免费一区二区三区四区| 久久综合婷婷综合| 国产精品入口| 精品黑人一区二区三区观看时间| 天天影视色香欲综合网老头| 蜜桃视频久久一区免费观看入口| 欧美精品久久久久久久久久| 一区二区三区欧洲区| 嫩草影院中文字幕| 成人在线综合网| 国产精品50页| 亚洲国产中文字幕在线观看| 成人免费观看在线观看| 黄色99视频| 亚久久调教视频| 国产精品密蕾丝袜| 欧美午夜视频网站| 国产黄网站在线观看| 97人人澡人人爽| 悠悠资源网久久精品| 日韩 中文字幕| 在线免费不卡电影| aaa在线观看| 91丝袜美腿美女视频网站| 中出一区二区| 国产成人av无码精品| 日韩欧美一区视频| jizz日韩| 亚洲sss综合天堂久久| 亚洲高清自拍| 国产精品无码毛片| 在线观看网站黄不卡| 欧美黄色激情| 成人午夜电影免费在线观看| 香蕉国产精品偷在线观看不卡| 夜夜春很很躁夜夜躁| 欧美老女人在线| 黄污视频在线观看| 欧美日本韩国一区二区三区| 美国三级日本三级久久99| 日本黄色片免费观看| 亚洲成人久久电影| 我爱我色成人网| 免费看污污视频| proumb性欧美在线观看| 波多野结衣网站| 久久国产加勒比精品无码| 红杏成人性视频免费看| 99免费视频观看| 亚洲综合激情网| 黄色大片在线看| 亚洲va久久久噜噜噜| 亚洲欧美日韩一区在线观看| 黄色裸体一级片| 精品av久久707| 成人精品一区二区三区电影| 97在线免费视频观看| 久久精品一区四区| 懂色av蜜臀av粉嫩av分享吧| 国产精品69av| 欧美三级不卡| 最新中文字幕av| 亚洲成人国产精品| 国产精品成人国产| 久草热视频在线观看| 亚洲色图都市小说| 黄色国产在线| 狠狠色噜噜狠狠色综合久 | 欧美午夜片在线观看| 九色porny丨国产首页在线| 中文字幕中文字幕在线中心一区| 91丨porny丨在线| www.亚洲天堂.com|