在 2G 移动连接(~0.1mbps)至少有 500 毫秒延迟的环境中,将服务器上大约 5-10 个文件中大约 10kb 的 css 和 js 发送到客户端的最快和最有效的方法是什么?
我可以想到三个选项:
- 将所有 js 合并到一个文件,将所有 css 合并到一个文件
- 一一链接所有css和js文件
- 内联一切
我知道谷歌使用内联,但这可能只是为了保存服务器套接字。他们甚至通过在无状态模式下运行来节省内存——他们相信客户端会为他们记住会话。服务器电源根本不是问题。
另一方面,facebook 似乎会自动生成他们的 css(他们的名字是 base64 编码的),但是会生成超过 10 个不同的文件发送给用户,而且他们似乎甚至没有对其进行大量优化;只有一些空格删除。
我已经通过一个压缩所有文件的函数传递所有文件,所以其中任何一个都是可行的。我不想选择第一个替代方案,因为它更容易。
前两个利用缓存(第二个比第一个少一点),但第二个只需要向服务器发出三个请求,第三个只需要来自服务器的一个 get 请求(忽略我们可能拥有的少数图像)一些页面)。
Android / iOS 是否在浏览器重启时缓存 js 和 css?如果不是,那么 inline 听起来更好。
唯一的目标是最小化用户的平均加载时间。每个用户每天将在网站上花费大约 100 个页面加载,每天查看大约 40 个 css 和 js 文件。css 和 js 基本上是静态内容。它设置为缓存 30 天,如果文件更改,我们使用/path/to/file.ext?md5-hash-of-file
. 此外,尽可能对所有内容进行 gzip 压缩。
编辑:
我想我应该澄清我为第二个找到的两个选项。在整个站点中为 css 和 js 使用单个文件是个好主意吗?它只会使用两个请求并删除任何双重(或七重)缓存,因为单个函数位于两个或多个不同的组合 js 文件中,但最大 1MB 的下载听起来并不那么好。
今天它基本上是每个视图一个组合的 css,所以每次你再次查看同一个页面时,内容都会被缓存。但是,一些 js 和 css 用在不止一个页面上。