我在服务器端有一个带有 JSMin 缩小的网站。问题是我的服务器在实施 JSMin 后变慢了
发生这种情况是因为有一些 URL 导入了一些其他特定文件,并且这些文件被添加到缩小的文件中。
现在我想知道我是否应该始终将这些特定脚本加载到一个大的缩小文件中,或者我是否应该忘记这种方法并将脚本作为单独的文件导入。
我正在使用 Zend Framework 1.11.x 和 BundlePhu + JSMin
我在服务器端有一个带有 JSMin 缩小的网站。问题是我的服务器在实施 JSMin 后变慢了
发生这种情况是因为有一些 URL 导入了一些其他特定文件,并且这些文件被添加到缩小的文件中。
现在我想知道我是否应该始终将这些特定脚本加载到一个大的缩小文件中,或者我是否应该忘记这种方法并将脚本作为单独的文件导入。
我正在使用 Zend Framework 1.11.x 和 BundlePhu + JSMin
我在许多项目中实施的最佳解决方案是将所有 javascript 拆分为最大 200kb 的有限文件。我总是将 JS 分成两个(或很少三个)文件。第一个是库(jquery、zepto、swfobject、bootup...)和“用户代码”(我自己的 $().clicks...)。
.htaccess
我的文件夹中有一个/js
将所有内容重写scripts.js?version=45445
为compiler.php
. 然后编译器脚本验证版本号,检查缓存的编译脚本并返回它。如果未找到,则即时编译,放入缓存并返回。这样,js 每小时都会编译一次,并且总是被缩小。
我很高兴您确实关心通过压缩节省的 1kb。
这是一个示例代码:
#.htaccess
RewriteEngine on
RewriteRule ^scripts_(\d+).js(.*)$ __compress_js.php?_v=$1 [L]
然后像这样,在 php
<?php
// __compress_js.php
ob_start();
include 'config.php';
$cache = FileCache::getInstance();
$cache->setPath(CACHE_PATH);
$cache_key = '_compressed_' . VERSION . '.js';
if ( ! $cache->check($cache_key, 3600)){
$js = JSMin... // array of files
$cache->write($cache_key, $js);
}
Header::js();
echo $cache->read($cache_key, 3600);
上述解决方案只会减慢第一次命中。其他所有人都获得了缓存的 javascript。
如果将所有脚本压缩到一个文件中,客户端性能会更好。浏览器必须做的最慢的事情之一就是建立一个新的 http 连接来下载一个新文件。通过将所有 JavaScript 放入一个缩小文件中,与拥有一堆单独的缩小脚本相比,您可以显着提高性能。
另一方面,进行额外的处理会损害您的服务器性能。是否要以服务器性能换取客户端性能取决于您。但请记住,有研究表明,只要 100 毫秒的客户端减速就会影响您网站的转化率。