PHP模板非常慢

时间:2013-10-30 12:54:55

标签: php mysql regex system templating

我有自己的简单模板系统,它基于正则表达式。 Here it is

它的设计方式我可以从mysql结果传递数组,它将从定义的模板文件中返回html代码。

所以如果我传递数组

array(3) { 
[0]=> array(5) {["DATE"]=> string(11) "21.04. 2013" ["NICK"]=> string(7) "Nashren"} 
[1]=> array(5) {["DATE"]=> string(11) "22.10. 2013" ["NICK"]=> string(13) "Superman"} 
[2]=> array(5) {["DATE"]=> string(11) "10.07. 2013" ["NICK"]=> string(13) "Superman"}

并有模板

<td class="forum-last"> <strong>{{DATE}}</strong> <br> {{NICK}} </td>

它将按预期返回

<td class="forum-last"> <strong>21.04. 2013</strong> <br> Nashren </td>
<td class="forum-last"> <strong>22.10. 2013</strong> <br> Superman </td>
<td class="forum-last"> <strong>10.07. 2013</strong> <br> Superman </td>

BUT!在这个特定的例子中,执行需要花费数年时间(比如5秒左右)。

我想显示的SQL查询是:

SELECT forum_kategorie.NAME,forum_kategorie.DESC,DATE,uzivatele.NICK,USR
FROM `zpravy`
LEFT JOIN forum_kategorie ON CONCAT( NAME,  "forum" ) = URL
LEFT JOIN uzivatele on USR = uzivatele.ID

WHERE DATE = (SELECT MAX(DATE)
               FROM zpravy
               WHERE CONCAT( NAME,  "forum" ) = URL)
GROUP BY NAME

以下是上述脚本的用法。

include("php/themizer.php"); 



    $theme = new Themizer("forum-item",$res);

    $list = array("data" => $theme->getResult());

    $final = new Themizer("forum-table",$list);

     echo $final->getResult();

有什么可能的吗?

3 个答案:

答案 0 :(得分:1)

您在连接中使用的列应编入索引。

forum_kategorie.name, zpravy.date, url

答案 1 :(得分:0)

您是否单独测量了操作(mysql查询和模板处理)?

答案 2 :(得分:0)

使用RegEx(或SearchReplace)功能非常慢。 每个请求都说必须解析模板并且必须完成替换。

这样的构造,有许多缺点,如不可缓存等。

看看smarty.net - 这是一个很好的php模板引擎。 易于使用。

如果您不喜欢使用Smarty,您也可以使用普通的PHP。 它也是一个模板引擎。

只需将HTML放入分离的PHP文件中即可。 您可以使用短标记<?=$var>来填充内容。 诅咒你也可以使用长标签。 此外,您可以使用所有PHP功能,包括循环。 使用带有include命令的子模板。

尽量避免将程序逻辑与显示逻辑混合。