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:
Итак, вы можете видеть, что веб-панель инструментов показывает время генерации 764 мс (увеличено из-за xDebug и профилирования, но все еще актуально).
Вебгринд показывает:
- 651 вызовы file_exists () в течение 232 мс (это много!)
- 603 вызовов функции filemtime () (211 мс)
- 230 вызовов UniversalClassLoader-> loadClass () (119 мс)
- 230 вызовов UniversalClassLoader-> findFile () (38мс)
В linux (медленный компьютер) app_dev.php:
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, так как все кэшируется.