摘要:性能優(yōu)化利器性能優(yōu)化性能優(yōu)化不外乎從三個(gè)角度入手開(kāi)發(fā)者在編寫(xiě)程序時(shí),盡量避免不必要的冗余代碼,包括冗余的第三方庫(kù)首先要避免不必要的冗余代碼,包括不必要的閉包不必要的變量與函數(shù)聲明不必要的模塊分割等。
js 性能優(yōu)化利器:prepack 1. js 性能優(yōu)化
js 性能優(yōu)化不外乎從三個(gè)角度入手:
1.1 開(kāi)發(fā)者在編寫(xiě)程序時(shí),盡量避免不必要的冗余代碼,包括冗余的第三方庫(kù)首先要避免不必要的冗余代碼,包括不必要的閉包、不必要的變量與函數(shù)聲明、不必要的模塊分割等。
比如:
// 低效的實(shí)現(xiàn) const urlParams = (() => { const params = {}; if (location.search) { location.search.slice(1).split("&").forEach(item => { const arr = item.split("="); params[arr[0]] = arr[1] || ""; }); } return params; })(); // 更高效的實(shí)現(xiàn) const urlParams = {}; if (location.search) { location.search.slice(1).split("&").forEach(item => { const arr = item.split("="); urlParams[arr[0]] = arr[1] || ""; }); }
其次是要避免使用不必要的第三方庫(kù),因?yàn)橐话愕谌綆?kù)都很大,功能比較多,在條件允許的情況下,盡量少用。
比如:
const users = [ { user: "barney", age: 36, active: true }, { user: "fred", age: 40, active: false }, { user: "pebbles", age: 1, active: true }, ]; // 使用 lodash import _ from "lodash"; const user = _.find(users, { age: 1, active: true }); // 不使用 lodash const user = users.find(item => item.age === 1 && item.active === true);
還比如:
You-Dont-Need-jQuery: 一些 jquery 的替代性解決方案
You-Dont-Need-JavaScript: 一些使用原生 css 動(dòng)畫(huà)替代原有的 js 動(dòng)畫(huà)的解決方案
You-Dont-Need-Lodash-Underscore: 一些 lodash、underscore 的替代性解決方案
You-Dont-Need-Momentjs: 一些 moment 的替代性解決方案
本質(zhì)上講,這些都是從開(kāi)發(fā)者編碼的角度來(lái)優(yōu)化的,但這種方式也是很有限的,因?yàn)楹芏鄷r(shí)候我們不得不大量的使用第三方庫(kù),來(lái)提升開(kāi)發(fā)效率。
1.2 使用扁平化代碼構(gòu)建的構(gòu)建工具現(xiàn)在前端打包基本上都會(huì)用 webpack,但 webpack 打包之后的文件會(huì)產(chǎn)生很多冗余代碼,這會(huì)導(dǎo)致 js 性能降低。
如果在打包文件的性能上有特別需求的小伙伴,可以使用 rollup,詳細(xì)使用與對(duì)比可以參考這里 webpack 之外的另一種選擇:rollup.
1.3 代碼預(yù)編譯js 本身是沒(méi)有像 python 一樣的預(yù)編譯功能,更沒(méi)有像 java 一樣的編譯功能,所以,這里所說(shuō)的 js 代碼預(yù)編譯 只是通過(guò)工具實(shí)現(xiàn)的類(lèi)似功能而已。
這就要提到 prepack 了,它的思路大致是這樣:
把不依賴外部環(huán)境的邏輯提前進(jìn)行運(yùn)算,并把運(yùn)算結(jié)果替換到相應(yīng)的源碼處,然后從源碼中移除這段邏輯。
2. prepack 2.1 安裝npm install -g prepack2.2 編譯(打印在命令行)
prepack script.js2.3 編譯后輸出文件
prepack script.js --out script-processed.js2.4 示例
源代碼
(() => { const secondsOfOneDay = 24 * 60 * 60; window.getSecondsOfDays = days => days * secondsOfOneDay; })();
編譯后的代碼
(function () { var _$0 = this; var _1 = days => { return days * 86400; }; _$0.getSecondsOfDays = _1; }).call(this);2.5 配合構(gòu)建工具一起使用
prepack-webpack-plugin: A webpack plugin for Prepack
rollup-plugin-prepack: A Rollup plugin for Prepack
prepack-vscode: A Visual Studio code plugin for Prepack
2.6 問(wèn)題目前最新版本是 0.2.51,還一直在開(kāi)發(fā)中,很多功能都還沒(méi)有實(shí)現(xiàn),包括模塊輸入輸出的優(yōu)化
3. 后續(xù)更多博客,查看 https://github.com/senntyou/blogs
作者:深予之 (@senntyou)
版權(quán)聲明:自由轉(zhuǎn)載-非商用-非衍生-保持署名(創(chuàng)意共享3.0許可證)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/97807.html
摘要:一般建議文件最大不超過(guò)。按需加載可以減小首屏加載文件的體積,達(dá)到提高響應(yīng)速度的目的。如果你的項(xiàng)目不需要處理靜態(tài)資源如圖片,也不需要按需加載,并追求前端高性能的話,可以嘗試。 如何提升前端性能和響應(yīng)速度 下面大多是從前端工程化的角度給出的優(yōu)化建議,如果需要了解語(yǔ)法上的優(yōu)化,可以參考: 如何提高頁(yè)面加載速度 編寫(xiě)高效的JavaScript Web前端性能優(yōu)化進(jìn)階 - 完結(jié)篇 1. 原生...
摘要:一般建議文件最大不超過(guò)。按需加載可以減小首屏加載文件的體積,達(dá)到提高響應(yīng)速度的目的。如果你的項(xiàng)目不需要處理靜態(tài)資源如圖片,也不需要按需加載,并追求前端高性能的話,可以嘗試。 如何提升前端性能和響應(yīng)速度 下面大多是從前端工程化的角度給出的優(yōu)化建議,如果需要了解語(yǔ)法上的優(yōu)化,可以參考: 如何提高頁(yè)面加載速度 編寫(xiě)高效的JavaScript Web前端性能優(yōu)化進(jìn)階 - 完結(jié)篇 1. 原生...
摘要:版本發(fā)布近日發(fā)布的版本中引入了許多新的特性,并且能夠更好地與協(xié)同開(kāi)發(fā)。阿里云前端工程化工具正式開(kāi)源取黎明破曉之意,原為阿里云業(yè)務(wù)運(yùn)營(yíng)團(tuán)隊(duì)內(nèi)部的前端構(gòu)建和工程化工具,現(xiàn)已完全開(kāi)源。 推薦 1. Firefox 引入 Headless 模式 https://developer.mozilla.org... 類(lèi)似于 Chrome 的 Headless 模式,現(xiàn)在 Firefox 也引入了 H...
摘要:前端每周清單第期支付寶前端構(gòu)建工具發(fā)展用加快網(wǎng)頁(yè)響應(yīng)速度餓了么升級(jí)實(shí)踐前端前端每周清單前端每周清單專注前端領(lǐng)域內(nèi)容,分為新聞熱點(diǎn)開(kāi)發(fā)教程工程實(shí)踐深度閱讀開(kāi)源項(xiàng)目巔峰人生等欄目。 前端每周清單第 12 期:支付寶前端構(gòu)建工具發(fā)展、LinkedIn用Brotli加快網(wǎng)頁(yè)響應(yīng)速度、餓了么PWA 升級(jí)實(shí)踐 為InfoQ中文站特供稿件,首發(fā)地址為這里;如需轉(zhuǎn)載,請(qǐng)與InfoQ中文站聯(lián)系。從屬于筆...
摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒(méi)想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...
閱讀 1463·2021-10-08 10:04
閱讀 2800·2021-09-22 15:23
閱讀 2784·2021-09-04 16:40
閱讀 1235·2019-08-29 17:29
閱讀 1562·2019-08-29 17:28
閱讀 3046·2019-08-29 14:02
閱讀 2288·2019-08-29 13:18
閱讀 936·2019-08-23 18:35