【问题标题】:Minify HTML code without breaking inline Javascript在不破坏内联 Javascript 的情况下缩小 HTML 代码
【发布时间】:2017-12-17 08:35:33
【问题描述】:

我一直在将渲染页面缓存到 redis 缓存中,并将它们作为快速缓存提供给未登录的用户。大多数页面的页面大小达到 100kb 左右。在将 html 插入 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;
}

【问题讨论】:

  • 这里有问题吗?
  • 这听起来可能很愚蠢,但是您是否考虑过没有内联 JavaScript?无论如何,这是一种不好的做法。
  • 除此之外,我自己的服务器通过删除 /\r?\n\t*/ 来缩小 HTML - 效果很好!
  • 考虑压缩它而不是缩小它。您会看到同样大小的好处(实际上可能要好得多),并且底层 HTML 不会发生任何变化。
  • 我实际上考虑过 gzip,它将 100kb 减少到大约 20kb,但我在服务器上有 15gb 的可用内存,所以我认为浪费内存比浪费 CPU 时间更好跨度>

标签: javascript php html css caching


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • 好的,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 2013-12-14
    • 2021-04-08
    相关资源
    最近更新 更多