akademic.name

  • Учёба
  • Переход на php7.0 c php5.6

    Больше года не писал в блог, а тема всё та же - переход на очередную версию php. 15 октября вышел пятый релиз-кандидать седьмой версии php. Новые версии появляются по графику и если ничего экстраординарного не произойдёт, то 12 ноября будет полноценный релиз. Настало время проверить какие проблемы ждут нас при переходе и потестировать производительность. К тому же удачно вышла версия шаблонизатора Blitz с поддержкой php7. Без него тестирование бы не получилось.

    Исходные данные

    В предыдущем посте я рассказывал о контейнере для тестов. С тех пор количество тестов сильно подросло, увеличилось и время тестирования. Теперь все тесты проходят за 10 минут. Но контейнер надо пересобрать.

    На этот раз задача посложнее: 1. В пакете для php7 с dotdeb.org другие пути для конфигов. 2. Не хватает некоторых расширений, которые надо скомпилить из исходников. 3. Поддержка функций mysql_ окончательно прекращена и надо будет переписать адаптер для БД. 4. Так же в php7 удалили множество устаревших функций, так что возможно придётся что-то переписывать в проекте.

    Какие проблемы возникли

    Удивительно, но факт - очень мало чего пришлось переделывать: 1. Переписал адаптер для mysql на использование расшерения mysqli. 2. Заменил несколько вызовов split на preg_split. 3. Заменил кучу вызовов mysql_real_escape_string на аналог из mysqli. 4. Убрал пару забытых со времён перехода с php4 амперсандов.

    Вот и все изменения, которые потребовались для запуска на php7

    Результат тестирования

    Итак, теперь тесты могут пройти без провалов.

    1. Время работы тестов составило 7.5 минут (против 10и на php5.6)
    2. Также автоматически прошли тесты в контейнере с php5.6. Время их выполнения также уменьшилось до 8.5 минут. Что показывает, что переход на mysqli также даёт прирост производительности.

    Выводы

    1. Переход с php5 на php7 безболезненная процедура (особенно если код изначально писался для php5 и в нём нет устаревшего кода из времён php4).
    2. В связи с первым пунктом: переход на php7 - халявное увеличение скорости работы кода.
    Переход на php5.6 c php5.4