2013-04-17 3 views
6

У меня есть сайт php 5.4/mysql с 5 миллионами обращений в день, работающий на сервере linux с nginx и php-fpm. База данных находится на отдельном сервере.Любой способ уменьшить htmlspecialchars() Использование ЦП?

Я заметил, что в пиковые времена загрузка моего веб-сервера достигает 15, вместо обычного 4 для четырехъядерного процессора. Я профилировал свое приложение php с помощью xdebug и xhprof и увидел, что 90% работы с процессором выполняется htmlspecialchars() Функция в шаблонах Twig, которые я использую для отображения данных. Иногда от 100 до 1000 htmlspecialchars() звонков на страницу. Я пытался уменьшить ненужное побег, но этого избежать нельзя.

Есть ли способ уменьшить использование ЦП на htmlspecialchars() функции? Может быть, есть какое-то кэширование в php для этого? Или есть другой путь?

+1

Если вы избежите так много данных, возможно, его лучше сохранить его уже сбежал? –

+0

@Artjom Kurapov, Большая часть данных добавлена ​​пользователями. Чтобы позволить им редактировать его, я должен был бы отменить его, а затем убежать от него снова, что было бы настоящей болью. Это только один из случаев ... –

+0

Если вы отстаете на процессоре, но не на месте хранения, вы можете сохранить его как сбежавшим, так и без него. Побег один раз, когда он обновляется, и всякий раз, когда пользователь хочет редактировать, используйте оригинальный. Это то, что я использовал с уценкой, и я был доволен результатами. – Maerlyn

ответ

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; 
    } 
} 
+0

Условные заявления? Loops? –

+0

Сделайте их с помощью PHP-встроенных тегов – Gustav

Смежные вопросы