0

最小化 html 是谷歌页面速度上唯一仍有改进空间的部分。

我的网站都是动态的,而且 HTML 已经是动态的,Deflated所以没有理由对服务器施加更多压力(我不想在发送前实时最小化页面)。

我能做的是最小化模板文件。我的模板文件是混合的PHPHTML所以我想出了一些我认为非常安全但希望被社区修改的代码。

// this will loop trough all template files
// php is cleaned first so that line-comments will not interfere with the regex
$original = file_get_contents($dir.'/'.$file);
$php_clean = php_strip_whitespace($dir.'/'.$file);
$minimized = preg_replace('/\s+/', ' ', $php_clean);

这将使我的模板文件成为一个非常长的文件,与插入数据库内容的一些地方交替出现。谷歌的主页源看起来或多或少像我得到的,所以我想知道他们是否遵循类似的方法。

问题 1:您是否预见到潜在的问题?
问题2:有没有更好的(更有效地做到这一点)?

请记住,我不是在尝试验证 HTML,因为模板不是有效的 HTML(例如,包含页眉和页脚)。

编辑:请考虑模板文件将在部署时最小化。由于 CSS 和 Javascript 文件是使用 YUI Compressure 和 Closure 最小化和压缩的,所以模板文件在部署时也会被最小化。不按客户要求。

谢谢你。

4

4 回答 4

2

Google 自己的Closure Templates (Soy)默认会在行尾去除空格,模板设计者会使用{sp}. 这可能不是放弃 PHP 的充分理由,但我只是想引起您的注意。

此外,请意识到 HTML 4 允许您排除一些标签,正如有关缩小 HTML 的 Page Speed 文档 (http://code.google.com/p/page-speed/wiki/MinifyHtml) 所建议的那样。您可以排除</p>, </td>,等。有关可以省略结束标记的元素的完整列表,请在 HTML 4 DTD (http://www.w3.org/TR/REC-html40/sgml) 中</tr>搜索“ ” - O/dtd.html)。您甚至可以完全省略<html><head><body><tbody>标记,因为开始和结束标记都是可选的(O ODTD 中的“”)。

您还可以省略属性 (http://www.w3.org/TR/REC-html40/intro/sgmltut.html#h-3.2.2) 周围的引号,例如id, class(具有单个类名),type以及有简单的内容(即匹配/^[-A-Za-z0-9._:]+$/)。对于具有单个可能值的属性,您可以排除该值(例如,简单地说,checked而不是checked=checked)。

有些人可能会觉得这些技巧令人反感,因为多年来我们已经习惯于为即将到来的 XHTML 简单 LALR 解析器世界做准备。因此,像 Dave Raggett 的 HTML Tidy 这样的工具会生成带有适当结束标记和属性值引号的 HTML。但是让我们面对现实吧,所有的浏览器都已经有了能够理解 HTML 4 的解析器,任何新的浏览器都将使用 HTML 5 解析器而不是 XHTML,而且我们应该能够轻松地编写针对大小优化的 HTML。

话虽如此,除了谷歌和 Facebook 等几家大公司之外,我的猜测是页面大小是延迟的一个微不足道的组成部分,所以如果你正在优化自己的网站,这可能是因为你自己的强迫倾向而不是性能。

于 2010-10-19T18:49:39.527 回答
1

空白可能很重要(例如在pre元素中)。

当我有一个特别大的页面时(即足够大以至于有利于缩小 HTML),我使用 HTML Tidy 并缓存结果。

tidy -c -n -omit -ashtml -utf8 --doctype strict \
    --drop-proprietary-attributes yes --output-bom no \
    --wrap 0
于 2010-10-07T16:04:26.117 回答
1

我认为您最终会遇到这种方法的加载时间问题,因为获取内容、去除空白和 preg 替换调用将花费比缩小 HTML 为您节省的任何带宽更长的时间。

于 2010-10-07T16:09:15.967 回答
0

我已经在我所有的网站上运行了几个星期的测试,我可以说这种方法非常一致。它只会影响模板内容,因此几乎没有弄乱未知<pre>或类似内容的风险。

它在部署之前运行,因此对服务器没有影响 - 实际上随着文件变小应该有一点加速。

请记住,来自数据库的所有内容都不会受到任何影响,就像之前所说的,这在部署之前运行并且仅在模板文件上运行。

该方法接缝足够牢固,可以将其投入生产。

如果有任何问题,我会在这里发布。

于 2010-10-19T17:10:23.037 回答