有没有办法降低htmlspecialchars()函数的CPU使用率?

6
我有一个使用 php 5.4/mysql 技术建立的网站,每天有 500 万次点击量,运行在一台配备 nginxphp-fpm 的 Linux 服务器上。数据库位于另一台服务器上。
我发现,在高峰时期,我的网站负载会升至 15,而不是四核处理器正常的 4。我已经用 xdebugxhprof 对我的 PHP 应用程序进行了分析,发现我使用的 Twig 模板中的 htmlspecialchars() 函数占据了 90% 的 CPU 工作。每个页面有时会出现从 100 到 1000 次 htmlspecialchars() 调用。我已经尝试减少不必要的转义,但仍然无法避免。
有没有办法减少 htmlspecialchars() 函数的 CPU 使用率?也许 PHP 中有某种缓存策略可以使用?或者还有其他方法吗?

1
如果你需要转义这么多数据,或许将其存储为已经转义的形式会更好? - Artjom Kurapov
@Artjom Kurapov,大部分数据都是由用户添加的。为了让他们编辑它,我必须对其进行反转义,然后再次进行转义,这将非常麻烦。这只是其中之一... - Silver Light
如果你的 CPU 不够用但存储空间充足,你可以同时存储转义和未转义的内容。更新时只需转义一次,每当用户想要编辑时,使用原始内容即可。这是我在使用 Markdown 时采用的方法,效果很不错。 - Maerlyn
1个回答

1
不要使用Twig。只需使用带有以下代码的php文件:
<?php
// Load a php-file and use it as a template
function template($tpl_file, $vars=array()) {
    $dir='/usr/local/app/view/'.$tpl_file.'.php';
    if(file_exists($dir)){
        // Make variables from the array easily accessible in the view
        extract($vars);
        // Start collecting output in a buffer
        ob_start();
        require($dir);
        // Get the contents of the buffer
        $applied_template = ob_get_contents();
        // Flush the buffer
        ob_end_clean();
        return $applied_template;
    }
}

条件语句?循环语句? - Silver Light
请使用PHP内联标签制作它们。 - Gustav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接