eaz*_*001 6 linux browser javascript webkit
我遇到这个问题已经有一段时间了,通过基于 webkit 的浏览器查看的网站加载图像不一致。不一致,我的意思是在一次试运行中,一个或多个图像将成功加载,而其他图像则不会。在同一个网站的另一次试运行中,之前未加载的图像将突然加载——只有之前加载的图像突然无法加载。这种行为是如此非线性,以至于我很难找出问题的根源。我注意到,这个问题是复制与浏览器,如jumanji
,dwb
和vimperator
。我相信所有这些浏览器的共同点是它们使用webkit
. 重复重新加载网页有时会产生所有资源都正确加载的结果。
这是所描述行为的屏幕截图(来自基于 webkit 的luakit
):
正如您所看到的,这是两个失败的图像,它们说明了此处的常见行为。我无法使用 firefox 或 chrome 等浏览器(我相信它们分别使用gecko
和blink
)来复制此问题。如果我右键单击图像/元素并在新窗口中打开它,我可以毫无问题地查看图像。我正在运行 Arch Linux 内核 3.12.9-1-ck。任何有关可能发生的事情的帮助/见解将不胜感激。谢谢你。
更新:当通过 luakit 中的调试控制台将每个损坏的图像作为元素进行检查时,会输出以下一般形式的内容:
GET [web address here] Cannot resolve hostname [domain here]
Run Code Online (Sandbox Code Playgroud)
更新 2:我尝试通过,在我的系统(基于 debian)上安装luakit
的虚拟机安装,有趣的结果......没有未解析的主机名/损坏的图像/失败的资源的症状。在此虚拟环境中,浏览速度也相对较快。kali-linux
apt-get install luakit
遵循@harrymc 提出的建议(使用 Google 公共 DNS)已经完全消除了页面加载不良的所有症状。根据@harrymc 的说法,这是由于错误/缓慢的 DNS 和/或糟糕的 DNS 缓存策略造成的。更具体地说,导致此问题的原因是 DNS 不佳,以及webkit
引擎中内置的似乎相当仓促的超时协议。这两个因素是灾难的根源。
另一个结论是 Webkit 浏览器的低效率,因为它们对同一个网站发出多个 DNS 查询,而不是记住第一个查询。另一个结论是,ISP 的 DNS 服务器有时显然无法处理多个并行请求(因为浏览器可能通过线程并行处理多个图像),可能是因为它们现在有更多的客户端,但没有足够的 DNS 服务器。 --harrymc
由于 Webkit 团队任意决定通过硬编码、隐藏的 60 秒超时限制所有 XML HTTP 请求,我们刚刚被迫重构/重新编码基于 AIR 的 RIA 的很大一部分。这一决定不仅影响AIR,还影响Safari和其他基于Webkit的浏览器。
虽然这不一定与您的问题有关,但它确实表明 Webkit 中存在硬编码超时。
如果您的问题与 Webkit 中的超时太短有关,那么问题是,既然您的连接速度很快,为什么您会经历长时间的图像等待。
作为第一个测试,我建议将您的 DNS 服务器更改为 Google Public DNS或OpenDNS,看看这是否会产生影响。如果确实如此,则问题出在您的 ISP 在 DNS 上或使用其自己的缓存时速度太慢。
通过 User-Agent 禁用 HTTP keepalive的另一个参考:
Safari 中长期存在的错误会导致在不正确地重用 keepalive 连接时文件上传挂起。
https://bugs.webkit.org/show_bug.cgi?id=5760
在 Apache 中,禁用 Webkit 的 keepalive 支持可以解决此问题。
如果 Apache Web 服务器仍然禁用 Webkit 的 keepalive(HTTP 持久连接),这意味着每个图像都需要单独的 HTTP 连接,而 Firefox 和 Chrome 可以使用页面已有的连接来下载图像,而无需重新连接。
由于建立连接通常相当慢,再加上较短的内置超时,可以解释 Webkit 的图像问题。
我想知道您的 Webkit 浏览器是否能够更改其用户代理 身份?
例如,虽然我对 vimperator 一无所知,但我通过谷歌找到了插件UserAgentSwitcherLite。
归档时间: |
|
查看次数: |
1473 次 |
最近记录: |