[wp-trac] [WordPress Trac] #58870: Delay loading comment-reply script with async loading strategy

WordPress Trac noreply at wordpress.org
Thu Jul 20 20:18:42 UTC 2023


#58870: Delay loading comment-reply script with async loading strategy
-------------------------+--------------------------------------
 Reporter:  westonruter  |       Owner:  westonruter
     Type:  enhancement  |      Status:  accepted
 Priority:  normal       |   Milestone:  6.4
Component:  Comments     |     Version:  trunk
 Severity:  normal       |  Resolution:
 Keywords:  has-patch    |     Focuses:  javascript, performance
-------------------------+--------------------------------------
Description changed by westonruter:

Old description:

> Currently the `comment-reply` script is loaded in the footer. This is
> great because it doesn't block rendering, however it can still block
> other scripts from executing and thus it delays `DOMContentLoaded`. This
> means that if a theme has a script with logic running at
> `DOMContentLoaded` to add interactivity to the nav menu, this will get
> delayed for the sake of `comment-reply` which is not even needed unless
> the user scrolls down the page to the comments. In the worst case
> scenario, a user may try to tap on the nav menu too early and nothing may
> happen due to `comment-reply` causing an unnecessary delay.
>
> Adding either `defer` or `async` to the `comment-reply` script will cause
> the browser to treat it as low priority from a [https://web.dev/fetch-
> priority/#browser-priority-and-fetchpriority loading perspective].
> However, in the case of `defer` it will still block other `defer` scripts
> and the `DOMContentLoaded` event. With `async` there is the possibility
> that the execution may be delayed until after the DOM loads if the script
> is not in the cache yet. On the other hand, if the `async` script is
> cached, it may execute right away which would be no different than the
> current situation of it being a blocking script in the footer: so no
> better or worse. But for the case where the `comment-reply` script is not
> cached yet, `async` would surely be better.
>
> Additionally, according to [https://www.tunetheweb.com/about/ Barry
> Pollard] there is talk of executing all `defer` scripts together in one
> single task rather than running each in their own task. Using `async`
> would prevent adding another script to this `defer` group.

New description:

 Currently the `comment-reply` script is loaded in the footer. This is
 great because it doesn't block rendering, however it can still block other
 scripts from executing and thus it delays `DOMContentLoaded`. This means
 that if a theme has a script with logic running at `DOMContentLoaded` to
 add interactivity to the nav menu, this will get delayed for the sake of
 `comment-reply` which is not even needed unless the user scrolls down the
 page to the comments. In the worst case scenario, a user may try to tap on
 the nav menu too early and nothing may happen due to `comment-reply`
 causing an unnecessary delay.

 Adding either `defer` or `async` to the `comment-reply` script will cause
 the browser to treat it as low priority from a [https://web.dev/fetch-
 priority/#browser-priority-and-fetchpriority loading perspective].
 However, in the case of `defer` it will still block other `defer` scripts
 and the `DOMContentLoaded` event. With `async` there is the possibility
 that the execution may be delayed until after the DOM loads if the script
 is not in the cache yet. On the other hand, if the `async` script is
 cached, it may execute right away which would be no different than the
 current situation of it being a blocking script in the footer: so no
 better or worse. But for the case where the `comment-reply` script is not
 cached yet, `async` would surely be better.

 Additionally, according to [https://www.tunetheweb.com/about/ Barry
 Pollard]: "Current browsers ''may'' execute all `defer` scripts altogether
 in one single task (Chrome does). There is talk within the Chrome team as
 to whether these should run in their own tasks. Using `async` would
 prevent adding another script to this `defer` group."

--

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/58870#comment:3>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list