HTML和元素的显示

问题描述 投票:11回答:4

我试图了解网络是否允许查看渐进式JPEG。

假设我们有一个服务器(参见progressive jpegs):

$ identify /var/www/test.jpg
/var/www/test.jpg JPEG 2048x1080 2048x1080+0+0 8-bit DirectClass 129KB 0.020u 0:00.019
$ identify -verbose /var/www/test.jpg | grep Inter
  Interlace: JPEG

现在,如果我们放置以下HTML文档:

$ cat /var/www/test.html
<!DOCTYPE html>
<html>
<head><title>jpg test</title></head>
<body>
<p><img src="test.jpg" width="256" height="128"></p>
</body>
</html>

我试图了解是否(根据img element),用户代理需要下载整个2048x1080图像,而渲染区域只是256x128

或者相反,用户代理允许考虑渲染区域:256x128,因此推断它只能处理渐进式JPEG的一部分。知道完全分辨率没有意义,因为它不会向图像添加任何细节(从技术上讲,质量层即使在低分辨率下也会产生影响,这只是为了简化)。

通常,我想在谷歌地图等应用程序中知道,如果用户代理可以中止(暂停?)检索当前显示的图像,因为用户决定仅根据解压缩渐进式JPEG的部分结果放大一些(整个JPEG尚未在用户端)。


更新:事实证明,web正在尝试使用HTML中的loading属性的不同方法:

<img src="example.jpg" loading="lazy" alt="example" />
html web-applications jpeg w3c
4个回答
7
投票

在网站中使用渐进式JPEG的想法与节省带宽关系不大,而与更早地向最终用户展示内容有关。无论如何,浏览器仍会下载完整的图像,但渐进式JPEG允许用户更早地看到发生的事情。

JPEG上的W3 page说:

渐进式JPEG是一种重新排序信息的方法,因此,在仅下载了一小部分之后,会呈现整个图像的模糊视图,而不是仅仅是一小部分的清晰视图。

因为包含IMG标记通常意味着您希望浏览器下载该资产,所以它不会在中途中止它只是因为它确定它已经“足够”下载了。浏览器也不知道你打算稍后对图像做什么 - 也许你稍后会对它进行缩放,或者它可能需要稍后以不同的尺寸显示它。部分下载一次意味着浏览器可能必须稍后再次下载。

JPEG上的Wikipedia article指出:

但是,渐进式JPEG不受广泛支持,[引证需要]甚至一些支持它们的软件(例如Windows 7之前的Internet Explorer版本)[12]仅在完全下载后显示图像。

因此,即使某些浏览器在下载“足够”之后确实中断了这些连接,但是没有足够的浏览器支持我甚至考虑使用它们。


0
投票

简短的回答是没有标准的方法来中止img(渐进式或其他)而不离开或中止页面或更改标签的src(这将删除部分图像)。我也不知道会有任何黑客攻击。

虽然这听起来像一个很好的功能,但在以下常见情况下对现有网站来说会有问题:

  • 使用大型渐进式图像作为缩略图+预加载的图像库(即,Galleria执行此操作)
  • 任何依赖于onload事件的网站(如果可以中止/暂停,你的半渲染图像会被视为“加载”)?

仅仅由于这些原因,除非作为属性添加到规范中(如弃用的lowsrc属性或者某些allowpartial属性,您明确要求此行为),这将是一个坏主意。作为一个关注WHATWG讨论的人,我可以告诉你,它几乎肯定会被彻底拒绝,原因很简单,因为它增加了解决边缘问题的复杂性。如果确实需要这个功能,那么在宽带几乎普及之前,几年前就会有需求。在游戏的这一点上,巧妙地使用Javascript和/或缩略图基本上是多余的。



-1
投票

据我了解你的问题,答案很大程度上取决于你想要支持的浏览器。

可以使用第三方插件(如“Firebug”)轻松检查浏览器行为。这些插件可以显示页面创建的进度,请求的内容以及发送到服务器和从服务器发送的字节数。在Firebug中,可以在“Net”选项卡中看到它。

© www.soinside.com 2019 - 2024. All rights reserved.