我发现可以单独压缩html、javascript和css文件的实用程序。但是,假设我有一个名为homepage.php的文件,其中php在页面顶部,css和javascript在页眉中,html在正文中,还有更多的php代码,也许还有更多的javascript。有时,包含javascript的块中也可能包含php (用于将php值转换为javascript)。有没有什么实用工具可以处理压缩这样的页面?
浏览每个文件,手动将其拆分,并单独压缩所有文件,这可能会变得非常乏味。甚至可以只压缩文件中的html和css而忽略javascript和php的东西也是非常有用的。我的大部分javascript都在外部js文件中。
发布于 2010-09-30 21:17:27
感谢所有的反馈。我将使用apache来压缩文件,但我想事先做一些事情来删除页面的css和html片段中的所有换行。我找不到任何东西来做这件事,而不是把php和javascript放在一个文件中,所以我写了自己的脚本来做这件事。
下面的代码肯定是可以改进的,而且非常原始。有很多地方我可以让它更有效率,但这只是一个想法的测试。然而,它工作得足够好,可以使用。只需将其保存到php文件中,并将$file_name设置为您的文件名。
<?
function minifyFile($file)
{
$contents = file_get_contents($file);
$contents = preg_replace('/<!--(.|\s)*?-->/', '', $contents);
$contents = str_replace('<?', ' <? ', $contents);
$contents = str_replace('?>', ' ?> ', $contents);
$contents = str_replace('<script', ' <script', $contents);
$contents = str_replace('script>', 'script> ', $contents);
$filtered = '';
$length = strlen($contents);
$ignore = Array();
$html = Array();
for($i = 0;$i <= $length;$i++)
{
if(substr($contents, $i, 2) == '<?')
{
$end = strpos($contents, '?>', $i) + 2;
array_push($ignore, Array('php', $i, $end));
$i = $end;
}
else if(strtolower(substr($contents, $i, 7)) == '<script')
{
$end = strpos($contents, '</script>', $i) + 9;
array_push($ignore, Array('js', $i, $end));
$i = $end;
}
}
$ignore_c = count($ignore) - 1;
for($i = 0;$i <= $ignore_c;$i++)
{
$start = $ignore[$i][2];
if($start < $length)
{
array_push($html, Array('html', $start+1, $ignore[$i+1][1]-1));
}
}
function cmp($a, $b)
{
if ($a[1] == $b[1]) {
return 0;
}
return ($a[1] < $b[1]) ? -1 : 1;
}
$parts = array_merge($ignore, $html);
usort($parts, "cmp");
foreach($parts as $k => $v)
{
$cont = substr($contents, $parts[$k][1], ($parts[$k][2]-$parts[$k][1]));
if($parts[$k][0] == 'html')
{
$cont = str_replace(Array("\n", "\t", " ", " ", " "), " ", $cont);
}
$filtered .= $cont;
}
return $filtered;
}
$file_name = '../main.php';
$filtered = minifyFile($file_name);
echo '<textarea style="width:700px;height:600px">' . file_get_contents($file_name) . '</textarea>';
echo ' <textarea style="width:700px;height:600px">' . $filtered . '</textarea>';
?>通过一些修改,可以修改此代码以迭代一个目录中的所有文件,并将它们保存到另一个目录中作为精简版本。
发布于 2010-09-29 23:12:48
如果这个问题背后的想法是使用更少的带宽,那么我建议您使用apache输出过滤器(假设您正在使用apache作为less服务器)。只需使用ie过滤所有PHP脚本和静态HTML页面。mod_deflate,并且您将使用更少的带宽。
发布于 2010-09-29 23:15:22
即使没有一种工具可以让您一次完成所有的小型化操作,您也可以使用DOM轻松地将其自动化。只需解析页面并找到所有<script>和<style>元素。然后通过像JsMin或CSSMin这样的第三方库运行它们的内容,并用输出替换节点。
然而,你也可以在你的for服务器中启用gzip压缩,这对于大多数网站来说应该已经足够了。或者你最近遇到过交通限制吗?
https://stackoverflow.com/questions/3822912
复制相似问题