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

「 不懂就問 」Esbuild 為什么這么快?

開發 開發工具
每次運行打包器時,JavaScript VM 都會在沒有任何優化提示的情況下看到打包程序的代碼。在 esbuild 忙于解析 JavaScript 時,node 忙于解析打包程序的JavaScript。

[[402061]]

前言

esbuild 是新一代的 JavaScript 打包工具。

他的作者是 Figma 的 CTO - Evan Wallace。

[[402062]]

( 這卡姿蘭大眼睛,令人唏噓的發際線, 一看就知道很強!)

esbuild以速度快而著稱,耗時只有 webpack 的 2% ~3%。

esbuild 項目主要目標是: 開辟一個構建工具性能的新時代,創建一個易用的現代打包器。

它的主要功能:

  • Extreme speed without needing a cache
  • ES6 and CommonJS modules
  • Tree shaking of ES6 modules
  • An API for JavaScript and Go
  • TypeScript and JSX syntax
  • Source maps
  • Minification
  • Plugins

現在很多工具都內置了它,比如我們熟知的:

  • vite,
  • snowpack

借助 esbuild 優異的性能, vite 更是如虎添翼, 快到飛起。

今天我們就來探索一下: 為什么 esbuild 這么快?

下文的主要內容:

  • 幾組性能數據對比
  • 為什么 esbuild 這么快
  • esbuild upcoming roadmap
  • esbuild 在 vite 中的運用
  • 為什么生產環境仍需打包?
  • 為何vite不用 esbuild 打包?
  • 總結

正文

先看一組對比:

使用 10 份 threeJS 的生產包,對比不同打包工具在默認配置下的打包速度。

webpack5 墊底, 耗時 55.25秒。

esbuild 僅耗時 0.37 秒。

差異巨大。

還有更多對比:

https://twitter.com/evanwallace/status/1314121407903617025

webpack5 表示很受傷: 我還比不過 webpack 4 ?

...

為什么 esbuild 這么快 ?

有以下幾個原因。

(為了保證內容的準確性, 以下內容翻譯自 esbuild 官網。)

1. 它是用 Go 語言編寫的,并可以編譯為本地代碼。

大多數打包器都是用 JavaScript 編寫的,但是對于 JIT 編譯的語言來說,命令行應用程序擁有最差的性能表現。

每次運行打包器時,JavaScript VM 都會在沒有任何優化提示的情況下看到打包程序的代碼。

在 esbuild 忙于解析 JavaScript 時,node 忙于解析打包程序的JavaScript。

到節點完成解析打包程序代碼的時間時,esbuild可能已經退出,您的打包程序甚至還沒有開始打包。

另外,Go 是為并行性而設計的,而 JavaScript 不是。

Go在線程之間共享內存,而JavaScript必須在線程之間序列化數據。

Go 和 JavaScript都有并行的垃圾收集器,但是Go的堆在所有線程之間共享,而對于JavaScript, 每個JavaScript線程中都有一個單獨的堆。

根據測試,這似乎將 JavaScript worker 線程的并行能力減少了一半,大概是因為一半CPU核心正忙于為另一半收集垃圾。

2. 大量使用了并行操作。

esbuild 中的算法經過精心設計,可以充分利用CPU資源。

大致分為三個階段:

  • 解析
  • 鏈接
  • 代碼生成

解析和代碼生成是大部分工作,并且可以完全并行化(鏈接在大多數情況下是固有的串行任務)。

由于所有線程共享內存,因此當捆綁導入同一JavaScript庫的不同入口點時,可以輕松地共享工作。

大多數現代計算機具有多內核,因此并行性是一個巨大的勝利。

3. 代碼都是自己寫的, 沒有使用第三方依賴。

自己編寫所有內容, 而不是使用第三方庫,可以帶來很多性能優勢。

可以從一開始就牢記性能,可以確保所有內容都使用一致的數據結構來避免昂貴的轉換,并且可以在必要時進行廣泛的體系結構更改。缺點當然是多了很多工作。

例如,許多捆綁程序都使用官方的TypeScript編譯器作為解析器。

但是,它是為實現TypeScript編譯器團隊的目標而構建的,它們沒有將性能作為頭等大事。

4. 內存的高效利用。

理想情況下, 根據數據數據的長度, 編譯器的復雜度為O(n).

如果要處理大量數據,內存訪問速度可能會嚴重影響性能。

對數據進行的遍歷次數越少(將數據轉換成數據所需的不同表示形式也就越少),編譯器就會越快。

例如,esbuild 僅觸及整個JavaScript AST 3次:

  1. 進行詞法分析,解析,作用域設置和聲明符號的過程
  2. 綁定符號,最小化語法。比如:將 JSX / TS轉換為 JS, ES Next 轉換為 es5。
  3. 最小標識符,最小空格,生成代碼。

當 AST 數據在CPU緩存中仍然處于活躍狀態時,會最大化AST數據的重用。

其他打包器在單獨的過程中執行這些步驟,而不是將它們交織在一起。

它們也可以在數據表示之間進行轉換,將多個庫組織在一起(例如:字符串→TS→JS→字符串,然后字符串→JS→舊的JS→字符串,然后字符串→JS→minified JS→字符串)。

這樣會占用更多內存,并且會減慢速度。

Go的另一個好處是它可以將內容緊湊地存儲在內存中,從而使它可以使用更少的內存并在CPU緩存中容納更多內容。

所有對象字段的類型和字段都緊密地包裝在一起,例如幾個布爾標志每個僅占用一個字節。

Go 還具有值語義,可以將一個對象直接嵌入到另一個對象中,因此它是'免費的',無需另外分配。

JavaScript不具有這些功能,還具有其他缺點,例如 JIT 開銷(例如隱藏的類插槽)和低效的表示形式(例如,非整數與指針堆分配)。

以上的每一條因素, 都能在一定程度上提高編譯速度。

當它們共同工作時,效果比當今通常使用的其他打包器快幾個數量級。

以上內容比較繁瑣,對此,也有一些網友做了簡要的總結:

  • 它是用 Go 語言編寫的,該語言可以編譯為本地代碼。而且 Go 的執行速度很快。一般來說,JS 的操作是毫秒級,而 Go 則是納秒級。
  • 解析,生成最終打包文件和生成 source maps 的操作全部完全并行化
  • 無需昂貴的數據轉換,只需很少的幾步即可完成所有操作
  • 該庫以提高編譯速度為編寫代碼時的第一原則,并盡量避免不必要的內存分配。

僅作參考。

Upcoming roadmap

以下這幾個 feature 已經在進行中了, 而且是第一優先級:

  1. Code splitting (#16, docs)
  2. CSS content type (#20, docs)
  3. Plugin API (#111)

下面這幾個 fearure 比較有潛力, 但是還不確定:

  1. HTML content type (#31)
  2. Lowering to ES5 (#297)
  3. Bundling top-level await (#253)

感興趣的可以保持關注。

esbuild 在 vite 中的運用

vite 中大量使用了 esbuild, 這里簡單分享兩點。

optimizer

https://github.com/vitejs/vite/blob/main/packages/vite/src/node/optimizer/index.ts#L262

  1. import { build, BuildOptions as EsbuildBuildOptions } from 'esbuild' 
  2.  
  3. // ... 
  4. const result = await build({ 
  5.     entryPoints: Object.keys(flatIdDeps), 
  6.     bundle: true
  7.     format: 'esm'
  8.     external: config.optimizeDeps?.exclude, 
  9.     logLevel: 'error'
  10.     splitting: true
  11.     sourcemap: true
  12.     outdir: cacheDir, 
  13.     treeShaking: 'ignore-annotations'
  14.     metafile: true
  15.     define, 
  16.     plugins: [ 
  17.       ...plugins, 
  18.       esbuildDepPlugin(flatIdDeps, flatIdToExports, config) 
  19.     ], 
  20.     ...esbuildOptions 
  21.   }) 
  22.  
  23.   const meta = result.metafile! 
  24.  
  25.   // the paths in `meta.outputs` are relative to `process.cwd()` 
  26.   const cacheDirOutputPath = path.relative(process.cwd(), cacheDir) 
  27.  
  28.   for (const id in deps) { 
  29.     const entry = deps[id] 
  30.     data.optimized[id] = { 
  31.       file: normalizePath(path.resolve(cacheDir, flattenId(id) + '.js')), 
  32.       src: entry, 
  33.       needsInterop: needsInterop( 
  34.         id, 
  35.         idToExports[id], 
  36.         meta.outputs, 
  37.         cacheDirOutputPath 
  38.       ) 
  39.     } 
  40.   } 
  41.  
  42.   writeFile(dataPath, JSON.stringify(data, null, 2)) 

處理 .ts 文件

https://github.com/vitejs/vite/commit/59035546db7ff4b7020242ba994a5395aac92802

為什么生產環境仍需打包?

盡管原生 ESM 現在得到了廣泛支持,但由于嵌套導入會導致額外的網絡往返,在生產環境中發布未打包的 ESM 仍然效率低下(即使使用 HTTP/2)。

為了在生產環境中獲得最佳的加載性能,最好還是將代碼進行 tree-shaking、懶加載和 chunk 分割(以獲得更好的緩存)。

要確保開發服務器和產品構建之間的最佳輸出和行為達到一致,并不容易。

為解決這個問題,Vite 附帶了一套 構建優化 的 構建命令,開箱即用。

為何 vite 不用 esbuild 打包?

雖然 esbuild 快得驚人,并且已經是一個在構建庫方面比較出色的工具,但一些針對構建應用的重要功能仍然還在持續開發中 —— 特別是代碼分割和 CSS處理方面。

就目前來說,Rollup 在應用打包方面, 更加成熟和靈活。

盡管如此,當未來這些功能穩定后,也不排除使用 esbuild 作為生產構建器的可能。

總結

esbuild 為構建提效帶來了曙光, 而且 esm 的數量也在快速增加:

https://twitter.com/skypackjs/status/1113838647487287296

 

希望 esm 生態盡快完善起來, 造福前端。

本文轉載自微信公眾號「前端皮小蛋」,可以通過以下二維碼關注。轉載本文請聯系前端皮小蛋公眾號。

 

責任編輯:武曉燕 來源: 前端皮小蛋
相關推薦

2021-05-29 06:23:47

webpack esbuild

2021-06-09 09:32:58

Esbuild 工具前端

2024-02-26 21:15:20

Kafka緩存參數

2020-02-27 15:44:41

Nginx服務器反向代理

2020-02-27 21:03:30

調度器架構效率

2020-03-30 15:05:46

Kafka消息數據

2023-08-29 07:46:08

Redis數據ReHash

2020-10-15 09:19:36

Elasticsear查詢速度

2023-03-21 08:02:36

Redis6.0IO多線程

2017-06-06 16:30:55

戴爾交付保障

2020-10-21 09:17:52

Redis面試內存

2022-01-04 08:54:32

Redis數據庫數據類型

2023-11-02 10:22:29

gRPC后端通信

2024-11-26 08:52:34

SQL優化Kafka

2024-07-24 08:38:07

2020-04-27 07:13:37

Nginx底層進程

2021-03-18 14:34:34

達達集團京東云電商

2013-06-14 10:12:22

共享并行

2021-06-27 22:48:28

Redis數據庫內存

2013-06-19 10:55:40

Disruptor并發框架
點贊
收藏

51CTO技術棧公眾號

亚洲大片一区二区三区| 懂色av一区二区三区蜜臀 | 国产a级全部精品| 不卡中文字幕在线观看| av免费在线网站| 日本va欧美va瓶| 久久精品国产欧美激情| 欧美丰满熟妇bbb久久久| 日韩高清中文字幕一区二区| www.爱久久.com| 欧美精品手机在线| 国产肉体xxxx裸体784大胆| 久久精品97| 午夜精品久久久久久久久久| 一区二区不卡在线视频 午夜欧美不卡' | 少妇户外露出[11p]| 成人福利网站| 久久精品欧美一区二区三区麻豆| 成人免费在线视频网站| 特级西西444www大精品视频免费看| 99成人在线视频| 欧美午夜精品一区二区三区| 97碰在线视频| 欧美私人网站| 欧美激情一区二区三区四区| 国产精品一国产精品最新章节| 五月天中文字幕| 在线亚洲伦理| 国内精品久久久久久影视8| 网爆门在线观看| 九一亚洲精品| 亚洲精品视频播放| 大桥未久恸哭の女教师| 日韩欧美激情电影| 欧美精品在线视频| 欧美黄色性生活| 午夜精品成人av| 欧美日韩中文字幕在线| 免费超爽大片黄| 久久av色综合| 亚洲一二三区不卡| 日韩中文字幕亚洲精品欧美| 午夜精品一区二区三| 免费观看成人鲁鲁鲁鲁鲁视频| 中文国产成人精品| 插吧插吧综合网| 99久久综合国产精品二区| 高跟丝袜一区二区三区| 日韩欧美在线一区二区| 亚洲AV成人无码一二三区在线| 日韩精品一级二级| 欧美一区二区.| 欧美一级视频免费观看| 亚洲黄色精品| 高清欧美性猛交xxxx| 国产一级在线视频| 黄色亚洲免费| 136fldh精品导航福利| 日韩熟女精品一区二区三区| 亚洲免费播放| 欧美性受xxxx黑人猛交| 国产香蕉视频在线| 噜噜噜在线观看免费视频日韩| 欧美又大又粗又长| 日韩黄色片网站| 欧美极品一区二区三区| 久99九色视频在线观看| 成人免费网站黄| 九九在线精品| 日韩在线视频国产| www.色小姐com| 黄色在线成人| 日本一区二区三区四区视频| 黄色av一区二区| 精品午夜一区二区三区在线观看| 444亚洲人体| 欧美熟妇交换久久久久久分类| 不卡一二三区首页| 91亚洲一区精品| 亚洲精品一区二区三区新线路| 99精品桃花视频在线观看| 欧美精品成人一区二区在线观看| 91露出在线| 久久久久88色偷偷免费| 美女一区视频| 天堂中文8资源在线8| 亚洲一区二区在线观看视频| 国产真实乱子伦| 国产精品日本一区二区三区在线| 色欧美乱欧美15图片| 欧美日韩中文不卡| 日本高清不卡一区二区三区视频| 欧美日韩国产系列| 伊人久久久久久久久| 中文字幕伦av一区二区邻居| 久久久av网站| 老熟妇仑乱一区二区av| 国产一二精品视频| 欧美日韩在线播放一区二区| av在线导航| 色婷婷精品久久二区二区蜜臂av| 男女视频在线观看网站| 校园春色另类视频| 美女啪啪无遮挡免费久久网站| 成年人免费高清视频| 国产一区在线精品| 鲁丝一区二区三区免费| 羞羞电影在线观看www| 欧美亚洲免费在线一区| 手机在线成人av| 中文字幕一区二区av | 9191国产精品| 国产精品无码一区二区三区免费 | www亚洲一区| 69精品丰满人妻无码视频a片| 国产日产一区二区三区| 91黄色在线观看| 少妇熟女视频一区二区三区| 91视频综合| 国产91色在线|免| 开心激情综合网| 亚洲欧美国产毛片在线| 国产女主播av| 色综合一区二区日本韩国亚洲| 日韩精品视频中文在线观看| 三级影片在线看| 麻豆视频一区二区| 欧美日韩综合另类| 黄毛片在线观看| 亚洲电影av在线| 青娱乐国产在线| 精品一区二区av| 亚洲一区二区三区乱码| jizz亚洲女人高潮大叫| 亚洲无线码在线一区观看| 美女又爽又黄免费视频| 不卡的看片网站| 国产一线二线三线女| 日韩激情综合| xxxxxxxxx欧美| 中文字幕有码视频| 中文字幕欧美国产| 另类小说第一页| 欧美视频网址| 国产精品热视频| 国产夫绿帽单男3p精品视频| 国产精品乱码妇女bbbb| 亚洲激情在线看| 亚洲一级毛片| 成人免费看片网址| 国产美女一区视频| 亚洲福利在线播放| 国产一区二区99| 久久亚洲捆绑美女| 午夜激情福利在线| 成人激情免费视频| 成人黄色午夜影院| 影音先锋男人在线资源| 日韩欧美国产电影| 久久精品久久精品久久| av在线播放成人| 欧美日韩在线不卡视频| 日本久久一二三四| 成人免费在线视频网站| 五月婷婷视频在线观看| 亚洲黄色片网站| 国产午夜无码视频在线观看 | 欧美午夜视频在线| 日本精品网站| 久久在线观看视频| 亚洲AV无码精品国产| 五月天欧美精品| 精品欧美一区二区久久久| 久久99精品国产.久久久久 | 爱福利在线视频| 日韩成人在线视频观看| 日本视频免费观看| 最近日韩中文字幕| 亚洲视频 中文字幕| 日韩精品一级二级| 九一免费在线观看| 亚洲欧洲美洲国产香蕉| 国产女同一区二区| 俺来俺也去www色在线观看| 国产一区二区三区丝袜| a级片免费观看| 粉嫩老牛aⅴ一区二区三区| 久久久久亚洲AV成人无在| 国产精品18久久久| 99久久久无码国产精品6| 外国成人激情视频| 久久久一本精品99久久精品| 日韩毛片免费视频一级特黄| 久久久久久国产精品三级玉女聊斋| 瑟瑟视频在线免费观看| 亚洲精品国产一区二区精华液| 在线免费观看a级片| 毛片基地黄久久久久久天堂| www在线观看免费| 99视频精品视频高清免费| 国内精品视频免费| 91精品国产一区二区在线观看| 69av成年福利视频| 成人在线观看亚洲| 在线精品视频视频中文字幕| 东京干手机福利视频| 欧美日韩三级视频| 久久久久久在线观看| 亚洲综合区在线| 国产高清视频免费在线观看| 91蜜桃婷婷狠狠久久综合9色| 中文字幕55页| 奇米在线7777在线精品| 精品久久一二三| 欧美1区2区3区| 亚洲一区二区三区精品在线观看| 蜜桃精品噜噜噜成人av| 国产一区喷水| 91蝌蚪精品视频| 91免费国产视频| 欧美大片网站| 国产精品久久久久免费a∨ | 色综合视频在线观看| 国产精品老熟女一区二区| 国产精品夫妻自拍| 国产18无套直看片| 久久免费看少妇高潮| 国产麻豆剧传媒精品国产av| 国产91对白在线观看九色| 999久久久精品视频| 男女男精品视频网| 成人性生生活性生交12| 亚洲一区免费| 免费成人在线视频网站| 亚洲黄色视屏| 国产中文字幕二区| 亚洲午夜激情在线| 男女日批视频在线观看| 欧美另类专区| 日韩欧美猛交xxxxx无码| 欧美成人国产| 免费高清一区二区三区| 亚洲欧洲午夜| 天天夜碰日日摸日日澡性色av| 国内成人在线| 国产黄页在线观看| 国产欧美综合一区二区三区| 精品视频在线观看一区| 99在线精品免费视频九九视| 日韩av综合在线观看| 免费亚洲一区| 国产裸体免费无遮挡| 日韩成人一区二区三区在线观看| 蜜臀av免费观看| 精品一区二区三区视频 | 久久人人爽人人爽人人片av免费| 一本久久a久久免费精品不卡| youjizz在线视频| 日本精品免费观看高清观看| 一二三四区视频| 日韩午夜激情视频| 欧美一级特黄aaaaaa大片在线观看| 亚洲第一网站男人都懂| 欧美美女色图| 丝袜情趣国产精品| 最新av在线播放| 97精品一区二区三区| 中文字幕色婷婷在线视频| 国产精品99蜜臀久久不卡二区| 欧美国产视频| av在线不卡观看| 亚洲伊人春色| 黄色免费高清视频| 在线 亚洲欧美在线综合一区| 日韩av三级在线| 麻豆成人综合网| av地址在线观看| 久久精品亚洲精品国产欧美| 希岛爱理中文字幕| 亚瑟在线精品视频| 成人免费视频国产免费| 欧美一区二区三区在线电影 | 亚洲精品福利| 久久久久久高清| 国产精品成人a在线观看| 欧美精品久久久久久久自慰| 男人操女人的视频在线观看欧美| 性感美女一区二区三区| 国产欧美精品一区二区三区四区 | 在线免费观看日韩av| 亚洲欧洲美洲综合色网| 日韩福利片在线观看| 欧美日韩国产高清一区二区| 亚洲黄色在线免费观看| 国产亚洲精品91在线| 中文字幕在线播放网址| 国产精品1234| 精品视频在线你懂得| 伊人天天久久大香线蕉av色| 99精品视频免费| 污污视频网站在线| 久久久久久97三级| 精品无码人妻一区二区三区品| 欧洲视频一区二区| 神马午夜在线观看| 俺去亚洲欧洲欧美日韩| 黑人巨大亚洲一区二区久 | 免费国产精品视频| 久久精品国产清自在天天线 | 色8久久精品久久久久久蜜| 亚洲av永久无码国产精品久久 | 久久人人爽爽人人爽人人片av| 天天综合网网欲色| 日本999视频| va亚洲va日韩不卡在线观看| 国产精品免费人成网站酒店 | 在线视频一二区| 国产欧美日韩精品在线| 久久夜色精品国产噜噜亚洲av| 精品毛片乱码1区2区3区| 麻豆影院在线| 国产精品老牛影院在线观看| 亚洲精品白浆高清| 国产白丝袜美女久久久久| 高清成人在线观看| 欧美卡一卡二卡三| 欧美一区二区三级| 免费观看在线黄色网| 国产精品一区二区三区在线播放| 亚洲午夜久久| 无码人妻h动漫| 99视频精品在线| 日产电影一区二区三区| 精品精品欲导航| 欧美巨大xxxx做受沙滩| www 成人av com| 欧美一区国产在线| 99精品视频免费版的特色功能| 亚洲桃色在线一区| 妺妺窝人体色www聚色窝仙踪| 欧美久久一二三四区| 日本高清视频在线播放| 国产日韩欧美视频在线| 999成人网| 亚洲热在线视频| 一区二区三区在线看| 亚洲欧美黄色片| 亚州av一区二区| 天美av一区二区三区久久| 国产在线青青草| 国产亚洲精品免费| 国产天堂第一区| 中文字幕在线国产精品| 久久婷婷五月综合色丁香| 在线免费观看一区二区三区| 国产麻豆成人精品| 久久久精品人妻一区二区三区四| 欧美成人video| 精精国产xxxx视频在线野外| 欧美二级三级| 美国欧美日韩国产在线播放| 日韩av手机在线免费观看| 欧美一区二区三区视频在线观看| 日本片在线看| 久久亚洲高清| 日韩国产欧美在线播放| www.超碰在线观看| 亚洲精品久久久久| jizz亚洲女人高潮大叫| 久久www视频| 91在线观看地址| 中文字幕有码视频| 欧美激情在线一区| 国产一区二区三区四区五区传媒| 天堂av8在线| 亚洲va中文字幕| www.亚洲.com| aa日韩免费精品视频一| 亚洲一区二区三区四区五区午夜| 国产探花视频在线播放| 日韩欧美美女一区二区三区| 女人高潮被爽到呻吟在线观看| 亚洲欧美丝袜| av中文字幕不卡| 亚洲一区二区三区高清视频| 久久久久久久久久国产精品| 国产乱码精品一区二区亚洲| 国产毛片久久久久久| 色诱视频网站一区| 色屁屁www国产馆在线观看| 蜜桃传媒视频麻豆第一区免费观看| 韩国av一区二区三区| 国产精品va无码一区二区三区| 久久精品中文字幕| 窝窝社区一区二区| 人妻激情偷乱视频一区二区三区| 日韩欧美中文字幕在线观看| 尤物视频在线看| 欧美综合激情| 成人av网站在线观看|