JavaScript加載速度優(yōu)化方法
通過使用CDN、壓縮、異步加載、盡可能的減少JavaScript文件大小、利用緩存機(jī)制、使用Vanilla JS、使用ES6特性、將JavaScript文件放到底部、減少對DOM的訪問以及避免重復(fù)代碼等方法,可以優(yōu)化JavaScript文件的加載和執(zhí)行速度,提供更好的用戶體驗(yàn)和更高的性能。
script 代碼塊的默認(rèn)加載和執(zhí)行順序:
從上到下依次邊加載邊解釋執(zhí)行。如果設(shè)計(jì)到了引入外部的js代碼,那么該代碼必須加載完成并解釋執(zhí)行完畢之后才能繼續(xù)解析后面的HTML 和 js代碼。
默認(rèn)加載執(zhí)行的順序的問題:
如果加載的外部的js代碼比較大,而且是網(wǎng)絡(luò)js代碼,可能會(huì)引起頁面的假死狀態(tài)。
一般的解決方案:
(1)將這些js代碼放到 body 的末尾。
(2)給script標(biāo)簽添加async屬性。讓該引入的外部的js代碼,實(shí)現(xiàn)異步加載。
(3)給script標(biāo)簽添加 defer 屬性。讓該引入的外部的js代碼,實(shí)現(xiàn)延遲加載。
js的 async 異步加載介紹:
1:必須針對使用引入外部的js代碼,該屬性才能生效。
2:如果給引用外部js代碼的script添加了 async,那么該引入的js的執(zhí)行特點(diǎn)如下:
(1)js代碼的加載和后續(xù)的HTML內(nèi)容是并行加載的。
(2)如果js代碼先加載完了,HTML還沒有加載完畢,會(huì)暫停HTML的解析。執(zhí)行js代碼,然后再解析。
注意:使用 async 屬性的 script代碼,各個(gè)script代碼之間不應(yīng)該存在上下的依賴關(guān)系,因?yàn)檫@些 async 的script代碼加載完畢的順序是不可控的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/test1.js" async></script>
</head>
<body>
<script src="js/test2.js" async></script>
<script>
console.log ("test");//先執(zhí)行
</script>
</body>
</html>js的 defer 延遲加載介紹:
1:必須針對使用引入外部的js代碼,該屬性才能生效。
2:所有使用了defer 屬性的 script 的加載順序是固定的。
3:延遲加載。所有的 defer 的script 和 后續(xù)的HTML 內(nèi)容可以實(shí)現(xiàn)并行加載。
4:如果defer屬性的script 代碼加載完畢,需要等待HTML解析完畢之后才能執(zhí)行js代碼
5:如果defer 和 async 同時(shí)使用,那么 async 的優(yōu)先級高于defer的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/test1.js" defer>第二個(gè)執(zhí)行</script>
</head>
<body>
<script src="js/test2.js" defer>最后執(zhí)行</script>
<script>
console.log ("test");//先執(zhí)行
</script>
</body>
</html>JavaScript加載速度優(yōu)化方法
1. 使用CDN
使用CDN(Content Delivery Network,內(nèi)容分發(fā)網(wǎng)絡(luò))來托管JavaScript文件,可以將文件存放在全球各地的服務(wù)器上,距離用戶更近,從而更快地加載文件。常見的CDN服務(wù)提供商包括來自Google的Google Libraries API、來自Microsoft的CDNJS等。
2. 壓縮JavaScript文件
JavaScript文件壓縮工具能夠?qū)⑽募笮】s小50%以上。這個(gè)過程可以使JavaScript文件更快地下載和執(zhí)行。
例如,Google Closure Compiler可以壓縮JavaScript,他具有許多使用選項(xiàng),包括完全壓縮文件,刪除注釋,刪除空格,提取常量等。
3.使用異步加載
在使用JavaScript時(shí),可以在不影響用戶體驗(yàn)的前提下,利用異步加載的機(jī)制來提升加載速度。可以使用HTML5的async屬性或defer屬性來實(shí)現(xiàn)。
4. 讓JavaScript文件盡可能小
減小文件的大小可以減少下載時(shí)間,因此可以通過優(yōu)化JavaScript文件長度來實(shí)現(xiàn)優(yōu)化加載速度的目的??梢栽贘avaScript文件中壓縮代碼、刪除不需要的注釋、換行符,以及刪除冗余的代碼等。
5. 利用緩存機(jī)制來再次加載
如果在第一次加載完頁面后,用戶再次訪問相同的頁面,這些JavaScript文件將使用瀏覽器的緩存來重新加載,以加快下載速度。
6.使用Vanilla JS
Vanilla JS是一種沒有使用任何類庫或框架的JavaScript代碼。它不依賴于其他庫或框架,因此運(yùn)行更快,加載和執(zhí)行的速度更快。
7. 使用ES6特性
ES6是ECMAScript的第六個(gè)版本,有很多特性都可以用來提升JavaScript的運(yùn)行速度。例如,使用箭頭函數(shù)(=>)來代替?zhèn)鹘y(tǒng)函數(shù),使用let和const來替代var,使用解構(gòu)賦值等。
8. 將JavaScript文件放到底部
由于HTML解析器會(huì)逐行解析文檔,因此將JavaScript文件放置在底部,可以確保頁面中的所有其他文檔元素都已經(jīng)加載完畢。在這種情況下,JavaScript文件可以在下載完成時(shí)立即執(zhí)行,而不需要等待其他組件加載完成。
9. 減少對DOM的訪問
DOM是JavaScript和HTML之間的橋梁,通過它可以訪問網(wǎng)頁所有的元素。DOM讀寫和操作操作都會(huì)嚴(yán)重影響JavaScript代碼的性能。接口可以通過緩存DOM操作結(jié)果,減少DOM訪問次數(shù)來優(yōu)化性能。
例如,通過緩存某個(gè)元素的引用,而不是在每次訪問時(shí)重新查找該元素的引用,可以大大減少對DOM的訪問,并提高JavaScript的性能。
10. 避免重復(fù)代碼
對JavaScript文件進(jìn)行分析和評估,找出其中的冗余代碼并刪除。如果使用JSHint工具,可以檢查如何改進(jìn)代碼,并避免重復(fù)代碼的生成。
到此這篇關(guān)于JavaScript加載速度優(yōu)化方法的文章就介紹到這了,更多相關(guān)js加載速度優(yōu)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Web使用webpack構(gòu)建前端項(xiàng)目
本篇文章主要介紹了詳解Web使用webpack構(gòu)建前端項(xiàng)目,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
js replace(a,b)之替換字符串中所有指定字符的方法
下面小編就為大家?guī)硪黄猨s replace(a,b)之替換字符串中所有指定字符的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08
前端檢測到省略號文本自動(dòng)顯示Tooltip的方法技巧
響應(yīng)式場景下,窗口縮放會(huì)導(dǎo)致元素可視尺寸變化,原本未省略的文本可能被截?cái)?原本省略的文本可能完全顯示,這篇文章主要介紹了前端檢測到省略號文本自動(dòng)顯示Tooltip的方法技巧,需要的朋友可以參考下2026-05-05
一文詳細(xì)說一說Map和WeakMap的區(qū)別(面試官常問)
這篇文章主要介紹了Map和WeakMap區(qū)別的相關(guān)資料,Map和WeakMap都是JavaScript中的鍵值對數(shù)據(jù)結(jié)構(gòu),它們的主要區(qū)別在于其鍵的存儲(chǔ)方式和內(nèi)存管理,需要的朋友可以參考下2026-03-03
JavaScript 代碼分割的實(shí)現(xiàn)步驟
JavaScript代碼分割是一種優(yōu)化策略,通過將代碼拆分成較小的塊,只在需要時(shí)加載,可以降低初始加載時(shí)間,減小頁面體積,本文主要介紹了JavaScript代碼分割的實(shí)現(xiàn)步驟,感興趣的可以了解一下2024-01-01
Tabella.js項(xiàng)目常見問題及解決方案詳解
Tabella.js是純JavaScript響應(yīng)式表格插件,支持觸摸操作與AMD模塊加載,這篇文章主要介紹了Tabella.js項(xiàng)目常見問題及解決方案的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-05-05
詳解JavaScript中的Unescape()和String() 函數(shù)
這篇文章主要介紹了詳解JavaScript中的unescape()和String() 函數(shù),JavaScript unescape() 函數(shù)可對通過 escape() 編碼的字符串進(jìn)行解碼,String() 函數(shù)把對象的值轉(zhuǎn)換為字符串,對本文感興趣的朋友一起學(xué)習(xí)吧2015-11-11
兩個(gè)比較有用的Javascript工具函數(shù)代碼
下面我的base.js中的extend函數(shù)可以允許用json格式賦值屬性甚至是函數(shù)句柄2010-02-02
微信公眾號中的JSSDK接入及invalid signature等常見錯(cuò)誤問題分析(全面解析)
這篇文章主要介紹了微信公眾號中的JSSDK接入及invalid signature等常見錯(cuò)誤問題分析(全面解析),需要的朋友可以參考下2020-04-04

