<script type="text/javascript" src="somebigjsfile.js.gz"></script>加载它,是一个好主意吗?
当至少修改了其中一个.js文件时(使用php的filemtime检查),将再次生成此文件。
如果相关,请注意,这是针对公共应用程序的。
<script type="text/javascript" src="somebigjsfile.js.gz"></script>加载它,是一个好主意吗?
当至少修改了其中一个.js文件时(使用php的filemtime检查),将再次生成此文件。
如果相关,请注意,这是针对公共应用程序的。
我猜想你想要节省服务器的开销,避免每次请求时都需要gzip压缩javascript包?如果是这个意图,那么这种方法并不适合实现它。你需要在头部指示文件正在使用gzip压缩进行传输,如下所示:
HTTP/1.1 200 OK
Date: Thu, 04 Dec 2003 16:15:12 GMT
Server: Apache/2.0
Vary: Accept-Encoding
Content-Encoding: gzip
Cache-Control: max-age=300
Expires: Thu, 04 Dec 2003 16:20:12 GMT
X-Guru: basic-knowledge=0, general-knowledge=0.2, complete-omnipotence=0.99
Content-Length: 1533
Content-Type: text/html; charset=ISO-8859-1
注意 Content-Encoding: gzip
无论如何,将您的javascript连接和压缩都是一个好主意,只要做得正确。我还建议在压缩之前使用某种形式的JS缩小,因为它将改善您的后压缩大小。
如果你计划让用户反复访问,我认为这不是一个好主意——我假设你正在开发一个 Web 应用程序。因为每当你的 js 文件被修改时,你都会强制用户下载一个巨大的文件。
当用户第一次使用你的应用程序时,如果加载时间有点长,他们通常会很宽容。如果你展示给他们一个漂亮的介绍文本,他们在脚本和各种资源加载时就有东西可以阅读或观看。但是,如果他们每次回来都必须等待你的巨大脚本被加载,因为这是全有或全无的,那将被认为是糟糕的用户体验。
如果用户在首次加载应用程序时不需要所有的 20-30 个文件,请使用脚本加载器在后台加载它们。
如果你确实需要这些 20-30 个文件,请尝试将它们聚合成 10 个左右的文件,尝试将最有可能一起更新的文件聚合在一起。
至于 gzip 压缩,你的 Web 服务器应该处理它。
是的,这是个好主意。
我在做的是使用一个自定义的 PHP 函数,比如 load_script($filename)
,将文件添加到“加载队列”中。而在页面末尾插入另一个函数 generate_js_script()
,它解析这些排队的脚本,生成一个大型 JS 文件(我猜这时可以运行一个缩小器),并用唯一的文件名将其写入磁盘。该函数只需生成 <script>
标记,以便浏览器知道要加载此“大”的 JS 文件。
这样我就不必费心定制化的 header()
调用和其他一些过去在某些浏览器和它们的缓存算法中引起问题的奇怪事情了。
通过这种方式,我可以简单地使用一个 .htaccess
指令告诉服务器压缩所有的 JS 文件(如果浏览器支持),因此我无需在 PHP 中执行这项工作。
这种缓存的技巧是尽量不要过于频繁地重新生成。我使用某种哈希方式来处理这个问题。