HTML 图片标签真的会阻塞浏览器中的 JS 主线程吗?

Does the HTML image tag actually blocks the JS main thread in the browser?

互联网上有很多文章建议使用 web worker 加载图像以提高性能并释放主线程。 (google search)

但是我找不到任何实际的参考资料说图像标签实际上阻塞了主线程。

我认为浏览器足够智能,可以识别图像标签并理解它无论如何都必须呈现它。这是一种常见的情况。因此,不需要我们为这个常见问题添加新的网络工作者,浏览器可以使用单独的 process/thread/thing 以不会阻塞主线程的方式解决这个问题。

This article 描述

Fun fact: <img> tags actually block your application load. If you have 100 images on your page, the browser will download all 100 of them before it renders your page.

我无法理解这一点。我认为添加 loading="lazy" 比 web worker 更好。

Fun fact: <img> tags actually block your application load. If you have 100 images on your page, the browser will download all 100 of them before it renders your page.

那是完全错误的。如果那是真的,那么没有人会看到他们的网页文本中有空框的图像,然后是加载的图像那些箱子。 DOMContentLoaded vs. load事件的全部意义在于,在外部页面资源完成下载和渲染之前,HTML元素可以被完全解析。此外,没有人会需要 img 上的 load 事件,因为如果那篇文章属实,所有图像都会在您看到页面时加载。

============================================= ================

虽然 JavaScript 运行时是单线程的,但浏览器客户端不是。 “资源文件”(被解析的 .html 页面引用的任何文件)同时下载到被解析的页面。客户端可能会同时下载最大数量的资源(多年前在 IE 中,默认情况下限制为 10,但我认为此后已提高)。

通常当您加载网页时,您会先看到页面的所有文本(因为文本加载速度非常快),然后是图像。这仅仅是因为图片的下载时间比文本的下载时间长,而不是图片等待开始下载。

这可以通过在加载页面时查看浏览器开发工具的“网络”选项卡来验证。您会看到各种资源与页面同时下载。