Webpack性能優化

Babel-loader :轉換ES六、ES7JS新特性語法css

Css-loader:支持.css文件的加載和解析轉換成commonjs對象html

Style-loader:將樣式經過<style>標籤插入到head前端

Less-loader :less文件轉換成cssreact

Ts-loader:TS轉換成JSwebpack

File-loader:進行圖片文字等的打包富媒體文件字體web

url-loader:處理圖片和字體數組

Raw-loader:將文件以字符串的形式導入瀏覽器

Thread-loader:多進程打包JSCSS性能優化

CleanWebpackPlugin:清理構建目錄服務器

ExtractTextWebpackPlugin:CSSbundle文件裏提取成獨立的CSS文件

HtmlWebpackPlugin:建立html文件去承載輸出的bundle

UglifyWebpackPlugin:壓縮JS

PostCSS + autoprefixer: ⾃動補⻬ CSS3 前綴

px2rem-loader:移動端 CSS px ⾃動轉換成 rem。 ⻚⾯渲染時計算根元素的 font-size 可使⽤⼿淘的lib-flexible庫換成 rem

熱更新

HotModuleReplacementPlugin

原理:分爲第一次打包和第二次打包,第一次打包將js代碼打包成bundle.js傳給Bundle Server而後讓客戶端能夠以loacalhost8080這種服務器訪問的方式訪問。第二次,當我修改了代碼以後,webpack會打補丁同樣,將修改的部分打包,而後給到HMR server,這個服務器就會以字符串的形式,告訴HMR runtime,哪些地方被修改了,哪些地方須要更新。

文件指紋:用來作版本的管理,好比某個文件修改了,並不須要把全部的文件都

發佈,只要發佈修改了的那部分就好了。

文件指紋

Hash:和整個項⽬的構建相關,只要項⽬⽂件有修改,整個項⽬構建的 hash 值就會更改

Chunkhash:和 webpack 打包的 chunk 有關,不一樣的 entry 會⽣成不一樣的 chunkhash 值

Contenthash:根據⽂件內容來定義 hash ,⽂件內容不變,則 contenthash 不變。

性能優化

l JS壓縮內置了 uglifyjs-webpack-pluginwebpack4若是mode設置成production那麼將會自動的進行壓縮。

l CSS⽂件的壓縮使⽤ optimize-css-assets-webpack-plugin。同時使⽤ cssnano。

l HTML⽂件的壓縮:html-webpack-plugin。

基礎庫分離:html-webpackexternals-plugin。思路:將 reactreact-dom 基礎包經過 cdn ⼊,不打⼊ bundle

公共腳本分離:SplitChunksPlugin,分離⻚⾯公共⽂件。

l tree shaking(搖樹優化):個模塊可能有多個⽅法,只要其中的某個⽅法使⽤到了,則整個⽂件都會被打到bundle ⾥⾯去, tree shaking 就是隻把⽤到的⽅法打⼊ bundle , 沒⽤到的⽅法會在uglify 階段被擦除掉。

l scope hoisting

現象構建後的bundle.js代碼存在量閉包代碼. ⾏代碼時建立的函數做⽤域變多,內存開銷變⼤,⼤量做⽤域包裹代碼,致使體積增⼤(模塊越多越明顯)

結論:webpack 轉換後的模塊會帶上層包裹。import 會被轉換成 __webpack_require

分析

· 打包出來的是個匿名閉包

· modules 個數組,每項是個模塊初始化函數

· 經過 WEBPACK_REQUIRE_METHOD(0) 啓動程序

原理 將全部模塊的代碼按照引⽤順序放在⼀個函數做⽤域⾥,而後適當的重命名一些變量以防⽌變量名衝突。

經過 scope hoisting 能夠減小函數聲明代碼和內存開銷

代碼分割

對於⼤的 Web ⽤來說,將全部的代碼都放在⼀個⽂件中顯然是不夠有效的,特別是當你的某些代碼塊是在某些特殊的時候纔會被使⽤到。 webpack ⼀個功能就是將你的代碼庫分割成chunks(語塊),當代碼運⾏到須要它們的時候再進⾏加載。

懶加載:plugin-syntax-dynamic-import

服務端渲染:HTML + CSS + JS + Data -> 渲染後的 HTML

全部模板等資源都存儲在服務端機器拉取數據更快,⼀ HTML 返回全部數據

客戶端渲染:多個請求(HTML,數據),HTML和數據串行加載、前端渲染。

服務端渲染 一個請求,返回HTML和數據。核心是減小請求。

服務端渲染優點減小屏時間對於 SEO 友好。客戶端渲染剛開始拉下來的HTML實際上是一個空的模板,而服務端渲染拉下來的時候頁面就有數據比較豐富,有利於爬蟲抓取數據。

思路使⽤ react-dom/server renderToString 法將React 組件渲染成字符串,再把這個string丟到HTML模板裏面去,服務端路由返回對應的模板

作法使打包出來的瀏覽器端 html 爲模板在模板中設置佔位符,動態插組件,就能夠解決樣式不顯示的問題。經過設置佔位符,服務端獲取數據而後替換佔位符。

多頁應用:⻚⾯跳轉的時候,後臺服務器都會給返回個新的 html ⽂檔,這種類型的站也就是多⻚⽹站,也叫作多glob.sync。 

相關文章
相關標籤/搜索