由于没有人提出答案,我将发布我找到的合理解决方案。
这个问题归结为以下几点:虽然我们希望阻止浏览器在打开javascript时下载图像,但我们必须确保在javascript关闭或不可用时下载图像。
当图像处于“正常”格式时,很难始终如一地使用 javascript 来停止在页面上加载图像:
<img src="path/to/image.jpg"></img>
要阻止图像下载,我们必须删除它们的src
属性,但为了做到这一点,DOM 应该已经加载。现在很多浏览器都进行了优化,很难保证图像还没有下载。
最重要的是,我们当然希望防止中断已经下载的图像,因为这简直是浪费。
因此,我选择使用以下解决方案:
<img data-src="path/to/image.jpg" class="lazy"></img>
<noscript>
<img src="path/to/image.jpg"></img>
</noscript>
noscript
请注意标签之外的图像如何src
只有一个data-src
属性。例如,延迟加载脚本可以使用它来一张一张地加载图像。
只有当 javascript 不可用时,noscript
块内的图像才会可见,因此无需加载.lazy
图像(也没有办法这样做,因为 javascript 不可用)。
我们确实需要隐藏图像:
<noscript>
<style>
.lazy {
display: none;
}
</style>
</noscript>
与块img
内的标签一样noscript
,此style
块仅在 javascript 不可用时对浏览器可见。
src
在相关说明中:我认为我可以通过根本不将 a ordata-src
属性放在惰性图像上来减小 html 大小。这会很好,因为它消除了页面中的冗余 url,为我们节省了一些带宽。
我想我无论如何都可以使用 javascriptsrc
从块中提取属性。noscript
但是,这是不可能的:javascript 无法访问 noscript 块的内容。因此,上述方案是我能想到的最有效的方案。