JavaScript加載速度優(yōu)化方法
通過(guò)使用CDN、壓縮、異步加載、盡可能的減少JavaScript文件大小、利用緩存機(jī)制、使用Vanilla JS、使用ES6特性、將JavaScript文件放到底部、減少對(duì)DOM的訪問(wèn)以及避免重復(fù)代碼等方法,可以優(yōu)化JavaScript文件的加載和執(zhí)行速度,提供更好的用戶體驗(yàn)和更高的性能。
script 代碼塊的默認(rèn)加載和執(zhí)行順序:
從上到下依次邊加載邊解釋執(zhí)行。如果設(shè)計(jì)到了引入外部的js代碼,那么該代碼必須加載完成并解釋執(zhí)行完畢之后才能繼續(xù)解析后面的HTML 和 js代碼。
默認(rèn)加載執(zhí)行的順序的問(wèn)題:
如果加載的外部的js代碼比較大,而且是網(wǎng)絡(luò)js代碼,可能會(huì)引起頁(yè)面的假死狀態(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:必須針對(duì)使用引入外部的js代碼,該屬性才能生效。
2:如果給引用外部js代碼的script添加了 async,那么該引入的js的執(zhí)行特點(diǎn)如下:
(1)js代碼的加載和后續(xù)的HTML內(nèi)容是并行加載的。
(2)如果js代碼先加載完了,HTML還沒(méi)有加載完畢,會(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:必須針對(duì)使用引入外部的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)先級(jí)高于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ò))來(lái)托管JavaScript文件,可以將文件存放在全球各地的服務(wù)器上,距離用戶更近,從而更快地加載文件。常見的CDN服務(wù)提供商包括來(lái)自Google的Google Libraries API、來(lái)自Microsoft的CDNJS等。
2. 壓縮JavaScript文件
JavaScript文件壓縮工具能夠?qū)⑽募笮】s小50%以上。這個(gè)過(guò)程可以使JavaScript文件更快地下載和執(zhí)行。
例如,Google Closure Compiler可以壓縮JavaScript,他具有許多使用選項(xiàng),包括完全壓縮文件,刪除注釋,刪除空格,提取常量等。
3.使用異步加載
在使用JavaScript時(shí),可以在不影響用戶體驗(yàn)的前提下,利用異步加載的機(jī)制來(lái)提升加載速度??梢允褂肏TML5的async屬性或defer屬性來(lái)實(shí)現(xiàn)。
4. 讓JavaScript文件盡可能小
減小文件的大小可以減少下載時(shí)間,因此可以通過(guò)優(yōu)化JavaScript文件長(zhǎng)度來(lái)實(shí)現(xiàn)優(yōu)化加載速度的目的。可以在JavaScript文件中壓縮代碼、刪除不需要的注釋、換行符,以及刪除冗余的代碼等。
5. 利用緩存機(jī)制來(lái)再次加載
如果在第一次加載完頁(yè)面后,用戶再次訪問(wèn)相同的頁(yè)面,這些JavaScript文件將使用瀏覽器的緩存來(lái)重新加載,以加快下載速度。
6.使用Vanilla JS
Vanilla JS是一種沒(méi)有使用任何類庫(kù)或框架的JavaScript代碼。它不依賴于其他庫(kù)或框架,因此運(yùn)行更快,加載和執(zhí)行的速度更快。
7. 使用ES6特性
ES6是ECMAScript的第六個(gè)版本,有很多特性都可以用來(lái)提升JavaScript的運(yùn)行速度。例如,使用箭頭函數(shù)(=>)來(lái)代替?zhèn)鹘y(tǒng)函數(shù),使用let和const來(lái)替代var,使用解構(gòu)賦值等。
8. 將JavaScript文件放到底部
由于HTML解析器會(huì)逐行解析文檔,因此將JavaScript文件放置在底部,可以確保頁(yè)面中的所有其他文檔元素都已經(jīng)加載完畢。在這種情況下,JavaScript文件可以在下載完成時(shí)立即執(zhí)行,而不需要等待其他組件加載完成。
9. 減少對(duì)DOM的訪問(wèn)
DOM是JavaScript和HTML之間的橋梁,通過(guò)它可以訪問(wèn)網(wǎng)頁(yè)所有的元素。DOM讀寫和操作操作都會(huì)嚴(yán)重影響JavaScript代碼的性能。接口可以通過(guò)緩存DOM操作結(jié)果,減少DOM訪問(wèn)次數(shù)來(lái)優(yōu)化性能。
例如,通過(guò)緩存某個(gè)元素的引用,而不是在每次訪問(wèn)時(shí)重新查找該元素的引用,可以大大減少對(duì)DOM的訪問(wèn),并提高JavaScript的性能。
10. 避免重復(fù)代碼
對(duì)JavaScript文件進(jìn)行分析和評(píng)估,找出其中的冗余代碼并刪除。如果使用JSHint工具,可以檢查如何改進(jìn)代碼,并避免重復(fù)代碼的生成。
到此這篇關(guān)于JavaScript加載速度優(yōu)化方法的文章就介紹到這了,更多相關(guān)js加載速度優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用OpenAI?ChatGPT進(jìn)行編碼嘗試體驗(yàn)
這幾天chatgpt可是非?;鸬?下面這篇文章主要給大家介紹了關(guān)于利用OpenAI?ChatGPT進(jìn)行編碼嘗試體驗(yàn)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之基本排序算法定義與效率比較【冒泡、選擇、插入排序】
這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之基本排序算法定義與效率比較,結(jié)合實(shí)例形式詳細(xì)總結(jié)分析了javascript排序算法中的冒泡、選擇、插入等排序算法原理與操作技巧,需要的朋友可以參考下2019-02-02javascript 簡(jiǎn)單抽屜效果的實(shí)現(xiàn)代碼
javascript 簡(jiǎn)單抽屜效果的實(shí)現(xiàn)代碼,需要的朋友可以參考下,大家自行測(cè)試。2010-03-03幾個(gè)常用的JavaScript字符串處理函數(shù) - split()、join()、substring()和indexOf(
幾個(gè)常用的JavaScript字符串處理函數(shù) split()、join()、substring()和indexOf()2009-06-06bootstrap實(shí)現(xiàn)二級(jí)下拉菜單效果
這篇文章主要為大家詳細(xì)介紹了bootstrap實(shí)現(xiàn)二級(jí)下拉菜單效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11