亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript實現無阻塞加載的常用方式

 更新時間:2025年03月11日 08:40:30   作者:Epicurus  
在 JavaScript 中,無阻塞加載(Non-blocking Loading)是優(yōu)化網頁性能的關鍵技術,通過避免腳本阻塞頁面渲染和其他資源的加載,提升用戶體驗,以下是實現無阻塞加載的常用方法及示例,需要的朋友可以參考下

JavaScript無阻塞加載的方式

在 JavaScript 中,無阻塞加載(Non-blocking Loading)是優(yōu)化網頁性能的關鍵技術,通過避免腳本阻塞頁面渲染和其他資源的加載,提升用戶體驗。以下是實現無阻塞加載的常用方法及示例:

1. 使用 async 屬性

  • 作用:異步加載腳本,下載完成后立即執(zhí)行,不阻塞 HTML 解析。
  • 適用場景:獨立腳本,不依賴其他腳本或 DOM。
  • 示例
<script async src="script.js"></script>

2. 使用 defer 屬性

  • 作用:異步加載腳本,但延遲到 HTML 解析完成后按順序執(zhí)行。
  • 適用場景:需要按順序執(zhí)行且依賴 DOM 的腳本。
  • 示例
<script defer src="script1.js"></script>
<script defer src="script2.js"></script> <!-- script1 先執(zhí)行 -->

3. 動態(tài)腳本加載

通過 JavaScript 動態(tài)創(chuàng)建 <script> 標簽,實現按需加載。

  • 適用場景:非關鍵腳本或條件加載。
  • 示例
function loadScript(src) {
    const script = document.createElement('script');
    script.src = src;
    document.body.appendChild(script);
}
// 在需要時加載
window.addEventListener('DOMContentLoaded', () => {
    loadScript('script.js');
});

4. 使用 Promise 或 async/await 控制加載順序

結合動態(tài)加載和 Promise,管理腳本依賴關系。

  • 示例
function loadScript(src) {
    return new Promise((resolve, reject) => {
        const script = document.createElement('script');
        script.src = src;
        script.onload = resolve;
        script.onerror = reject;
        document.head.appendChild(script);
    });
}

async function init() {
    await loadScript('lib.js');
    await loadScript('app.js'); // 確保 lib.js 先加載
}
init();

5. 使用 Intersection Observer 延遲加載

在元素進入視口時加載腳本,適用于非首屏資源。

  • 示例
const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
        if (entry.isIntersecting) {
            loadScript('lazy-script.js');
            observer.unobserve(entry.target);
        }
    });
});
observer.observe(document.querySelector('#lazy-element'));

6. 模塊化動態(tài)導入(ES6 import())

按需加載 ES6 模塊,適用于現代瀏覽器。

  • 示例
button.addEventListener('click', async () => {
    const module = await import('./module.js');
    module.doSomething();
});

7. 使用 Web Workers 處理計算密集型任務

將耗時任務移至后臺線程,避免阻塞主線程。

  • 示例
const worker = new Worker('worker.js');
worker.postMessage({ data: 'start' });
worker.onmessage = (e) => {
    console.log('Result:', e.data);
};

8. 資源預加載(preload 和 prefetch)

通過 <link> 標簽提示瀏覽器提前加載資源。

  • preload:高優(yōu)先級資源,當前頁面使用。
<link rel="preload" href="critical.js" rel="external nofollow"  as="script">
  • prefetch:低優(yōu)先級資源,未來頁面可能使用。
<link rel="prefetch" href="next-page.js" rel="external nofollow"  as="script">

9. 條件加載(根據瀏覽器特性)

檢測瀏覽器支持后加載特定腳本。

  • 示例
if ('IntersectionObserver' in window) {
    loadScript('modern-script.js');
} else {
    loadScript('fallback-script.js');
}

10. 服務端異步加載(SSR + Hydration)

結合服務端渲染(SSR)和客戶端激活(Hydration),按需加載交互邏輯。

  • 示例(Next.js 框架):
import dynamic from 'next/dynamic';
const DynamicComponent = dynamic(() => import('../components/HeavyComponent'));

總結

方法核心原理適用場景優(yōu)點缺點
async/defer異步加載腳本首屏非關鍵腳本簡單易用async 不保證執(zhí)行順序
動態(tài)腳本加載按需創(chuàng)建<script> 標簽非關鍵腳本/條件加載靈活控制加載時機需手動管理依賴
import() 動態(tài)導入按需加載 ES6 模塊現代瀏覽器應用模塊化支持需支持 ES6 模塊
Intersection Observer延遲加載視口外資源圖片、懶加載組件高性能懶加載兼容性需處理
Web Workers后臺線程執(zhí)行任務計算密集型操作避免主線程阻塞無法直接操作 DOM
資源預加載提前加載關鍵資源優(yōu)化關鍵路徑減少加載延遲可能浪費帶寬

注意事項

  • 依賴管理:確保異步腳本的執(zhí)行順序(如使用 deferPromise)。
  • 兼容性:舊版瀏覽器(如 IE)不支持 async/defer 和 ES6 模塊,需降級處理。
  • 性能監(jiān)控:使用工具(如 Lighthouse)分析加載性能,針對性優(yōu)化。

通過合理組合這些方法,可顯著提升頁面加載速度和交互體驗。

以上就是JavaScript實現無阻塞加載的常用方式的詳細內容,更多關于JavaScript無阻塞加載的資料請關注腳本之家其它相關文章!

相關文章

  • 解決前端使用xlsx.js工具讀取excel遇到時間日期少43秒問題

    解決前端使用xlsx.js工具讀取excel遇到時間日期少43秒問題

    這篇文章主要給大家介紹了關于如何解決前端使用xlsx.js工具讀取excel遇到時間日期少43秒問題的相關資料,xlsx.js是一種前端庫,它可以使您使用JavaScript讀取、解析和導出電子表格文件,如Microsoft Excel,需要的朋友可以參考下
    2024-03-03
  • JavaScript實現繼承的4種方法總結

    JavaScript實現繼承的4種方法總結

    這篇文章主要介紹了JavaScript實現繼承的4種方法總結,本文給出了原型鏈繼承、構造繼承、實例繼承、拷貝繼承等實現JS繼承的方法,需要的朋友可以參考下
    2014-10-10
  • Echarts圖表點擊x軸y軸切換圖表二級數據實例代碼

    Echarts圖表點擊x軸y軸切換圖表二級數據實例代碼

    最近項目用到了Echarts圖進行數據展示,所以下面這篇文章主要給大家介紹了關于Echarts圖表點擊x軸y軸切換圖表二級數據的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • JavaScript中為事件指定處理程序的五種方式分析

    JavaScript中為事件指定處理程序的五種方式分析

    這篇文章主要介紹了JavaScript中為事件指定處理程序的五種方式,結合實例形式簡單分析了JavaScript事件處理的相關原理與事件指定處理程序的五種常用方式,需要的朋友可以參考下
    2018-07-07
  • javascript 線性漸變三

    javascript 線性漸變三

    上一部分給出的函數已經完全地實現了跨瀏覽器了,但在IE的實現是極其低劣,動用了多個table以及一向為人所詬病的濾鏡。
    2009-10-10
  • 原生JavaScript實現異步多文件上傳

    原生JavaScript實現異步多文件上傳

    這篇文章主要介紹了原生JavaScript實現異步多文件上傳,感興趣的小伙伴們可以參考一下
    2015-12-12
  • 小程序實現搜索界面 小程序實現推薦搜索列表效果

    小程序實現搜索界面 小程序實現推薦搜索列表效果

    這篇文章主要為大家詳細介紹了小程序實現搜索界面,小程序實現推薦搜索列表效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 淺談JavaScript工具鏈不完全指南

    淺談JavaScript工具鏈不完全指南

    經過這么多年的發(fā)展,JavaScript 早已經不是當年那個不太起眼的腳本語言。如今的 JavaScript 可以說是風光無限,在 Web 前端、移動端、服務端甚至物聯網設備上都大展身手,到處都有它的身影。
    2021-05-05
  • 使用JS中的Replace()方法遇到的問題小結

    使用JS中的Replace()方法遇到的問題小結

    這篇文章主要介紹了使用JS中的Replace()方法遇到的問題小結,需要的朋友可以參考下
    2017-10-10
  • 原生JS實現加載進度條

    原生JS實現加載進度條

    這篇文章主要為大家詳細介紹了原生JS實現加載進度條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論