我们有一个JavaScript小部件,可从URL加载数据。

为了减少往返,我想避免第二个HTTP请求,并将数据放入HTML页面。

如果我可以不更改JavaScript小部件,那将是很棒的。

是否有URL方案可以从当前HTML页面读取数据?

示例:此https://....代替dom://....

最佳答案

我还是dataURIs的拥护者,因为它们是在网页中实现数据嵌入的最透明(客户端代码方式)的方式。

但是,由于连接开销以及parallel download limitations of HTTP/1,它们首先被用来嵌入小的图像和其他资源,这些资源会影响性能。这种权衡之所以微妙,是因为将数据编码为dataURIs可能会导致30%的increase in data size(估计),但是dataURIs停止提供帮助的关键点是小图像的大小,通常比序列化数据高几个数量级。

对于单页应用程序场景,这里的关键点是要考虑的不仅仅是单次数据获取往返。

在其他静态HTML上嵌入供页面脚本使用的数据具有以下含义:

  • 无法缓存HTML本身(仅使用针对每个不同的嵌入式数据集和页面的每个版本的缓存副本。)
  • 整个页面(的多个版本)必须在还具有如何获取数据知识的服务器上生成。
  • 内联数据可能会在用户可感知的时间内阻止页面呈现(这可以通过将数据嵌入HTML末尾来解决,但是客户端脚本执行可能必须完全等待,因此还需要进行诸如显示加载指标更难实现。)

  • 另一方面,将数据保留在单独的往返行程中,尽管往返行程本身也会:
  • 可能保留您已经在执行的实现,因为它是
  • 允许客户端使用缓存的HTML和脚本,这些脚本仅需要刷新实际的版本更改(为此目的,存在一个失败的称为AppCache的规范,现在已由实验性Service Workers取代)
  • 允许HTML和脚本是完全静态的 Assets ,可以通过更快,更接近客户端浏览器的“哑” CDN提供服务,而无需查询数据库或运行任何服务器端代码

  • 在我看来,所有这些都是大赢家,因此,我建议您认真考虑嵌入数据的需求,因为这可能是早期优化,可能会导致很多痛苦并实际上导致性能下降!特别是因为SPDY和现在的HTTP/2已经开始解决这些往返和连接号问题。

    08-07 09:12
    查看更多