国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

ESBuild & SWC淺談: 新一代構(gòu)建工具

共 6415字,需瀏覽 13分鐘

 ·

2022-05-13 23:23


術(shù)????

首先, ESBuild & swc是什么?

  • ESBuild[1]是基于Go語言開發(fā)的JavaScript Bundler, 由Figma前CTO Evan Wallace開發(fā), 并且也被Vite用于開發(fā)環(huán)境的依賴解析和Transform.
  • SWC[2]則是基于Rust的JavaScript Compiler(其生態(tài)中也包含打包工具spack), 目前為Next.JS/Parcel/Deno等前端圈知名項目使用.

為什么要關(guān)注這兩個工具?

  • 因為...

  • 大家可能在日常工作中遇到過, 項目的構(gòu)建時間隨著項目體積和復(fù)雜度逐漸遞增, 有的時候本地編輯一個項目要等上個大幾分鐘(此處@Webpack)

  • 這個是ESBuild官網(wǎng)對于其打包10份three.js的速度對比

  • SWC則宣稱其比Babel快20倍(四核情況下可以快70倍)
  • 那么ESBuild & SWC是真的有這么快? 還是開發(fā)者的自說自話? 我們通過實驗來檢驗一下, 先看ESBuild

    • 用ESBuild打包一下
      #?編譯
      >?build-esb
      >?esbuild?./src/app.jsx?--bundle?--outfile=out_esb.js?--minify

      #?構(gòu)建產(chǎn)物的大小和構(gòu)建時間
      out_esb.js??27.4kb
      ??Done?in?13ms

      #?運(yùn)行產(chǎn)物
      node?out_esb.js?
      "">Hello,?world!
    • 用Webpack打包一下
      #?編譯
      >?build-wp
      >?webpack?--mode=production

      #?構(gòu)建產(chǎn)物
      asset?out_webpack.js?25.9?KiB?[compared?for?emit]?[minimized]?(name:?main)?1?related?asset
      modules?by?path?./node_modules/react/?8.5?KiB
      ??./node_modules/react/index.js?189?bytes?[built]?[code?generated]
      ??./node_modules/react/cjs/react.production.min.js?8.32?KiB?[built]?[code?generated]
      modules?by?path?./node_modules/react-dom/?28.2?KiB
      ??./node_modules/react-dom/server.browser.js?227?bytes?[built]?[code?generated]
      ??./node_modules/react-dom/cjs/react-dom-server.browser.production.min.js?28?KiB?[built]?[code?generated]
      ./src/app.jsx?254?bytes?[built]?[code?generated]
      ./node_modules/object-assign/index.js?2.17?KiB?[built]?[code?generated]

      #?構(gòu)建時間
      webpack?5.72.0?compiled?successfully?in?1680?ms

      npm?run?build-wp??2.79s?user?0.61s?system?84%?cpu?4.033?total

      #?運(yùn)行
      node?out_webpack.js??
      "">Hello,?world!
    • 讓我們先寫一段非常簡單的代碼

      import?*?as?React?from?'react'
      import?*?as?ReactServer?from?'react-dom/server'

      const?Greet?=?()?=>?

      Hello,?world!


      console.log(ReactServer.renderToString())
    • 然后我們來通過Webpack & ESBuild構(gòu)建它

  • 再來看看swc的編譯效率

    • 又是一段簡單的ES6代碼
      //?一些變量聲明
      const?PI?=?3.1415;
      let?x?=?1;

      //?spread
      let?[foo,?[[bar],?baz]]?=?[1,?[[2],?3]];
      const?node?=?{
      ??loc:?{
      ????start:?{
      ??????line:?1,
      ??????column:?5
      ????}
      ??}
      };
      let?{?loc,?loc:?{?start?},?loc:?{?start:?{?line?}}?}?=?node;

      //?arrow?function
      var?sum?=?(num1,?num2)?=>?{?return?num1?+?num2;?}

      //?set
      const?s?=?new?Set();
      [2,?3,?5,?4,?5,?2,?2].forEach(x?=>?s.add(x));

      //?class
      class?Point?{
      ??constructor(x,?y)?{
      ????this.x?=?x;
      ????this.y?=?y;
      ??}

      ??toString()?{
      ????return?'('?+?this.x?+?',?'?+?this.y?+?')';
      ??}
      }
    • 先用Babel轉(zhuǎn)譯一下
      yarn?compile-babel
      yarn?run?v1.16.0
      warning?package.json:?No?license?field
      $?babel?src/es6.js?-o?es6_babel.js
      ???Done?in?2.38s.
    • 再用swc轉(zhuǎn)譯一下
      yarn?compile-swc??
      yarn?run?v1.16.0
      warning?package.json:?No?license?field
      $?swc?src/es6.js?-o?es6_swc.js
      Successfully?compiled?1?file?with?swc.
      ???Done?in?0.63s.
    • 兩者的產(chǎn)物對比
      //?es6_babel
      "use?strict";

      function?_classCallCheck(instance,?Constructor)?{?if?(!(instance?instanceof?Constructor))?{?throw?new?TypeError("Cannot?call?a?class?as?a?function");?}?}

      function?_defineProperties(target,?props)?{?for?(var?i?=?0;?i?false;?descriptor.configurable?=?true;?if?("value"?in?descriptor)?descriptor.writable?=?true;?Object.defineProperty(target,?descriptor.key,?descriptor);?}?}

      function?_createClass(Constructor,?protoProps,?staticProps)?{?if?(protoProps)?_defineProperties(Constructor.prototype,?protoProps);?if?(staticProps)?_defineProperties(Constructor,?staticProps);?Object.defineProperty(Constructor,?"prototype",?{?writable:?false?});?return?Constructor;?}

      var?PI?=?3.1415;
      var?x?=?1;
      var?foo?=?1,
      ????bar?=?2,
      ????baz?=?3;
      var?node?=?{
      ??loc:?{
      ????start:?{
      ??????line:?1,
      ??????column:?5
      ????}
      ??}
      };
      var?loc?=?node.loc,
      ????start?=?node.loc.start,
      ????line?=?node.loc.start.line;

      var?sum?=?function?sum(num1,?num2)?{
      ??return?num1?+?num2;
      };

      var?s?=?new?Set();
      [2,?3,?5,?4,?5,?2,?2].forEach(function?(x)?{
      ??return?s.add(x);
      });

      var?Point?=?/*#__PURE__*/function?()?{
      ??function?Point(x,?y)?{
      ????_classCallCheck(this,?Point);

      ????this.x?=?x;
      ????this.y?=?y;
      ??}

      ??_createClass(Point,?[{
      ????key:?"toString",
      ????value:?function?toString()?{
      ??????return?'('?+?this.x?+?',?'?+?this.y?+?')';
      ????}
      ??}]);

      ??return?Point;
      }();

      //?es6?swc
      function?_classCallCheck(instance,?Constructor)?{
      ????if?(!(instance?instanceof?Constructor))?{
      ????????throw?new?TypeError("Cannot?call?a?class?as?a?function");
      ????}
      }
      function?_defineProperties(target,?props)?{
      ????for(var?i?=?0;?i?????????var?descriptor?=?props[i];
      ????????descriptor.enumerable?=?descriptor.enumerable?||?false;
      ????????descriptor.configurable?=?true;
      ????????if?("value"?in?descriptor)?descriptor.writable?=?true;
      ????????Object.defineProperty(target,?descriptor.key,?descriptor);
      ????}
      }
      function?_createClass(Constructor,?protoProps,?staticProps)?{
      ????if?(protoProps)?_defineProperties(Constructor.prototype,?protoProps);
      ????if?(staticProps)?_defineProperties(Constructor,?staticProps);
      ????return?Constructor;
      }
      var?PI?=?3.1415;
      var?x?=?1;
      var?foo?=?1,?bar?=?2,?baz?=?3;
      var?node?=?{
      ????loc:?{
      ????????start:?{
      ????????????line:?1,
      ????????????column:?5
      ????????}
      ????}
      };
      var?loc?=?node.loc,?start?=?node.loc.start,?_loc?=?node.loc,?line?=?_loc.start.line;
      var?sum?=?function(num1,?num2)?{
      ????return?num1?+?num2;
      };
      var?s?=?new?Set();
      [
      ????2,
      ????3,
      ????5,
      ????4,
      ????5,
      ????2,
      ????2
      ].forEach(function(x1)?{
      ????return?s.add(x1);
      });
      var?Point?=?/*#__PURE__*/?function()?{
      ????"use?strict";
      ????function?Point(x2,?y)?{
      ????????_classCallCheck(this,?Point);
      ????????this.x?=?x2;
      ????????this.y?=?y;
      ????}
      ????_createClass(Point,?[
      ????????{
      ????????????key:?"toString",
      ????????????value:?function?toString()?{
      ????????????????return?"("?+?this.x?+?",?"?+?this.y?+?")";
      ????????????}
      ????????}
      ????]);
      ????return?Point;
      }();


      //#?sourceMappingURL=es6_swc.js.map
  • 從上面的數(shù)據(jù)可以看出

    • 在打包代碼的對比, ESBuild的速度(20ms)遠(yuǎn)快于Webpack(1680ms)
    • 在編譯代碼的對比, swc也對babel有比較明顯的性能優(yōu)勢(0.63s vs 2.38s).
    • 需要額外說明的是, 用作實例的代碼非常簡單, 并且在對比中也沒有充分使用各個構(gòu)建工具所有的構(gòu)建優(yōu)化策略, 只是對比最基礎(chǔ)的配置下幾種工具的速度, 這個和各個工具所羅列的benchmark數(shù)據(jù)會有差異, 并且構(gòu)建速度也和硬件性能/運(yùn)行時狀態(tài)有關(guān).
  • ESBuild/swc這么快? 那是不是可以直接把Webpack/Babel扔掉了? 也別急, 目前的ESBuild和Swc可能還不能完全替代Webpack. 但是通過這篇分享我們也許可以對它們有一個更全面的認(rèn)知, 也可以探索后邊在工作中使用這些新一代前端工具的機(jī)會

ESBuild/swc在前端生態(tài)中的定位

  • 在當(dāng)今的前端世界里, 新工具層出不窮, 有的時候不同的工具太多以至于有段時間我完全分不清這些工具各自的功能是什么, 所以我們先來研究一下ESBuild/swc在當(dāng)今前端工程體系中的角色.
  • 從上面的截圖中選擇幾個我們?nèi)粘=佑|最頻繁的前端工程化工具:

    • Loader: 因為前端項目中包含各種文件類型和數(shù)據(jù), 需要將其進(jìn)行相應(yīng)的轉(zhuǎn)換變成JS模塊才能為打包工具使用并進(jìn)行構(gòu)建. JS的Compiler和其他類型文件的Loader可以統(tǒng)稱為Transfomer.
    • Plugin: 可以更一步定制化構(gòu)建流程, 對模塊進(jìn)行改造(比如壓縮JS的Terser)
    • 還有一些前端構(gòu)建工具是基于通用構(gòu)建工具進(jìn)行了一定封裝或者增加額外功能的, 比如CRA/Jupiter/Vite/Umi
    • Task Runner 任務(wù)運(yùn)行器: 開發(fā)者設(shè)置腳本讓構(gòu)建工具完成開發(fā)、構(gòu)建、部署中的一系列任務(wù), 大家日常常用的是npm/yarn的腳本功能; 在更早一些時候, 比較流行Gulp/Grunt這樣的工具

    • Package Manager 包管理器: 這個大家都不會陌生, npm/Yarn/pnmp幫開發(fā)者下載并管理好依賴, 對于現(xiàn)在的前端開發(fā)來說必不可少.

    • Compiler/Transpiler 編譯器: 在市場上很多瀏覽器還只支持ES5語法的時候, Babel這樣的Comipler在前端開發(fā)中必不可少; 如果你是用TypeScript的話, 也需要通過tsc或者ts-loader進(jìn)行編譯.

    • Bundler 打包工具: 從開發(fā)者設(shè)置的入口出發(fā), 分析模塊依賴, 加載并將各類資源最終打包成1個或多個文件的工具.


  • ESBuild的定位是Bundler, 但是它也是Compiler(有Transform代碼的能力)
  • swc自稱其定位為Compiler + Bundler, 但是目前spack還不是很好用

ESBuild/SWC為何這么快?

  • 思考一下, Go & Rust這兩個語言和JavaScript相比有什么差異?

ESBuild的實現(xiàn)(參考ESBuild FAQ[3])

  • 由Go實現(xiàn)并編譯成本地代碼: 多數(shù)Bundler都是由JavaScript實現(xiàn)的, 但是CLI應(yīng)用對于JIT編譯語言來說是性能表現(xiàn)最不好的。每次運(yùn)行Bundler的時候, JS虛擬機(jī)都是以第一次運(yùn)行代碼的視角來解析Bundler(比如Webpack)的代碼, 沒有優(yōu)化信息. 當(dāng)ESBuild在解析JavaScript的時候, Node還在解析Bundler的JS代碼
  • 重度使用并行計算: Go語言本身的設(shè)計就很重視并行計算, 所以ESBuild對這一點會加以利用. 在構(gòu)建中主要有三個環(huán)節(jié): 解析(Parsing), 鏈接(Linking)和代碼生成(Code generation), 在解析和代碼生成環(huán)節(jié)會盡可能使用多核進(jìn)行并行計算
  • ESBuild 中的一切代碼從零實現(xiàn): 通過自行實現(xiàn)所有邏輯來避免第三方庫帶來的性能問題, 統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)可以減少數(shù)據(jù)轉(zhuǎn)換開銷, 并且可以根據(jù)需要改變架構(gòu), 當(dāng)然最大的缺點就是工作量倍增.

    • 令人想到了SpaceX這家公司, 大量零部件都是自己內(nèi)部生產(chǎn), 有效降低生產(chǎn)成本
  • 對內(nèi)存的高效使用: ESBuild在實現(xiàn)時盡量減少數(shù)據(jù)的傳遞以及數(shù)據(jù)的轉(zhuǎn)換, ESBuild盡量減少了對整體AST的傳遞, 并且盡可能復(fù)用AST數(shù)據(jù), 其他的Bundler可能會在編譯的不同階段往復(fù)轉(zhuǎn)換數(shù)據(jù)格式(string -> TS -> JS -> older JS -> string...). 在內(nèi)存存儲效率方面Go也比JavaScript更高效.

swc的實現(xiàn)

  • swc的官方文檔和網(wǎng)站并沒有對swc內(nèi)部實現(xiàn)的較為具體的解釋, 根據(jù)其博客[4]中的一些分析, babel緩慢的主要原因還是來自于其單線程的特性

一點總結(jié)

  • 從ESBuild和swc的官方資源中, 共同提到的一點就是利用好并行計算。JS因為在設(shè)計之初的目標(biāo)就是服務(wù)好瀏覽器場景, 所以單線程 & 事件驅(qū)動并不適合用來進(jìn)行CPU密集的計算, 而ESBuild/Rust也正是在這一點上對基于Node的構(gòu)建工具擁有系統(tǒng)性的速度優(yōu)勢。

如何用ESBuild/swc提效?

  • 現(xiàn)在我們知道ESBuild/Rust是做什么的, 并且有什么特點, 我們可以在工作中如何利用ESBuild/swc去改善我們的開發(fā)體驗?zāi)?

使用ESBuild

  • ESBuild在API層面上非常簡潔, 主要的API只有兩個: Transform和Build, 這兩個API可以通過CLI, JavaScript, Go的方式調(diào)用

    • Transform主要用于對源代碼的轉(zhuǎn)換, 接受的輸入是字符串, 輸出的是轉(zhuǎn)換后的代碼
      #?用CLI方式調(diào)用,?將ts代碼轉(zhuǎn)化為js代碼
      echo?'let?x:?number?=?1'?|?esbuild?--loader=ts?=>?let?x?=?1;
    • Build主要用于構(gòu)建, 接受的輸入是一個或多個文件
      //?用JS模式調(diào)用build方法
      require('esbuild').buildSync({
      ??entryPoints:?['in.js'],
      ??bundle:?true,
      ??outfile:?'out.js',
      })
  • ESBuild的內(nèi)容類型(Content Type)包括了ES在打包時可以解析的文件類型, 這一點和Webpack的loader概念類似, 下面的例子是在打包時用JSX Loader解析JS文件.
require('esbuild').buildSync({
??entryPoints:?['app.js'],
??bundle:?true,
??loader:?{?'.js':?'jsx'?},
??outfile:?'out.js',
})
  • ESBuild也包含插件系統(tǒng), 可以在構(gòu)建過程中(Transform API無法使用插件)通過插件更改你的構(gòu)建流程
//?來自于官網(wǎng)的插件示范
let?envPlugin?=?{
??name:?'env',
??setup(build)?{
????//?Intercept?import?paths?called?"env"?so?esbuild?doesn't?attempt
????//?to?map?them?to?a?file?system?location.?Tag?them?with?the?"env-ns"
????//?namespace?to?reserve?them?for?this?plugin.
????build.onResolve({?filter:?/^env$/?},?args?=>?({
??????path:?args.path,
??????namespace:?'
env-ns',
????}))

????//?Load?paths?tagged?with?the?"env-ns"?namespace?and?behave?as?if
????//?they?point?to?a?JSON?file?containing?the?environment?variables.
????build.onLoad({?filter:?/.*/,?namespace:?'
env-ns'?},?()?=>?({
??????contents:?JSON.stringify(process.env),
??????loader:?'
json',
????}))
??},
}

//?使用插件
require('
esbuild').build({
??entryPoints:?['
app.js'],
??bundle:?true,
??outfile:?'
out.js',
??plugins:?[envPlugin],
}).catch(()?=>?process.exit(1))
  • 在其他工具中使用ESBuild

    • 如果你覺得目前完全使用ESBuild還不成熟, 也可以在Webpack體系中使用ESBuild的loader來替代babel用于進(jìn)行代碼轉(zhuǎn)換, 除此之外, esbuild-loader[5]還可以用于JS & CSS的代碼最小化.
      const?{?ESBuildMinifyPlugin?}?=?require('esbuild-loader')

      module.exports?=?{
      ????rules:?[
      ??????{
      ????????test:?/.js$/,
      ????????//?使用esbuild作為js/ts/jsx/tsx?loader
      ????????loader:?'esbuild-loader',
      ????????options:?{
      ??????????loader:?'jsx',??
      ??????????target:?'es2015'
      ????????}
      ??????},
      ????],
      ????//?或者使用esbuild-loader作為JS壓縮工具
      ????optimization:?{
      ??????minimizer:?[
      ????????new?ESBuildMinifyPlugin({
      ??????????target:?'es2015'
      ????????})
      ??????]
      ????}
      }
  • 注意點

    • ESBuild不能轉(zhuǎn)ES5代碼和一些其他語法, 詳情可參考https://esbuild.github.io/content-types/#javascript-caveats

使用Vite

  • 要說2021年前端圈關(guān)注度較高的新工具, Vite可以說是名列前茅, 那么Vite和ESBuild/swc有什么關(guān)系呢?
  • Vite的核心理念是使用ESM+編譯語言工具(ESBuild)加快本地運(yùn)行
  • Vite在開發(fā)環(huán)境使用了ESBuild進(jìn)行預(yù)構(gòu)建, 在生產(chǎn)環(huán)境使用了Rollup打包, 后續(xù)也有可能使用ESBuild進(jìn)行生產(chǎn)環(huán)境的構(gòu)建.
  • 支持ES5需要引入插件 https://github.com/vitejs/vite/tree/main/packages/plugin-legacy

使用swc

  • Comilation

    • Transform: 代碼轉(zhuǎn)換API, 輸入源代碼 => 輸出轉(zhuǎn)換后的代碼
    • Parse: 對源代碼進(jìn)行解析, 輸出AST
    • Minify: 對代碼進(jìn)行最小化
    • 可以使用swc命令行工具(swc/cli)配合配置文件[6]對文件進(jìn)行編譯

      #?Transpile?one?file?and?emit?to?stdout
      npx?swc?./file.js

      #?Transpile?one?file?and?emit?to?`output.js`
      npx?swc?./file.js?-o?output.js

      #?Transpile?and?write?to?/output?dir
      npx?swc?./my-dir?-d?output
    • swc的核心部分swc/core主要有三種API

    • swc也推出了swc/wasm模塊, 可以讓用戶在瀏覽器環(huán)境使用wasm進(jìn)行代碼轉(zhuǎn)換

    • 如果你想在Webpack體系下使用swc(替代babel), 也可以使用swc-loader

  • Bundle

    • ??swc也支持進(jìn)行打包功能, 但是目前功能還不很完備, 并且在使用中也有不少Bug. 筆者目前在本地嘗試用spack打包一個簡單的React應(yīng)用目前還不成功, 還做不到開箱即用
    • 目前swc的Bundle工具叫spack, 后續(xù)會改名為swcpack.
    • 打包可以通過spack.config.js[7]文件進(jìn)行配置

一點點總結(jié)和思考

全文總結(jié)

  • ESBuild/swc是用編譯型語言編寫的新一代前端工具, 對JS編寫的構(gòu)建工具有系統(tǒng)級的速度優(yōu)勢
  • ESBuild可以用于編譯JS代碼和模塊打包, swc號稱也都可以支持兩者但是其打包工具還處于早期開發(fā)階段
  • 目前這兩個工具還不能完全替代Webpack等主流工具這些年發(fā)展出的龐大生態(tài)
  • 當(dāng)已有的基礎(chǔ)設(shè)施穩(wěn)定并且替換成本較大時, 可以嘗試漸進(jìn)式的利用新工具(loader)或者Vite這種基于ESBuild二次封裝的構(gòu)建工具

延伸思考

  • 持續(xù)關(guān)注前端生態(tài)新發(fā)展, 利用好開源社區(qū)提升研發(fā)效率和體驗的新工具.
  • 在使用新工具的同時, 了解或參與到其背后的技術(shù)原理, Go可以作為服務(wù)端語言, Rust可以作為系統(tǒng)編程語言, 學(xué)習(xí)新語言能打開新天地, 豈不美哉?

??感謝收看??

?? 謝謝支持

以上便是本次分享的全部內(nèi)容,希望對你有所幫助^_^

喜歡的話別忘了?分享、點贊、收藏?三連哦~。

歡迎關(guān)注公眾號 趣談前端?收獲大廠一手好文章~

瀏覽 73
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 黄色片亚洲| 亚洲视频欧洲视频| 91精品国产乱码久久久竹菊| 无码探花| 老鸭窝成人视频| 人人草人人看人人摸| 中文字幕A片无码免费看| 国产精品一区二区性色AV| 永久精品| 九色丨蝌蚪丨老版熟女| 日韩在线观看视频免费| 免费操逼| 免费日逼| 国产熟妇毛多久久久久一区| 一级a免一级a做免费线看内裤的注意事项 | 懂色av,蜜臀AV粉嫩av| 日韩中文字幕无码中字字幕| 亚洲无码乱码av| 欧美自拍一区| 色多多毛片| 国产高清视频在线观看| 久草在在线| 国产精品theporn| 中文字字幕中文字幕乱码| 夜夜欢天天干| 国产婷婷色一区二区在线观看| 黄视频在线观看免费| 色婷婷老师| 三级片男人天堂| 亚洲AV在线看| 无码高清在线播放| 又黄又爽无遮挡| 黄色视频日本免费| 蜜桃性视频| 欧美第一网站| 国产系列每日更新| 亚洲成人性爱| 大香蕉av在线观看| 久久久久久婷婷| 91人妻日韩人妻无码| 久久成人影音先锋| 一级a在线| 人人狠狠综合婷婷| 九一精品| 一级一级一级做a免费一级做a| 日逼黄色视频| 欧美精品成人网站| 免费a视频| 安微妇搡BBBB搡BBBB| 3D动漫精品啪啪一区二区竹笋| 国产一区亚洲| 2025中文在线观看最好看的电影| 亚洲成人黄色电影| 婷婷综合视频| 免费性爱视频网站| 亚洲日韩Av无码中文字幕美国| 伊人77| 性色在线| 熟女视频一区二区| 亚洲综合免费| 亚洲高清无码久久| 黄色免费片| 国产91白丝在线播放| 亚洲四房播| 久久久久久97电影院电影院无码 | 91精品国产闺蜜国产在线闺蜜| 日韩23岁观看| 欧美日本国产| 91精品人妻一区二区三区蜜桃| 精品免费在线观看| 日韩有码中文字幕在线观看| 牛牛在线精品视频| 动漫3d啪啪成人h动漫| 成人做爰100部免费网站| 91干干干| 日韩中文字幕网站| 人人色人人操人人干| 免费观看亚洲视频| 欧美老妇另类BBwBBw| 国产一级a爱做片免费☆观看| 久久国产99| 亚洲成年视频| 青青草原黄色视频| 欧美69成人| 日本天堂网| 中文电视剧字幕在线播放免费视频| 天天日天天操天天摸天天干天日射天天插 | 有免费的欧美操逼视频吗| 性满足BBWBBWBBW| 视频你懂的| av在线三级| 骚逼自拍| 亚洲免费大片| 91插插插插| 成人免费视频网站| 99久久9| www.五月婷婷| 青娱乐国产视频| 欧美日韩精品在线视频| AV性爱在线| 国产中文在线视频| 免费视频久久| 亚洲在线网站| 无码熟妇人妻无码AV在线天堂 | 久久夜夜操| 一级香蕉视频| 黄总AV| 中文字幕AV第一页| 色吊丝中文字幕| 国产99久久久| 自拍毛片| 一级A片免费看| 欧美日韩国产在线| 精品一区二区三区免费| 天天日天天干天天爽| 99er热精品视频| 思思热思思操| 久久九九国产精品怡红院| 可以在线观看的av| 边摸边插| 五月婷婷在线视频| 欧美日韩午夜福利视频| 91黑人丨人妻丨国产丨| 操逼日韩欧美| 久久aaa| 在线看污| 亚洲无码专区在线| 无码视频免费播放| 亚洲精品国产成人综合久久久久久久久 | 久99久热| 亚洲精品成人无码熟妇在线 | 17c白丝喷水自慰| www.日韩| 羞羞视频com.入口| 天天撸天天干天天日| 久久大香蕉精品| 中文字幕在线观看免费视频| 日韩在线视频中文字幕码无| 爱爱天堂| 欧美性爱小说网| 麻豆91免费视频| 无码91| 九一国产在线| 影音先锋av色| 国产av一区二区三区四区| 丝袜美女足交| 欧美怡春院| 久久狼友| 亚洲视频,中文字幕| 国产欧美日本| 天天干天天日天天射| 免费AV观看| 97人人爽人人爽人人人| 黄片免费高清| 黄色动态视频| 亚洲男女网站| 日韩在线小电影| 蝌蚪窝视频在线观看| 色婷婷精品视频| 亚洲成人免费福利| 老妇槡BBBB槡BBBB槡| 巨爆乳肉感一区二区三区视频| 精品乱子伦一区二区三区| 99色在线视频| 性爱视频91| 青娱乐亚洲自拍| 噜噜色小说| 中文字幕无码综合| 五月激情综合网| 亚洲AV网址| 中文字幕在线观看一区二区三区| 日本黄色一级| 一级黄色电影免费| 激情男人网| 在线播放无码| 午夜无码福利视频| 91你懂的| 人妻久久久| 国产欧美综合一区二区| 人人看人人搞人人摸| 岛国无码破解AV在线播放| 蜜臀av网站| 欧美黄色A片| 亚洲精品中文字幕在线观看| 特级西西人体444www高清| 亚洲综合网站| 天天干天天日天天色| 一级片AV| 精品视频久久久久久| 蜜桃视频一区二区三区| 亚洲无码18禁| 丁香五月激情中文字幕| 欧美激情网址| 久久成人导航| 亚洲天堂一区在线观看| 激情网页| 最近中文字幕在线中文字幕7| 久久久久久大香蕉| 三级高清无码视频| 成人精品在线观看| 日本电影一区二区三区| 思思热在线视频播放| 久久久噜噜噜久久中文字幕色伊伊 | 丁香五月激情婷婷| 99爱免费视频| 操逼基地| 一区二区三区久久久| 亚洲国产婷婷| 亚洲av电影网| 天天操夜| 白丝自慰网站| 日本一区二区视频在线观看| 色老汉视频| 一区二区三区精品视频| 北条麻妃在线中文字幕| 无码福利导航| 亚洲国产av电影| 一级片在线| 国产无遮挡又黄又爽免费网站| 国产一级片在线播放| 少妇高潮喷水| 日韩福利网| 色噜噜狠狠一区二区三区| 国产女人高潮的AV毛片| 国产一区免费观看| 爱爱电影无码| 麻豆91麻豆国产传媒| 91探花视频在线观看| 国产香蕉av| 欧美激情区| 精品伊人久久| 性猛交╳XXX乱大交| 中文字幕在线观看av| 东京热视频网| 免费黄色视频网站| 丁香色婷婷| 中国操逼视频| 国产99自拍| 成人影视在线免费观看| 中文字幕在线无码视频| 欧美日韩国| 91久久久精品| 欧美视频色| 色男人色天堂| 日本少妇网站| 91久久国产综合久| 欧美一级A片免费看| 91干干干| 波多野结衣亚洲视频| 亚洲国产激情视频| 中文字幕无码网站| 亚洲第一视频在线观看| 丰满人妻一区二区三区视频54| 91A视频| 尤物yw| 国产精品宾馆在线| 国产青草| 天堂在线中文网| 蜜桃Av噜噜一区二区三区四区| www.jiujiujiu| 激情五月天av| 亚洲无码理论片| 国产日韩一区二区三免费高清| 91白丝喷水自慰网站| 成人片网站在线观看| 老太色HD色老太HD.| 四虎午夜福利| 久久亚洲AV成人无码国产野外| 日本一区二区视频在线| 特黄AAAAAAAA片免费直播| 12—13女人毛片毛片| 美女极度色诱图片www视频| 欧美黄色精品| 欧美一级棒| 国产精品粉嫩福利在线| 国产精品成人无码a无码| 91人人妻人人澡人人爽人人| 成人做爰黄A片免费看直播室动漫| 天天干天天看| 亚洲在线免费视频| 无限高潮| 狠狠躁婷婷天天爽综合| 5252a我爱haose01我愿| 国产91丝袜在线播放| 久久久久一区二区三区| 人妻精品免费| 亚洲视频欧美| 亚洲乱码日产精品BD在线观看| 麻豆国产精品| 中文字幕福利| 操逼视频免费看| 午夜无码鲁丝片午夜精品| 日韩肏屄网| 成人亚洲精品一区二区三区| 国产3p绿帽骚妻视频| 久久久久久少妇| 久操青青| 欧美黄色成人网站| 免费毛片+一区二区三区| 亚洲在线免费视频| 日韩女人性爱| 久久青草影院| 九九精品免费视频| 无码水蜜桃一区二区| 日日拍夜夜拍| 99热免费观看| 日韩电影一区| 香蕉日逼| 国产免看一级a一片成人aⅴ| 国产亚洲婷婷| 国产A片大全| 欧美亚洲综合在线| 91人人草| 国产成人精品AV在线观| 男人AV网| 国产A片一区| 北条麻妃在线一区二区| 69视频免费观看| 久99| 欧美日韩在线播放| 黄色视频网站日本| 一卡二卡在线视频| 亚洲视频,中文字幕| 日韩人妻无码一区二区三区| 另类图片亚洲色图| 无码精品一区二区三区在线| 五月天激情片| 国产aaaaaaaaaaaaa| 亚洲字幕av| 囯产精品久久久久久久久| 亚洲女人被黑人巨大的原因| 欧美XXXXBBBB| 综合亚洲视频| 人妻少妇无码视频| 欧美夜夜草视频| 色呦呦视频| 国产精品久久久久久久9999| 国产在线高潮| 日本色色视频| 性做久久久久久| 人妻无码人妻| 最新av| 国产无码区| 天天干天天干天天| 婷婷在线影院| 黑人AV在线观看| 久久久999久久久999精神| 性A免费在线播放| 国产精品无码无套在线照片| 日日操日日| 偷拍99| 熟女人妻人妻の视频| 日韩中文字幕在线免费观看| 精品国产三级| 中文字幕日本电影| 亚洲无码精品专区| 91无码在线视频| 无码视频网站| 国产精品免费一区二区三区四区视频| 精品孕妇一区二区三区| 日韩欧美在线视频观看| 免费av毛片| 亚洲视频在线视频| 在线观看免费无码视频| 91久久精品国产91久久公交车| 国产精品高潮呻吟| 91老熟女视频| 免费18蜜桃久久19| 97人妻精品一区二区三区免| 夜夜嗨av| 亚洲成人精品少妇| 中文精品在线| 白浆av| 青青草视频免费看| 操鸡巴网站| 最新中文字幕777私人在线| 久久五月天视频| 先锋av资源网| 国产一级一片免费播放放a| AV电影在线免费观看| 97国产高清| 日本黄色免费视频| 天天日天天| 国产在线黄片| 午夜资源站| 日本親子亂子倫XXXX50路 | 午夜av在线播放| ww毛片| 91小电影| 国产免费福利| 99久久久| 国产精品美女毛片j酒店| 性爱AV在线观看| 日韩精品小电影| 无码一二三区| PORNY九色视频9l自拍| 麻豆A∨在线| 东京热观看| 无码人妻中文字幕| 婷婷五月天丁香成人社区| ww久久| AV成人| 91一级特黄大片| 91视频在线观看| 欧美日韩在线视频免费观看 | caopor在线| 牛牛精品一区二区AV| 成人毛片100免费观看| 亚洲污网| 精品999999| 玖玖资源在线| 五月天福利影院| 高潮视频在线观看| 免费黄色视频网站在线观看| AV在线天堂| 97人妻一区二区精品视频| 99精品免费视频| 国产免费久久久| www色色| 天天干天天天天| 久久免费精品| 久久无码一区二区| 人人爱人人妻人人操| 国产一级网站| 日韩欧美一级片| 国产成人影视在线观看| 中国熟女网站| 国产成人无码精品久在线观看| 久草视频99| 黄色免费在线观看| 黄色视频免费观看| 日韩无码精品一区二区三区| 香蕉国产AV| 国产女人18水真多18精品一级做| 中文字幕无码毛片| 91成人在线免费视频| 强开小嫩苞毛片一二三区| 中文日韩在线| 福利视频免费观看| 黄色在线免费| 中韩日美免费看的电影| 日韩无码人妻| 久草视频免费看| 午夜艹 | 大荫蒂hd大荫蒂视频| 欧美激情伊人| 亚洲无码AV一区二区三区| 欧美AAA| 天堂资源在线| 日韩AV小电影| 怡红院爽妇网| 亚洲sese| 日韩三级片在线视频| 一品国精和二品国精的文化意义 | 成人国产精品| 亚洲天堂在线免费| 黄色视频免费看| 影音先锋色av| 亚洲天堂在线观看网站| 欧美夜夜操| 色婷婷色婷婷| 三级片青青草| 中日韩在线视频| 影音先锋AV资源在线| 91人妻在线| 熊猫成人网| 激情五月天激情网| 中文字幕无码AV| 国产精品theporn| 成人午夜福利| 亚洲性爱一级片| 亚洲婷婷视频| 色资源在线| 大香蕉伊人婷婷| 成人国产| 中文字幕在线日韩| 国内久久婷婷| 噜噜噜网| 大香蕉综合在线| 最近中文字幕免费mv第一季歌词大全| jizz18日本| 五月丁香在线视频| 桃色五月天| 四川BBB操BBB| 中文字字幕在线中文乱码更新时间| 69国产精品成人无码视频色| 丁香一区二区| 亚洲少妇视频| 亚洲va欧洲va国产va不卡| 亚洲中文字幕成人| 人人色人人色| 黄色视频亚洲| 北京熟妇搡BBBB搡BBBB| 日韩无码三级视频| 69久久久久久久久久| av天堂亚洲| 日韩一片| 在线h网站| 人妻丝袜中出北条麻妃| 91麻豆国产| 在线网址你懂的| 亚洲成人动漫免费| 6969电视影片最新更新| 国产福利网| 日韩一区二区在线视频| 日本韩国欧美18| 人妻大屁股-91Porn| 亚洲视频大全| www.91在线看| 成人精品永久免费视频99久久精品 | 永久免费AV无码| 91色视频在线观看| 东京热免费视频| 良妇露脸15P| 狼人香蕉网| 玖玖爱这里只有精品| 色久悠悠综合网| 成人在线视频观看| 99久久99九九99九九九| 最新中文字幕在线观看视频| 黄色片成人| 女公务员人妻呻吟求饶| 97福利| 翔田千里AV在线| 69av在线视频| 国产香蕉91| 午夜福利123| 日本高清中文字幕| 人人摸人人摸| 91无码精品| 亚洲精品午夜精品| 91精品国产aⅴ一区二区| 迷情校园综合| 日皮网站在线观看| 亚洲一区亚洲二区| 伊人激情影院| 免费无码A片在线观看全| 先锋影音资源站| 国产77777| 韩国高清无码视频| 亚洲欧美日韩电影| 亚洲日韩三级片| 大帝av| 成人小说亚洲一区二区三区| 四川少妇bbb| 91久久久久久久91| 色老板在线视频| 逼逼AV网站-日韩电影| 久9热| 亚洲AV成人无码网天堂| 天堂在线免费视频| 极品一区| 影音先锋男人资源站| 七十路の高齢熟女千代子| 嫩草视频在线观看| 京东一热本色道久久爱| 无码无码无码| 亚洲精品国产成人AV在线| av网站免费在线观看| 亚洲第一成网站| aV无码av天天aV天天爽第一| 欧美性生活视频| 国产精品一区二区黑人巨大| 巨爆乳肉感一区二区三区视频| 久久99精品久久久久婷婷| 久久一做爱| 大秀91视频| 欧美第1页| 2017天天干| 亚洲有码在线| 久久国产成人| 国产欧美性爱| 足浴店少妇69XXX| 在线天堂视频| 成人黄色免费观看| 人成视频在线| www.777av| 亚洲无码一二三区| 亚洲av电影网| 中文字幕AV播放| 亚洲va国产天堂va久久en| 九九九成人网| 精品人妻一区二区三区-国产精品| 无码精品人妻一区二区三刘亦菲| 婷婷五月av| 久久五月天婷婷| 嫩草视频| 500部大龄熟乱4K视频| 亚洲欧美中文字幕| 另类老妇性BBwBBw| AV天堂影视在线观看| 久久久久久国产免费A片| 日韩影音| 特猛特黄AAAAAA片| 高清无码片| 亚洲成人在线视频免费观看| 爱爱综合| 国产成人精品久久| 人人射人人爱| 91视频免费播放| 免费高潮视频| 色哟哟av| 插菊花综合| 日本成片网| 日韩黄色A片| 欧美系列在线| 伊人精品| 特色毛片| 亚洲精品成AV人片天堂无码| 午夜久久久| 亚洲激情综合网| 成人无码专区| 精品人妻一区二区三区在| 久久久精品影院| 成人五月天黄色电影| 97超碰人人摸| 无码人妻精品一区二区蜜桃漫画| 亚洲第一黄片| 可以免费看的av| 无码人妻av黄色一区二区三区| 久久五月婷| 乱码中文字幕日韩欧美在线| 91在线无码视频| 大地中文资源5页的更新内容| 一本加勒比HEZYO东京热无码| 国产黄色视频网站在线观看| 日本親子亂子倫XXXX50路| 亚洲AV无码成人精品区国产| 一级片在线| 先锋影音资源站av每日资源在线| 最新中文字幕无码| 天天日人人| 黄色国产AV| 无码中文字幕网站| 天天爽夜夜爽夜夜爽精品视频| 亚洲欧美熟妇久久久久久久久| 国产精品白浆| 无码一二| 国产91精品看黄网站在线观看| 午夜无码电影| AV青草| 揉BBB搡BBB搡BBB| 国产综合一区二区| 欧美狂操| 老骚老B老太太BBW| 国产欧美综合视频| 日日摸日日添日日躁AV| 国产在线高清| 熟女老阿V8888AV| 免费亚洲无码| 日本少妇午夜福利| 欧美激情xxx| 成人综合娱乐网| 色呦呦在线| 乱子伦国产精品| 日韩欧美综合一区| 91国内产香蕉| 99re这里只有精品6| 欧美成人在线免费视频| 婷婷伊人綜合中文字幕| 好吊视频一区二区三区| 精品国产一级A片黄毛网站| 四虎操逼| 人妻精品一区二区| 天天干天天日天天操| 欧美日韩成人网| 豆花视频免费观看| 日韩AV无码电影| 婷婷五月天在线电影| 亚洲污污| 丁香五月色| 人妻少妇91精品一区黑人| 国产精品久久久大香蕉| 51av在线| 最全av在线| 国产免费性爱| 18岁毛片| 欧美自拍性爱视频| 中文在线A∨在线| 最近中文字幕mv第三季歌词| 亚洲国产精品成人综合色五月| 亚洲中文第一页| 日本丰满老熟妇乱子伦| 日本高清版色视频| 91人妻人人澡人人爽人人玩| 色乱视频| 熟女中文字幕| 天天毛片| 亚洲制服在线观看| 另类老妇性BBBWBBW| 久艹大香蕉| 亚洲sese| 四川少妇搡BBw搡BBBB搡| 懂色av蜜臀av粉嫩av分享| 亚洲无码播放| 特级毛片av| 波多野结衣久久中文字幕| 日本熟女视频| 六月天av| 色婷婷一区二区三区久久午夜 | 豆花成人网站在线看| 欧美成人性爱网站| 天堂亚洲AV无码精品成人| 91麻花| 亚洲视频网| av无码av天天av天天爽| 7777AV| 日色色色| 麻豆三级片在线观看| 亚洲精品乱码久久久久久按摩观| 亚洲五月丁香婷婷| 91黄色电影| 444444在线观看免费高清电视剧木瓜一| 亚洲黄色免费电影| 日日干日日| 深爱五月天| 韩国无码专区| 国产一级特黄| 91视频免费播放| 国产在线成人视频| 亚欧成人网站| 亚洲一区中文字幕成人在线| 一插菊花综合视频| 伊人干综合| 成人网中文字幕| 大香蕉操逼| 亚洲中文字幕在线视频播放| 精品免费国产一区二区三区四区的使用方法 | 95四川乱子伦视频国产| 无码精品视频在线观看| 91久久久久久久91| 婷婷色在线播放| 精品精品视频| 欧美l∨视| 成年人视频在线观看免费| 永久免费av| 在线看V片| 丰满熟妇人妻中文字幕| 插插插插网| 欧美久久免费| 欧美日韩群交| 免费的av网站| 久久精品禁一区二区三区四区五区| 国产高清A片| 人人做人人爽| 欧美成人在线视频网站| 欧洲肥胖BBBBBBBBBB| 欧美日韩大香蕉| 欧美高清国产| 不卡的av在线| 国产欧美综合一区| 久草视频福利| 丰满人妻-区二区三区| 制服丝袜乱伦| 免费在线观看AV网站| 日屄视频在线观看| 无码不卡中文字幕| 国产精品揄拍一区二区| 亚洲精品秘一区二区三区在线观看 | 丁香五月激情在线| 中文字幕你懂的在线三级| 亚洲另类图片小说| 蜜桃91精品秘入口内裤| 男人天堂视频在线观看| 夜夜天天人人| 伊人久久大香| 欧美国产综合在线| 黄片免费视频| 狠狠躁18三区二区一区免费人 | 午夜激情五月天| 国产波霸爆乳一区二区| 国产成人a亚洲精品| 国产一精品一aⅴ一免费| 在线无码一区| 久久国产毛片| 一级片免费在线观看| 亚洲射| 久久精品性爱| 久久精品视频免费| 天天躁日日躁狠狠| 日本特黄一级片| 好色综合| 性爱视频久久| 亚洲一级av无码毛片精品| 久久无码一区| 欧美老妇操逼视频| 日韩一级乱伦| 亚洲日韩Av无码中文字幕美国| 筱田步美| 色五月婷婷丁香五月| 婷婷五月天激情小说| 玖玖爱在线精品视频| 青青草在线观看免费| 你懂的视频在线| 中国免费一级无码成人片| 日韩欧美国产一区二区| 日本精品二区| 免费日韩毛片| 大香蕉伊人网视频| 这里只有精品视频| 日本爱爱视频免费| 欧美特级视频| 999国产精品视频| 精品在线免费观看| 欧美成人超碰| av免费观看网址| 天堂网视频| 亚洲欧美视频在线观看| 黄色免费看| 美女性爱视频网站| 俺来了俺去了www色官网| 五月综合色| 国产精品不卡在线观看| 一级无码免费| 北条麻妃一区二区三区在线| 51黄片库| 丰满人妻无码| 色哟哟一中文字慕| 亚洲护士无码| 日韩在线视频免费观看| 欧美一级黃色A片免费看小优视频 无码人妻精品一区二区三千菊电影 | 亚洲污| 五月六月丁香| 欧美东京热视频| 亚洲一级二级三级| 色色国产| 国产精品AV在线观看| 成人黃色A片免费看| 国产免费观看av| 日韩人妻精品中文字幕| 中文字幕一区二区三区四区在线视频| 成人无码免费视频| AV牛牛| 狠狠艹| 久久99九九| 欧美午夜成人| 国产成人无码免费| 国产白丝视频| 国产91在线拍揄自揄拍无码九色 | 亚洲你懂的| 在线播放内射| 亚洲国产另类无码| 超碰人人干人人操| 日AV在线无| 中文无码熟妇人妻AV在线| 婷婷六月综合| 在线a| 亚洲黄色免费看| 亚洲天堂在线免费观看视频| 四虎色情| 天堂无线av无码av| 超碰在线中文字幕| 国产黄色视频在线免费观看| 九九九免费| 国产操逼免费视频| 操B久久| 精品成人av| 成人免费一级视频| 日本黄色的视频| 国产操逼网站| 欧美国产精品| 国产做受91一片二片老头| 大鸡吧在线视频| 欧美性爱五月天| 蜜臀久久99精品久久久久酒店更新时间 | 水蜜桃在线观看视频| 中文字幕你懂的| 日本欧美在线播放中文| 中文字幕欧美激情| 亚洲一级a片| 色国产视频| 欧美成人福利视频| 青青草黄色片| AV三级无码| 亚洲18禁| 日韩国产欧美| 一区二线视频| 国产激情网站| 亚洲性爱视频在线观看| 五月天av在线| 激情小视频| 亚洲免费观看高清完整版在va线| JlZZJLZZ亚洲美女18| 国产成人黄色| 国产高清免费无码| 99久在线视频| 无码人妻熟妇| 五月黄色电影| 国产v欧美| 亚洲综合色网站| 作爱网站| 亚洲.无码.制服.日韩.中文字幕 | 牛牛Av| 久久密| 天天干天天爽| 黄片视频在线观看| 操久久| 无码22p| 美日韩视频欧美一区二区视频| 精品一区国产探花|