最大限度地减少html,疑问和问题

最小化html是Google的Page Speed中唯一仍有改进空间的部分。 我的网站都是动态的,HTML已经是
Deflated
所以没有理由对服务器施加更多压力(我不希望在发送之前实时减少页面)。 我能做的是最小化模板文件。我的模板文件是
PHP
HTML
的混合,所以我想出了一些我认为非常安全的代码,但希望社区修改。
// 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);
这将使我的模板文件作为单个非常长的文件与插入DB内容的一些地方交替。谷歌的主页来源或多或少看起来像我得到的所以我不知道他们是否遵循类似的方法。 问题1:你是否解决了潜在的问题? 问题2:无论如何更好(做到这一点效率更高)? 请记住,我不是要验证HTML,因为模板不是有效的HTML(例如,页眉和页脚都包括在内)。 编辑:请考虑在部署时最小化模板文件。当使用YUI Compressure和Closure最小化和压缩CSS和Javascript文件时,模板文件将在部署时尽可能地最小化。不是客户要求。 谢谢。     
已邀请:
默认情况下,Google自己的Closure模板(Soy)会在行尾添加空格,模板设计器会使用
{sp}
显式插入空格。这可能不足以让我们远离PHP,但我只是想引起你的注意。 此外,请注意HTML 4允许您按照Page Speed文档中关于缩小HTML(http://code.google.com/p/page-speed/wiki/MinifyHtml)的建议排除某些标记。您可以排除
</p>
</td>
</tr>
等。有关可以省略结束标记的元素的完整列表,请在HTML 4 DTD中搜索“
- O
”(http://www.w3.org/TR/REC -html40 / SGML / dtd.html)。您甚至可以完全省略
<html>
<head>
<body>
<tbody>
标签,因为开始和结束标签都是可选的(DTD中的“
O O
”)。 您还可以省略属性(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这样的大公司之外,我的猜测是页面大小是延迟的一个微不足道的组成部分,所以如果你正在优化你自己的网站,那可能是因为你自己的强迫倾向而不是表现。     
白色空间可能很重要(例如,在
pre
元素中)。 当我有一个特别大的页面(即大到足以使缩小HTML的好处)时,我使用了HTML Tidy并缓存了结果。
tidy -c -n -omit -ashtml -utf8 --doctype strict 
    --drop-proprietary-attributes yes --output-bom no 
    --wrap 0
    
我认为使用这种方法最终会遇到加载时间的问题,因为获取内容,条带空白和preg替换调用比缩小的HTML节省你的任何带宽要花费更长的时间。     
我已经在我的所有网站上运行了几周的测试,我可以说这种方法非常一致。它只会影响模板内容,所以几乎没有可能搞乱未知的
<pre>
或类似内容。 它在部署之前运行,因此对服务器没有影响 - 实际上,随着文件变小,应该加快一点速度。 请记住,来自数据库的所有内容都不会受到任何影响,就像之前所说的那样,它只在部署之前运行,而在模板文件上运行。 该方法足够牢固,可以将其传递到生产中。 如果出现任何问题,我会在这里发布。     

要回复问题请先登录注册