Задать вопрос

Обработка предопределённых констант в PHP

Здравствуйте, хабраколлеги!
Прошу помощи у вас, так как совершенно неясно, как спросить у Гугла, чтобы он выдал внятный ответ.

Есть скрипт, в котором используется предопределённая константа в большом числе итераций (>100000). Такой скрипт работает порядка восьми минут.
Если же константу сначала поместить в переменную и использовать в цикле эту переменную вместо константы, скрипт выполняется за пять секунд.
Есть догадка, почему это происходит, но мне интересно знать реальное положение дел.

Знатоки, расскажите, пожалуйста, почему применение предопределённых констант в цикле так сильно увеличивает время его выполнения?
  • Вопрос задан
  • 10922 просмотра
Подписаться 3 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 4
SkiF_TLT
@SkiF_TLT
<?

for($i=0;$i<1000000;$i++) echo __FILE__;

?>


Результат:

poletaew@poletaew:~$ time php const.php &>/dev/null

real	0m0.170s
user	0m0.076s
sys	0m0.092s


Меняем код по вашему алгоритму:

<?
$file = __FILE__;
for($i=0;$i<1000000;$i++) echo $file;

?>


Результат:

poletaew@poletaew:~$ time php const.php &>/dev/null

real	0m0.173s
user	0m0.092s
sys	0m0.080s


Так что проблема не в обработчике предопределенных констант. Не в ту сторону копаете. Пример вашего кода, конечно, помог бы понять проблему глубже, но как сейчас вопрос описан — такой и ответ на него.
Ответ написан
Комментировать
Sky4eg
@Sky4eg
Web разработчик
Как вариант попробуйте сделать следующее перед выполнением
if (! defined('ENVIRONMENT'))
{
define('ENVIRONMENT', 'production');
}
Ответ написан
Комментировать
Nnear
@Nnear Автор вопроса

Прошу прощения за задержку с ответами: были проблемы с авторизацией на Тостере.

SkiF_TLT, Sky4eg, вы совершенно правы. Тесты показали нам, что проблема заключалась в использовании несуществующей константы T_ML_COMMENT. Она есть в php4, но php5.3 при её вызове генерирует ворнинг. Как раз их генерация и увеличила работу скрипта на порядки.

Спасибо большое за советы! )

Ответ написан
Комментировать
Nnear
@Nnear Автор вопроса
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы