感謝所有的反饋人。我將使用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>';
?>
有了一些修修補補,這個代碼可以通過修改目錄中的所有文件進行迭代,並將它們保存到另一個目錄作爲精縮版。
我沒有發送PHP到瀏覽器。我希望PHP在文件中保持機智,但要壓縮的html和css部分。我猜縮小是更好的術語......基本上,空格和評論被刪除。我將使用gzip,但我希望儘可能小的文件開始。 – user396404 2010-09-29 15:39:58
@ user396404:理解。實際上,我懷疑這是值得的。我們對js和css進行了縮小,並且相對於獲取頁面的延遲,速度沒有提高(約2%)。如果你只打算在一個頁面(主頁)上做,而你確實打算這樣做,那麼我會用你提到的那種單調乏味的手動方式去做。如果有很多這樣的頁面,請使用@ Gordon的方法。 – LarsH 2010-09-29 21:37:02