首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用php、javascript、html和css压缩网页

问用php、javascript、html和css压缩网页
EN

Stack Overflow用户
提问于 2010-09-29 23:03:48
回答 4查看 1.4K关注 0票数 3

我发现可以单独压缩html、javascript和css文件的实用程序。但是,假设我有一个名为homepage.php的文件,其中php在页面顶部,css和javascript在页眉中,html在正文中,还有更多的php代码,也许还有更多的javascript。有时,包含javascript的块中也可能包含php (用于将php值转换为javascript)。有没有什么实用工具可以处理压缩这样的页面?

浏览每个文件,手动将其拆分,并单独压缩所有文件,这可能会变得非常乏味。甚至可以只压缩文件中的html和css而忽略javascript和php的东西也是非常有用的。我的大部分javascript都在外部js文件中。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-30 21:17:27

感谢所有的反馈。我将使用apache来压缩文件,但我想事先做一些事情来删除页面的css和html片段中的所有换行。我找不到任何东西来做这件事,而不是把php和javascript放在一个文件中,所以我写了自己的脚本来做这件事。

下面的代码肯定是可以改进的,而且非常原始。有很多地方我可以让它更有效率,但这只是一个想法的测试。然而,它工作得足够好,可以使用。只需将其保存到php文件中,并将$file_name设置为您的文件名。

代码语言:javascript
复制
<?

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 '&nbsp;&nbsp;<textarea style="width:700px;height:600px">' . $filtered . '</textarea>';

?>

通过一些修改,可以修改此代码以迭代一个目录中的所有文件,并将它们保存到另一个目录中作为精简版本。

票数 0
EN

Stack Overflow用户

发布于 2010-09-29 23:12:48

如果这个问题背后的想法是使用更少的带宽,那么我建议您使用apache输出过滤器(假设您正在使用apache作为less服务器)。只需使用ie过滤所有PHP脚本和静态HTML页面。mod_deflate,并且您将使用更少的带宽。

票数 2
EN

Stack Overflow用户

发布于 2010-09-29 23:15:22

即使没有一种工具可以让您一次完成所有的小型化操作,您也可以使用DOM轻松地将其自动化。只需解析页面并找到所有<script>和<style>元素。然后通过像JsMin或CSSMin这样的第三方库运行它们的内容,并用输出替换节点。

然而,你也可以在你的for服务器中启用gzip压缩,这对于大多数网站来说应该已经足够了。或者你最近遇到过交通限制吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3822912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档