我尝试了一个性能检查工具“DOM Monster”来分析我的php网站。有一个信息表明“50%的节点只是空白文本节点”。 好吧我解决了这个问题但是在php中清除空格的最快方法是什么?
我认为一个好的开始是使用像ob_start()这样的“输出控制”,然后在用ob_end_flush()释放之前替换空格。在那一刻,我用回声回声做所有事情...我从来没有读过很多关于这个事情的事情*事情是否有用?
我想使用preg_replace()是这项工作的性能杀手还是? 那么最佳做法是什么?
答案 0 :(得分:3)
删除仅空白节点的最快方法是首先不创建它们。只需删除每个HTML标记之前和之后的所有空格。
你肯定可以在事后使用输出处理程序删除代码中的空格(查看ob_start中的callback
位),但如果你的目标是性能那种失败的目的。
浏览器在读取HTML时解析的DOM树中只有一个空白节点。这是一个HTML标签,然后只有空格,然后是另一个HTML标签。这是浪费浏览器资源,但并不是一件大事。
答案 1 :(得分:0)
函数trim()将解决您的问题,不是吗?
答案 2 :(得分:0)
preg_replace当然会让事情慢下来。但无论如何,这可能是最快的方式。问题更多的是preg_replace可能不可靠,因为编写适用于所有可能情况的正则表达式非常困难。 如果您正在创建XML / XHTML输出,您可以使用快速流解析器SAX或StAX解析所有数据,php通常都内置,然后将数据写回输出而不使用空格。这是简单,有效,可靠,至少中速。它仍然不会以速度打击你。
另一种选择是使用gzip。 (ob_handler('gz_handler')是php中的调用,如果我没记错的话)。这将压缩您的数据和压缩工作非常好地解决在文档中重复很多的数据问题。这也带来了轻微的性能损失,但输出文档的缩小可能会弥补它。 虽然要注意在所有输出都可用之前输出不会发送到浏览器。这使得部分加载网页变得更加困难; - )。
答案 3 :(得分:0)
使用ob_ *然后修剪空格的问题是你必须确保不删除显示的空格,如<pre>
标签或<textarea>
等。你需要一个语法解析器,它理解它不应该修剪的位置。
使用(性能)昂贵的解析器,您还应该尽可能缓存输出。
答案 4 :(得分:-1)
嗯,我想你在谈论HTML,HTML就像是一个充满空白(属性,文本)的元语言。 顺便说一句,你可能会使用换行符来提高可读性。
我建议您使用deflate / gzip和webserver规则压缩页面,即.htaccess规则:
<FilesMatch "\\.(js|css|html|htm|php|xml)$">
SetOutputFilter DEFLATE
</FilesMatch>
您还可以查看Tidy这是一个帮助您检查和清理HTML代码的库。
答案 5 :(得分:-3)
以下是删除所有空格字符但代码空间序列中的第一个的代码。因此将保留1个空间,将3个空间修剪为1,等等。
在你的php文件顶部做
ob_start();
最后做
function StripExtraSpace($s)
{
$newstr = "";
for($i = 0; $i < strlen($s); $i++)
{
$newstr = $newstr . substr($s, $i, 1);
if(substr($s, $i, 1) == ' ')
while(substr($s, $i + 1, 1) == ' ')
$i++;
}
return $newstr;
}
$content = ob_get_clean();
echo StripExtraSpace($content);