前端文件加載耗時(shí)過長(zhǎng)的原因分析及解決方案

從你的 Network (網(wǎng)絡(luò)) 面板 看到,許多 JS 文件的加載時(shí)間較長(zhǎng)(1~2秒),可能的原因如下:
可能的原因
1. 過多的 JS 請(qǐng)求(多個(gè)小文件加載)
- 你當(dāng)前頁面加載了很多小 JS 文件(
addSite.js、toast.js、search.js等) - 每個(gè) JS 文件都要單獨(dú)請(qǐng)求,瀏覽器需要逐個(gè)下載 & 解析
- 即使服務(wù)器返回 304(緩存命中),依然有請(qǐng)求延遲
解決方案:
? 減少 HTTP 請(qǐng)求,合并 JS 文件
- 使用 Webpack / Rollup / Vite 合并多個(gè) JS
- 減少 HTTP 連接數(shù),提升加載速度
使用 Webpack
npm install webpack webpack-cli -D
// webpack.config.js
module.exports = {
entry: {
main: ['./src/addSite.js', './src/search.js', './src/toast.js'],
},
output: {
filename: '[name].bundle.js',
path: __dirname + '/dist',
},
};
然后 引用 main.bundle.js 代替多個(gè)小文件:
<script src="dist/main.bundle.js"></script>
? 減少請(qǐng)求數(shù),提升加載速度!
2. JS 文件未使用defer或async
- JS 解析會(huì)阻塞 HTML 渲染
- 當(dāng)前 JS 文件是同步加載的,導(dǎo)致主線程被阻塞
解決方案:
使用 defer 讓 JS 在 HTML 解析完后再執(zhí)行
<script src="search.js" defer></script> <script src="toast.js" defer></script>
使用 async(如果 JS 之間無依賴)
<script src="search.js" async></script> <script src="toast.js" async></script>
defer 避免阻塞,提升頁面加載速度!
3. 服務(wù)器Keep-Alive連接問題
- 如果服務(wù)器沒有啟用 Keep-Alive,每個(gè)請(qǐng)求都會(huì)建立新連接
- 會(huì)增加 TCP 連接時(shí)間
解決方案:
檢查 Nginx/Apache 是否開啟 Keep-Alive
Nginx 配置
server {
listen 80;
keepalive_timeout 65;
}
Apache 配置
KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5
減少 HTTP 連接時(shí)間,提高 JS 加載速度!
4. 是否有 CDN 加速
- 如果 JS 資源沒有用 CDN,加載速度依賴于服務(wù)器
- CDN 可以加速 JS 資源的全球分發(fā)
解決方案
使用 CDN 讓 JS 加載更快
<script src="https://cdn.jsdelivr.net/npm/toast.js"></script>
本地部署 CDN(Nginx 反向代理)
location /js/ {
proxy_pass https://cdn.example.com/js/;
}
使用 CDN,優(yōu)化加載速度!
結(jié)論
| 問題 | 解決方案 | 提升效果 |
|---|---|---|
| JS 過多,影響加載 | 合并 JS 文件(Webpack) | ?? 減少 HTTP 請(qǐng)求 |
| JS 加載阻塞頁面 | 使用 defer / async | ?? 不阻塞 HTML 渲染 |
| 服務(wù)器未啟用 Keep-Alive | 啟用 Keep-Alive | ?? 減少 TCP 連接耗時(shí) |
| CDN 加速問題 | 使用 CDN 提供 JS | ?? 提高全球加載速度 |
推薦最佳優(yōu)化方案
- 使用 Webpack 合并 JS 文件
- 給 JS 添加
defer - 啟用
Keep-Alive,減少 HTTP 連接開銷 - 使用 CDN 加速 JS 加載
這樣 **JS 加載速度會(huì)大幅提升!
到此這篇關(guān)于前端文件加載耗時(shí)過長(zhǎng)的原因分析及解決方案的文章就介紹到這了,更多相關(guān)前端文件加載耗時(shí)過長(zhǎng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Express框架詳解app函數(shù)使用實(shí)例
這篇文章主要為大家介紹了Express框架app函數(shù)使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
利用transition實(shí)現(xiàn)文字上下抖動(dòng)的效果
這篇文章主要給大家介紹了利用transition屬性如何實(shí)現(xiàn)文字上下抖動(dòng)的效果,文中給出了詳細(xì)的介紹和完整的實(shí)例代碼,相信對(duì)大家的學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友們下面來一起看看吧。2017-01-01
TypeScript 數(shù)組Array操作的常用方法
本文主要介紹了TypeScript 數(shù)組Array操作的常用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
純JavaScript實(shí)現(xiàn)HTML5 Canvas六種特效濾鏡示例
實(shí)現(xiàn)了六款簡(jiǎn)單常見HTML5 Canvas特效濾鏡,并且封裝成一個(gè)純JavaScript可調(diào)用的API文件gloomyfishfilter.js,程序源代碼如下,感興趣的朋友可以參考下哈2013-06-06
bootstrapTable+ajax加載數(shù)據(jù) refresh更新數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了bootstrapTable+ajax加載數(shù)據(jù),以及refresh更新數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
使用JavaScript制作待辦事項(xiàng)列表的示例代碼
這篇文章主要介紹了如何使用 JavaScript創(chuàng)建待辦事項(xiàng)列表HTML的完整信息和教程,文中但是示例代碼講解詳細(xì),感興趣的同學(xué)可以動(dòng)手試一試2022-01-01

