在不破坏内联Javascript

时间:2017-07-12 19:09:42

标签: javascript php html css caching

我一直在将呈现的页面缓存到redis缓存中,并将它们作为快速缓存提供给未登录的用户。大多数页面的页面大小约为100kb。通过在将其插入redis之前缩小html,我能够减小20kb的大小,但似乎这个过程打破了页面上的任何内联javascript。

目前使用以下PHP函数执行缩小。我当然不得不禁用它,但它似乎做得很好,只需要更加厌倦了javascript。

function MinifyHtml($html)
{
    $search = array(
        '/\>[^\S ]+/s',     // strip whitespaces after tags, except space
        '/[^\S ]+\</s',     // strip whitespaces before tags, except space
        '/(\s)+/s',         // shorten multiple whitespace sequences
        '/<!--(.|\s)*?-->/' // Remove HTML comments
    );

    $replace = array('>','<','\\1','');

    $buffer = preg_replace($search, $replace, $html);

    return $buffer;
}

2 个答案:

答案 0 :(得分:0)

我使用PHP函数来缩小HTML和JavaScript,可以在这里找到扩展: https://gist.github.com/tovic/d7b310dea3b33e4732c0

答案 1 :(得分:0)

使用可以处理内联 javascript 的预构建 HTML 缩小工具,请参阅 HTMLdoc on GitHub

您还使用了缓存,因此不会浪费任何 CPU 周期,因为您正在缓存输出。正如 ceejayoz 所建议的那样,对输出进行 Gzip 压缩将获得更好的压缩效果,并且比缩小花费更少的 CPU 时间,您将从 gzip 中获得约 70% 的压缩,但从缩小中仅获得约 15%。合并和缩小将使您获得额外约 10% 的 gzip 大小。

建议您存储 Gzip 和非 Gzip 版本,并根据 Vary 标头直接从缓存中提供它们。