首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JS 動態創建 Image:src 賦值同步,瀏覽器下載渲染異步

     編輯:程式設計綜合問答

結論先行

new Image() 並設置 src 時:

  • JS 執行層面同步:img.src = '...' 這行代碼瞬間完成,不阻塞後續代碼。
  • 網絡/渲染層面異步:瀏覽器在後台發起 HTTP 請求、下載、解碼、佈局、繪制,不阻塞主線程。

代碼驗證

var img = new Image();
console.log('1. 賦值前');
img.src = 'large.jpg';
console.log('2. 賦值後,立即執行'); // 立即輸出,不等圖片加載
img.onload = () => console.log('3. 圖片加載完成'); // 異步回調
document.body.appendChild(img);

輸出順序:1 → 2 → (網絡延遲後)3。

滾動懶加載場景最佳實踐

// IntersectionObserver API(現代、高性能)
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src; // 觸發異步下載
      observer.unobserve(img);
    }
  });
});
document.querySelectorAll('img[data-src]').forEach(img => observer.observe(img));

關鍵區別

階段同步/異步說明
JS 賦值 src同步微任務級,極快
瀏覽器發請求異步網絡 I/O,受帶緩存影響
解碼/渲染異步主線程空閒時執行
onload 回調異步微任務隊列
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved