【问题标题】:How to stop chrome from downloading unwanted assets?如何阻止 chrome 下载不需要的资产?
【发布时间】:2015-06-25 18:10:58
【问题描述】:

在以前版本的 chrome 中,在具有以下内容的网页上:

<script>
   document.write('<plaintext>');
</script>

<img src="http://example.com/image.jpg">

图像不会被下载。在某些时候,chrome 更新改变了这种行为。现在,当我查看网络选项卡时,我看到图像已下载。 (这里小提琴:https://jsfiddle.net/doojunqx/

我有一个页面上的脚本,我想使用此脚本来阻止浏览器下载(占用网络带宽)不需要的且位于我的脚本标记下方的图像和其他资产。

Mobify 在这里做了类似的事情: http://cdn.mobify.com/mobifyjs/examples/capturing-grumpycat/index.html

正如他们在“打开您的网络检查器并注意原始图像未加载”页面上所说的那样。但是,当我打开 chrome 开发人员工具并查看网络选项卡时,我看到原始图像正在加载。我不确定哪个版本的 chrome 改变了这一点,但我认为它是最近的,在过去一两个月内。

有什么方法可以强制 chrome 恢复到旧的行为?或者任何其他方式来阻止这些不需要的资产加载?

谢谢,

【问题讨论】:

  • 看起来问题出在预加载扫描仪上。在以前的 chrome 版本中,如果头部有渲染阻塞脚本,预加载扫描器将停止。有什么办法可以禁用预加载扫描器?

标签: google-chrome safari webkit mobify-js


【解决方案1】:

很好的问题,你说得对,是a recent change in Chromium 影响了明文标签的行为。在 42.* 及之前的版本中,HTML 文档解析器不会产生异步解析线程,直到在原始 HTML 文档中找到外部资源。一旦找到这样的资源,就会产生一个异步线程,该线程将积极下载 HTML 中的所有资源引用。

最近的更改通过将所有文档解析移至现在自动启动的异步线程来简化解析行为。以前,使用纯文本标签将确保如果在第一个外部资源之前插入任何资源,则不会加载任何资源,而纯文本标签现在很活跃,因为资源将在主 HTML 文档中执行纯文本标签的那一刻下载。由于脚本执行存在时间延迟,因此将检索到未知数量的资源。

目前还没有解决这种新行为的方法,也没有办法按照您的意愿禁用预加载扫描程序。您将需要依靠诸如 polyfill 之类的变通方法来控制您的资源下载。此新行为仅存在于所有版本的 Chrome >= 43.* 中,尚未在 Safari、Firefox 或其他浏览器中实现。

【讨论】:

  • 感谢丹的解释。你有什么 polyfills 来控制资源下载吗?
  • 控制资源下载的最简单方法是实际上只使用非标准属性,如x-src,而不是src。只需在 JavaScript 中进行测试以确定要下载哪些资源并将相应资源上的属性切换回src
猜你喜欢
  • 2016-01-17
  • 2010-11-29
  • 1970-01-01
  • 2019-12-16
  • 2011-09-01
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多