内联vs包括js和css?

时间:2013-07-15 17:25:04

标签: javascript android html css http

在2G移动连接(~0.1mbps)上具有至少500ms延迟的环境中,在服务器上大约5-10个文件中发送大约10kb的css和js的最快和最有效的方法是什么客户?

我可以想到三个选择:

  1. 将所有js组合到一个文件,将所有css组合到一个文件
  2. 逐个链接所有css和js文件
  3. 内联所有内容
  4. 我知道谷歌使用内联,但这可能只是为了节省服务器套接字。他们甚至通过无状态模式运行来保存ram - 他们相信客户会记住他们的会话。服务器功率根本不是问题。

    另一方面,facebook似乎是自动生成他们的css(他们的名字是base64编码的),但是发送给用户的10多个不同的文件,他们甚至似乎没有那么大的优化;只有一些空白删除。

    我已经通过压缩所有内容的函数传递了所有文件,因此其中任何一个都是可行的。我不想选择第一种选择,因为它更容易。

    前两个利用缓存(第二个比第一个少一点)但第二个只需要三个请求到服务器,第三个只需要一个来自服务器的get请求(忽略少量图像我们可能在某些页面上。)

    Android / iOS是否会在重新启动浏览器时缓存js和css?如果没有,那么内联听起来更好。

    唯一的目标是最小化用户的平均加载时间。每个用户每天将在网站上花费大约100页加载,每天看到大约40个css和js文件。 css和js基本上是静态内容。它设置为缓存30天,如果文件使用/path/to/file.ext?md5-hash-of-file更改,我们会更改网址。此外,所有内容都尽可能地进行了压缩。

    编辑:

    我想我应该澄清我发现的第二个选项。在整个网站上使用单个文件用于css和js是一个好主意吗?它只会使用两个请求并删除任何双重(或七元组)缓存,因为单个函数在两个或多个不同的组合js文件中,但下载高达1MB听起来并不好。

    今天它基本上是每个视图的一个组合css,因此每次再次查看同一页面时,内容都会被缓存。但是,有些js和css用于多个页面。

3 个答案:

答案 0 :(得分:1)

  

内联css和javascript会让你的页面变得如此沉重。非常好   练习将所有样式表和所有javascript文件合并到   一个并将它们包含在您的页面中。这将使您的页面非常快   与内联样式相比。

答案 1 :(得分:1)

这实际上取决于用法。对于只有一次访问者的网页,我建议您列出所有内容。这使得初始加载速度更快(单个请求与多个请求相比),并且更易于使用。这是登陆页面,帮助页面,向导和类似的一次性页面的情况。

但是,如果您期待定期访问者,我建议您使用外部文件。虽然第一次加载速度较慢,但​​是之后这些资产的加载时间几乎为零。大多数网站就是这种情况。

答案 2 :(得分:0)

链接到每个文件的#2的问题是小元素加载时间的最大因素是往返时间,而不是文件大小。需要多次往返才能设置连接以获取每个文件。这也意味着你应该结合你的css和js文件。在您的高延迟环境中,往返旅行将特别痛苦。 Here's google's advice on round trips

正如其他人所指出的那样,#3,内联,意味着无法缓存文件。由于html的大小增加,它可以减慢加载时间。但是你避免了往返罚款。

在您的环境中,我还建议looking at the HTML5 application cache优化css和js文件的缓存。您需要转换您的应用程序以使用AJAX调用而不是加载html页面,但这样做也可以减少所需的数据传输。