1. 程式人生 > >如何讓webpack打包的速度提升50%?

如何讓webpack打包的速度提升50%?

隨著前端應用包含的模組數量日益增長,程式碼打包的耗時也越來越長。公司很多專案打包耗時超過了10秒,對於一般人來說超過10秒的等待是比較難受的,雖然後續增量編輯的速度很快。於是我想結合實際開發環境提升一下首次打包的速度。

1. 實際開發環境

我碰到大多數處於維護狀態的網站都有一下幾個特性:

  • 模組數量龐大
  • 模組中主要分為js模組和css模組,並且less模組最後使用extract-text-webpack-plugin打包出單獨的css檔案
  • webpack入口檔案包含了js和less,所以每次打包都需要處理js和less模組
  • 許多需求只涉及到js模組的修改,並不涉及樣式修改。反之亦然。

2. 優化思路

既然許多情況下編譯less模組不是必須的,那在這些情況下單獨編譯js模組就能大幅提升webpack的效能。畢竟less的編譯、以及css的抽出都非常消耗時間。

3. 優化步驟

優化包含以下兩步:

  • 區分編譯目標,單獨編譯js? 還是單獨編輯css? 還是js+css?
  • 入口檔案分離js和css

3.1 區分編譯目標

這一步比較簡單,我們需要使用cross-env這個外掛,例如下面兩條編譯命令區分了編譯js和編譯js+css。

{
    "scripts": {
        "build:js": "cross-env ctarget=all webpack",
        "biuld:js+css
": "cross-env ctarget=js webpack" }
}

這樣我們就可以在webpack配置檔案中通過process.env.ctarget區分當前編譯目標了。

3.2 分離js和css

這一步需要通過webpack的loader來實現,可以使用現有的輪子string-replace-loader

這個loader可以在編譯階段修改程式碼,並且可以使用正則表示式進行替換。可以使用它來載入js檔案,然後刪除部分程式碼。下面的例子的作用是刪除js檔案中所有的less程式碼匯入。

{
    module: {
        rules: [
            {
            test: /.js$/
, use: (function(){ var list = ['這裡可以加上其他需要的loader']; // 更具編譯目標刪除less的匯入 if (process.env.ctarget === 'js') { list.push({ loader: 'string-replace-loader', options: { search: '^.+?require\\(.+(\\.less).+$', replace: '', flags: 'm' } }) } return list; })() } ] } }

這裡在使用string-replace-loader一定要加上flags: 'm',否則無法進行多行匹配。

如果要單獨打包css我們可以寫一個和string-replace-loader作用相反的loader,只保留樣式部分而刪除其他js程式碼。

4. 效果

經過實際測試,這個優化可以節省50%的時間。當然具體到每一個專案還要看js和css模組數量的比例。

相關推薦

如何webpack打包速度提升50%?

隨著前端應用包含的模組數量日益增長,程式碼打包的耗時也越來越長。公司很多專案打包耗時超過了10秒,對於一般人來說超過10秒的等待是比較難受的,雖然後續增量編輯的速度很快。於是我想結合實際開發環境提升一下首次打包的速度。 1. 實際開發環境 我碰到大多數處

webpack打包速度優化

logs compress nts spl 壓縮 clas true 線程 uglifyjs 打包速度優化 Webpack 默認提供的 UglifyJS 插件,由於采用單線程壓縮,速度頗慢 ;推薦采用 webpack-parallel-uglify-plugin 插件,其做

如何xtrabackup恢復速度提升20倍?

騰訊 數據庫 簡介??Xtrabackup是由percona開源的免費數據庫熱備份軟件,它能對InnoDB數據庫和XtraDB存儲引擎數據庫進行非阻塞的備份,其具備以下一些優點:??1)備份速度快,物理備份可靠??2)備份過程不會打斷正在執行的事務??3)能夠基於壓縮等功能節約磁盤空間和流量??4)自

webpack 打包圖片 能否提高加載速度

images image 提高 img 很多 正常 webpack pac mage 正常加載: 打包圖片: 結論:當加載資源 數量很多 時,可以提高加載速度webpack 打包圖片 能否提高加載速度

webpack常用loader和plugin及打包速度優化

div es2017 .cn 圖片 打包 web class load ima 優化 或 webpack常用loader和plugin及打包速度優化

阿里零售通 App 工程提效實踐:提升 50% 的編譯速度

前言 當前,大多數 Android 工程都是基於 Gradle 工具進行構建和編譯的,一開始,當你的工程不夠複雜,或者還只是小型專案的情況下,基本都不需要去關心構建優化的事情,而隨著業務變得複雜、程式碼量的增多以及越來越多的依賴,原有的 單 module 工程變成了多 module 工程,構建時間變得也越來

Webpack 打包優化之速度

  在前文 Webpack 打包優化之體積篇中,對如何減小 Webpack 打包體積,做了些探討;當然,那些法子對於打包速度的提升,也是大有裨益。然而,打包速度之於開發體驗和及時構建,相當重要;所以有必要對其做更為深入的研究,以便完善工作流,這就是本

React + Webpack多入口打包配置(一)基礎配置快速打包,優化打包速度

1. 安裝編譯外掛 編譯 jsx、es6、scss 等資源 ● 使用 bael 和 babel-loader 編譯 jsx、es6 ● 安裝外掛: babel-preset-es2015 用於解析 es6 ● 安裝外掛:babel-preset-react 用於

我是如何Eclipse的啟動速度提升1.5秒的

本文是Effective Java專欄Java虛擬機器專題的第十講,如果你覺得看完之後對你有所幫助,歡迎訂閱本專欄,也歡迎您將本專欄分享給你身邊的工程師同學。 前言 在這之前,我寫過一篇文章 —— 關於Java虛擬機器效能調優的清單,文章裡我梳理了J

webpack打包用的cdn,速度明顯加快,只要10秒不到,全部import需要近一分鐘,--最終算是徹底失敗-axios

<script crossorigin src="https://unpkg.com/[email protected]/umd/react.production.min.js"></script><script crossorigin

USQL如何幫愛普新媒降低80%成本,提升50%資料分析速度

“使用USQL產品,使用者在原有的資料檔案基礎上進行資料建模,即可使用SQL進行業務資料的快速查詢,此種方式對原有資料檔案改動較小

USQL如何幫愛普新媒降低80%成本,提升50%數據分析速度

資訊 挑戰 加載 基礎上 無法 態度 並且 保持 是什麽 “使用USQL產品,用戶在原有的數據文件基礎上進行數據建模,即可使用SQL進行業務數據的快速查詢,此種方式對原有數據文件改動較小,用戶不用關註大數據分布式處理的過程,業務遷移方便。對比我們現有的大數據處理方案,節省8

提升webpack構建速度

減少resolve解析 resolve: { modules: [ path.resolve(__dirname, 'no

webpack 打包壓縮 ES6文件報錯UglifyJs + Unexpected token punc «(», expected punc «:»

htm script 打包壓縮 scripts log res web save pla webpack打包壓縮 ES6 js react報錯: 升級到 babel6 了 ERROR in /Scripts/Test/test.bundle.js from UglifyJ

webpack打包簡單入門

集合 簡單 入口 ges 顯示 技術分享 js文件 dir 配置結果 使用webPack前請先安裝nodejs webpack命令集合 安裝命令:npm install webpack -g 全局安裝npm install webpack --save-dev 當前項

【vue】餓了麽項目-使用webpack打包項目

pat 命令 顯示 項目文件 過程 文件 分享 根目錄 log 1.vue cli給我們提供了npm run build命令打包項目,在packa.json文件中scripts對象中有build屬性,當我們執行npm run build時,就執行build對應的"node

webpack打包css

splay .cn bin style watch 使用 cnp com class 1、第一種方式 1、安裝css-loader和style-loader $ cnpm install css-loader style-loader --save-dev 2、引用的時

16.如何做到webpack打包vue項目後,可以修改配置文件

r.js all config rest 技術分享 req api local err 問題描述: 前端需要修改restful API的url,但是打包之後,配置文件找不到了,如果在npm run build 生成dist後,這個配置也被寫死了,傳到運行的前端服務器上後,假

webpack打包註意事項

變量 src ebp bpa exports pan color this 使用 打包protobuf時導出全局變量(使用webpack), 註意文件的編碼為ANSI、UTF(一定要無BOM), 否則webpack復制文件會產生亂碼(js錯誤) packet_confi

OpenAI 開源機器人模擬 Python 庫,並行模擬處理速度提升400%

class 功能 lan pic 速度 tail pytho 實現 模擬 10000da.cnvboyule.cnjiaeidaypt.cn 在過去一年的研究中,OpenAI團隊開源一個使用 MuJoCoengine開發的用於機器人模擬的高性能Python庫。雷