javascript - 为什么 Content-Security-Policy 会强制 Chrome 按顺序加载 Javascript?

标签 javascript html performance google-chrome

我有一个网站,当我添加

<meta http-equiv="Content-Security-Policy" content="default-src 'self'">

到 index.html 的头部。

经过一段时间的调试后,我意识到,当存在此元标记时,所有 javascript 源代码都会按顺序加载。当我删除这个标签时,javascript 是并行加载的,所以网站加载速度更快。

为了重现这一点,我写了这个小示例 html 文件:

<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'">
  </head>

  <body>
    Hello World
    <script src="angular.js"></script>
    <script src="angular-animate.js"></script>
    <script src="angular-touch.js"></script>
  </body>
</html>

这是带有“Content-Security-Policy”元标记的网络时间线:

timelineWithTag

可以看出,资源是按顺序加载的。

这是我删除“Content-Security-Policy”标签时的网络时间线。

timelineWithoutTag

正如预期的那样,Javascript 资源在这里是并行加载的,即使是小示例,页面加载速度也快得多。

对于这种行为有什么解释吗? 我如何才能两全其美:并行加载 Javascript 文件同时激活“Content-Security-Policy”?

所有测试均使用当时最新的 Chrome(50.0.2661.75(64 位))完成。 Safari 和 Firefox 都没有表现出相同的奇怪行为,它们都同时加载 javascripts 并激活了“Content-Security-Policy”。

最佳答案

这在使用 MAC 时不可重现

Chrome 49.0.2623.110 (64-bit)
Chrome 50.0.2661.75 (64-bit)

两个浏览器都在几毫秒内从本地主机提供这三个文件,同时关闭缓存。

我也在远程服务器上尝试过这个,即不是本地主机,两者都变慢了,但所有文件都是并行加载的,即我看不出打开或关闭 CSP 的情况有什么不同。

我相信 Mozilla 已将 C++ 用于 CSP,但那是几年前的事了,它不会影响 Chrome。

https://blog.mozilla.org/security/2014/09/10/faster-csp/

关于javascript - 为什么 Content-Security-Policy 会强制 Chrome 按顺序加载 Javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36656389/

相关文章:

javascript - 使用 GAS : Error - Argument too large:value 进行巨大的网站抓取/爬行

javascript - 动画期间触发更新

javascript - 需要非常非常快地将 Canvas 的内容设置为图像

javascript - 如何设置使用ajax动态创建的HTML表格列的唯一名称和ID

javascript - 在 React 组件中收听 window.onmessage

javascript - 当一个 radio 组值为 'yes' 时,将第二个设置为 'no',反之亦然

c++ - 为什么将 0.1f 更改为 0 会使性能降低 10 倍?

python - 在 pandas 数据框中使用函数 nans 进行前向填充的快速方法

java - .NET与Java子串操作性能对比

Javascript classList 添加和删除在非全局执行上下文中不起作用