使用框架模版,有一个配置参数是TMPL_STRIP_SPACE,官方的说明是:

'TMPL_STRIP_SPACE' =>; false, // 是否去除模板文件里面的html空格与换行

就是说在渲染tpl的时候能够去除空白,从而就能减少服务器加载php编译后的模版文件的时间,也能使服务器返回给浏览器的document减少.

在源码文件ThinkPHP/Lib/ThinkTemplate/ThinkTemplate.class.php中的compiler函数处,用到了这个配置选项,部分代码如下:

//...
if (C('TMPL_STRIP_SPACE')) {
    /* 去除html空格与换行 */
    $find = array("~>;\s+<~", "~>;(\s+\n|\r)~");
    $replace = array(">;<", ">;");
    $tmplContent = preg_replace($find, $replace, $tmplContent);
}
//...

可以看到框架只是简单的去除了回车和标签之间的空白数据. 而我们想要的是在发布环境一并支持注释掉写在tpl里面的html和js的注释

这里就不多废话了,直接献上正则~

//html标准注释

/<!--[^!]*-->;/i

//类js注释

/\/\*[^*]*\*\//i

最后修改这一个代码片段为:

if (C('TMPL_STRIP_SPACE')) {
/* 去除html空格与换行 */
$find = array("~>;\s+<~", "~>;(\s+\n|\r)~", "/<!--[^!]*-->;/i", '/\/\*[^*]*\*\//i');
$replace = array(">;<", ">;", "", "");
$tmplContent = preg_replace($find, $replace, $tmplContent);
 }

这样在开启这个选项的时候就可以更加的节省渲染的文件大小,加快磁盘读取效率啦~输出的时候也不会给别人看到自己开发时候写的代码流程注释了= =~

经测试,一个200行的模版文件开启之前是13K,开启之后的文件是9K,优化率为:0.7.还是很有用处的~

20120911更新:今天和大大在github讨论了下这个放发,不太可行,因为有可能有需要显示的/**/代码也会被去掉,而html的话有着<!-- [if lt IE9] -->这样的用法,也不能去掉.所以到底起不起用这个方式就还得再讨论了.至少如果对自己的代码注释风格没有统一的话还是最好不要用 以上!

原创文章,转载请说明出处: 原文地址