为什么 Safari 有时只渲染图像的顶部?

Zac*_*ckK 9 html css safari image

我在挪威的一家媒体公司工作,在极少数情况下,我们会看到图像无法完整渲染。发生这种情况时,我们可以刷新页面,图像仍然只会部分呈现。我们只在 Safari 上见过这种情况,我已经能够在桌面版 (Safari 13.1.2) 和移动版 (iOS 14.4.1) 上重现它。

\n

在网络选项卡中,图像似乎已经完全传递。传输的字节量是预期的量。事实上,如果我们将容器的高度增加 1px,图像将突然完整显示,并且不会发生任何网络活动。换句话说,浏览器确实收到了完整的图像,只是没有显示。

\n

部分图像加载

\n

样式中的所有内容看起来都完全正常,但我们仍然认为这与 CSS 有某种关系。但是,我们创建了本地覆盖,并且仍然能够使用以下代码进行重现:

\n
<figure class="desktopi-45000 mobilei-45000 tableti-45000">\n    <picture>\n        <img itemprop="image" data-defer="view" sizes="(max-width: 640px) 640px,(max-width: 1024px) 1024px,1240px" title="- Du h\xc3\xb8rer ikke hjemme her!" alt="- Du h\xc3\xb8rer ikke hjemme her!" class="" srcset="https://www.dagbladet.no/images/73594916.jpg?imageId=73594916&x=15.742793791574&y=14.099216710183&cropw=72.431633407243&croph=57.57180156658&width=760&height=342&compression=70 640w,https://www.dagbladet.no/images/73594916.jpg?imageId=73594916&x=15.742793791574&y=14.099216710183&cropw=72.431633407243&croph=57.57180156658&width=900&height=405&compression=80 1024w,https://www.dagbladet.no/images/73594916.jpg?imageId=73594916&x=15.742793791574&y=14.099216710183&cropw=72.431633407243&croph=57.57180156658&width=980&height=441&compression=80 1240w" src="https://www.dagbladet.no/images/73594916.jpg?imageId=73594916&x=15.742793791574&y=14.099216710183&cropw=72.431633407243&croph=57.57180156658&width=380&height=171">\n    </picture>\n</figure>\n
Run Code Online (Sandbox Code Playgroud)\n

这是问题发生时我们所看到的图像比较。请注意,可能需要多次尝试才能出现错误。

\n

孤立部分图像负载的比较

\n

在试图弄清楚这一点时,我们遇到了类似的问题。然而,所提供的答案未能详细说明问题的根本原因。答案之一说使用decoding="sync",这似乎确实解决了问题(至少,我们无法通过添加来重现)。然而,由于它对性能的影响,这不是一个可行的解决方案。鉴于其他站点没有遇到此问题并且不使用decoding="sync",因此还有其他问题正在发生。因此,问题是为什么会发生这种情况?造成这种情况的原因是什么?可以采取哪些措施来解决?

\n

Kas*_*sen 8

在本地测试时,这似乎可以通过添加来解决

decoding="async"
Run Code Online (Sandbox Code Playgroud)

或者

decoding="sync"
Run Code Online (Sandbox Code Playgroud)

到图像标签。由于某种原因,Safari 和在 Apple 产品上运行的浏览器似乎很难自动选择最合适的解码图像渲染方式。