Сравнение производительности PHP5, Windows и Linux - PullRequest
8 голосов
/ 12 октября 2011

У меня вопрос по производительности Symfony2.

Я работаю с Symfony2 под Ubuntu 11.04 уже несколько недель, Apache 2.2.17, PHP 5.3.5, APC 3.1.9, без xDebug

В среде разработчиков время, указанное на панели инструментов Symfony2, никогда не превышало 70 мс.

Сегодня я попытался установить свое приложение в среде Windows 7: Wampserver 2.2, PHP 5.3.8, Apache 2.2.21, APC 3.1.7, без xDebug

Компьютер в среде Windows намного лучше, чем компьютер в Ubuntu (SSD, Quad Core и т. Д.).

И когда я запускаю приложение в среде разработчика, панель инструментов всегда показывает минимум 300 мс.

Итак, вы знаете, как это возможно?

Спасибо!

РЕДАКТИРОВАТЬ: нашел ссылку на тему: http://fossplanet.com/f6/%5Bsymfony-users%5D-symfony2-slow-windows-xp-116465/

Я также заметил проблему с функцией file_exists (используя webgrind).

Итак, есть идеи?

Может быть, тема уже обсуждалась, но я был удивлен, что не нашел ничего связанного.

Ответы [ 4 ]

12 голосов
/ 14 октября 2011

TL; DR; Установите для realpath_cache_size значение> 1000

Редактировать 2: Проблема, решенная в этом PR: Попробуйте установить значение realpath_cache_size в PHP.ini> 1000 Недавно для исправления этой проблемы было добавлено требование Symfony: https://github.com/sensiolabs/SensioDistributionBundle/commit/cf0179711b24d84d4a29d71a4010540f4c990bd8

Редактировать: Я только что видел этот ответ: https://stackoverflow.com/a/17914570/980547 И это уменьшило время генерации страниц на 4 в Windows, когда я установил realpath_cache_size = 4096k в моем php.ini (!)

Старый ответ:

Итак, я сделал сравнение между обоими с webgrind:

В Windows (быстрый компьютер), называемый app_dev.php:

Web toolbar

Итак, вы можете видеть, что веб-панель инструментов показывает время генерации 764 мс (увеличено из-за xDebug и профилирования, но все еще актуально). Вебгринд показывает:

  • 651 вызовы file_exists () в течение 232 мс (это много!)
  • 603 вызовов функции filemtime () (211 мс)
  • 230 вызовов UniversalClassLoader-> loadClass () (119 мс)
  • 230 вызовов UniversalClassLoader-> findFile () (38мс)

В linux (медленный компьютер) app_dev.php:

Web toolbar

298 мс общего времени генерации (что более чем в два раза меньше, чем в Windows).

  • 237 вызовов UniversalClassLoader-> findFile () (36 мс => в 4 раза меньше)
  • 237 вызовов UniversalClassLoader-> loadClass () (20 мс => в 2 раза меньше)
  • 623 вызовов функции file_exists () (только 4 мс !!!)
  • 605 обращений к filemtime () (только 4 мс !!!)

Кажется, проблема в file_exists () и filemtime (), которые в Windows намного медленнее, чем в Linux. В Windows PHP ищет файлы с file_exists, filemtime, loadClass или findFile в течение 60% времени. Это известная проблема?

Редактировать: так что проблема только для среды разработки, в производстве не выполняется file_exists, так как все кэшируется.

6 голосов
/ 28 февраля 2012

Я только начал разрабатывать с Symfony2 под Windows, и это была большая проблема в заднице - я тестировал xcache, apc и eaccelerator, которые либо почти не имели значения, либо просто зависали при использовании вместе с xdebug.

Теперь я обнаружил WinCache от Microsoft - что сделало Symfony2 под Windows невероятно быстрым ... Мои запросы занимали от 1,5 с до 3 с - с WinCache до 200 мс . И это даже не беспокоит xdebug - профилирование и отладка по-прежнему работают как шарм.
Изменить: Это все о среде разработки.

Единственным недостатком является то, что он работает только на nts php, и я думаю, что для модулей apache требуется ts - если вы запустите его с помощью fcgid, у вас не возникнет проблем.

Не могу поверить, что я работал так много лет без этого монстра ...

Ссылки:
WinCache на php.net
Официальный сайт WinCache
Двоичные

2 голосов
/ 12 октября 2011

Интересное найдено!

Я бы сказал, поскольку это вообще не проблема symfony2, она должна быть исправлена ​​в бинарном PHP ..

Но кто вообще запускает свой веб-сервер на Windows? : D

1 голос
/ 18 октября 2011

Попробуйте с ApcUniversalClassLoader http://symfony.com/doc/2.0/book/performance.html

...