簡體   English   中英

如何在解析 DOM 樹之前打印 HTML?

[英]How to print HTML before DOM tree is parsed?

我在https://web.dev/howbrowserswork/#The_main_flow 讀到,打印網站是一個漸進的過程,不會等到 DOM/CSS/RENDER/LAYOUT 樹被完全解析。

重要的是要了解這是一個漸進的過程。 為了更好的用戶體驗,渲染引擎會盡快在屏幕上顯示內容。 在開始構建和布局渲染樹之前,它不會等到所有 HTML 被解析。 部分內容將被解析和顯示,而該過程繼續處理來自網絡的內容的 rest。

我試圖找到一個例子來測試它。 對於下面的 HTML,我希望先打印綠色框,然后阻塞 JS,然后渲染黃色框:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Test</title>
  </head>
  <body>
    <div style="height:300px;width:700px;background-color:green"></div>
    <script>
    function sleep(milliseconds) {
      const date = Date.now();
      let currentDate = null;
      do {
        currentDate = Date.now();
      } while (currentDate - date < milliseconds);
    }

    console.log("Hello");
    sleep(2000);
    console.log("World!");
    </script>    
    <div style="height:300px;width:700px;background-color:yellow"></div>
  </body>
</html>

然而,在 Chrome 和 Firefox 上測試,什么都不會顯示,兩秒鍾后綠色和黃色框將同時顯示。

為什么我的示例不作為一個漸進的過程打印? 你能提供一個漸進打印過程的例子嗎?

正如其他人所說,您正在阻止使用該代碼進行渲染。 對於您要完成的工作,更好的方法可能是在 javascript 中設置超時,然后通過操作 DOM 在延遲后添加您想要添加的元素。

setTimeout( () => {
   const elem = document.createElement('div');
   elem.style.cssText = 'height:300px;width:700px;background-color:yellow';
   document.body.appendChild(elem);
}, 2000);

另一種更好的方法可能是使用 CSS 在設定時間后使用 CSS 動畫顯示隱藏元素。

yet another option would be to use a class to hide the element from rendering display: none , then remove that class, or add another class that changes display, using javascript and a timeout.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM