Google is wrong about defer?

前端 未结 1 1245
慢半拍i
慢半拍i 2021-01-22 23:53

In this post:

Why google is using the term "Render-Blocking JavaScript"?

@jaffa-the-cake is asking in a comment to someone:

\"Which piece of do

相关标签:
1条回答
  • 2021-01-23 00:01

    After re-reading your question and the linked quote I'm seeing where you are coming from, and why this quote can be misleading. For reference let me put the quote below with the title included:

    Defer loading of JavaScript

    The loading and execution of scripts that are not necessary for the initial page render may be deferred until after the initial render or other critical parts of the page have finished loading. Doing so can help reduce resource contention and improve performance.

    You already understand this, but I'll link it for a reference on how defer works.

    As you mentioned, yes the execution of JavaScript in defer and in general is always render blocking, and rather defer does not block the DOM parser.


    The reason why the quote is misleading/confusing is because of the sections in bold:

    The loading and execution of scripts that are not necessary for the initial page render may be deferred until after the initial render or other critical parts of the page have finished loading. Doing so can help reduce resource contention and improve performance.

    The section "The loading and execution of scripts that are not necessary for the initial page render may be deferred until after the initial render". While not an incorrect statement, is misleading because but the performance gain is really directly due to the parser not getting blocked.

    This can be clearly shown using the official documentation on defer

    A more direct and more clear way to describe this would be as you mentioned:

    The loading and execution of scripts that are not necessary for the initial page render may be deferred until after the initial parsing or other critical parts of the page have finished loading. Doing so can help reduce resource contention and improve performance.

    That makes it clear that the performance gain is due to the parser being deferred. It also is more inline with how defer specs describe it and the befits of defer:

    If the async attribute is not present but the defer attribute is present, then the classic script will be fetched in parallel and evaluated when the page has finished parsing. If neither attribute is present, then the script is fetched and evaluated immediately, blocking parsing until these are both complete. (W3C)

    0 讨论(0)
提交回复
热议问题