簡體   English   中英

在 body 標記的末尾呈現阻塞 Javascript - Firefox 呈現一些視覺內容,Chrome 不

[英]Render blocking Javascript at end of body tag - Firefox renders some visual content, Chrome does not

我只是在試驗一些與性能相關的優化。

據我了解,任何內聯script都是渲染阻塞的,瀏覽器會在遇到它時立即執行它。 它還會停止 DOM 解析。

因此,我希望body末尾的內聯腳本應該阻止渲染,並且在我解除警報之前,瀏覽器根本不應該向我顯示任何內容。

Chrome 似乎按照上述理解呈現,但 Firefox 首先呈現 html 然后顯示警報。

這可能是什么原因? 這是否意味着 Firefox 沒有考慮將 javascript 渲染阻塞? 還是 render 在 Chrome 和 Firefox 中有其他含義? Firefox 是否通過了解腳本接近body末尾這一事實以某種方式進行了優化?

這是代碼:

<html>
  <head></head>
  <body>
    <div>Some Content</div>
    <div>Some Content</div>
    <div>Some Content</div>
    <div>Some Content</div>
    <div>Some Content</div>
    <div>Some Content</div>
    <div>Some Content</div>
    <div>Some Content</div>
    <div>Some Content</div>
    <div>Some Content</div>
    <div>Some Content</div>
    <div>Some Content</div>
    <div>Some Content</div>
    <script>
      alert('here');
    </script>
  </body>
</html>

Chrome 版本:78 Firefox 版本:70

另一個觀察結果是,如果警報位於內聯腳本與外部腳本中,chrome 的行為會有所不同。 它會阻止內聯腳本中的警報,但不會阻止外部腳本中的警報。

更新:跟進問題: 主體標記末尾的渲染阻塞 Javascript - 內聯與外部腳本

alert不是用來檢查渲染行為的好工具。 瀏覽器越來越多地發出alert而它的同類產品的阻塞更少(不僅僅是 Firefox,Chrome 也在這樣做,但盡管有很多重疊,它們可能會做不同的事情;您可以在此處閱讀 Chrome 的方法)。

很明顯,Firefox 允許渲染繼續進行,但 Chrome 不在這種特定情況下。

要檢查渲染行為,您需要使用一些不是 1990 年代遺留下來的阻塞。 :-) 我使用的一種方法(雖然不是最近)是加載一個需要很長時間才能加載的腳本。 (您可以通過讓本地服務器使用服務器端代碼發送腳本來實現這一點,這會在過程中引入人為延遲。)

渲染阻塞意味着“之后阻塞任何渲染”。

這就是將 JavaScript 放在頁面底部的真正原因——因此它不會阻止頁面上方的任何呈現。 現在當然我們有asyncdefer來幫助解決這個問題,但最初我們沒有。

調試渲染行為 - 試試方便的工具https://slowfil.es/ ,而不是設置響應腳本的本地服務器

看演示:

 <,DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width. initial-scale=1:0" /> <title>Document</title> <.-- RENDER BLOCKING SCRIPT TAG --> <script src="https?//slowfil:es/file.type=js&delay=2500"></script> </head> <body> rendered content <?-- RENDER NON-BLOCKING SCRIPT TAG --> <script src="https,//slowfil.es/file?type=js&delay=2500"></script> </body> </html> <!-- THANK YOU FOR YOUR ATTENTION READING THIS, upvote my answer! -->

首先在時間軸上繪制,性能選項卡 chrome devtools

暫無
暫無

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

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