WPML 3.5 включал серьезное изменение в модуле Перевод строк. Когда мы выпустили его, мы узнали о ряде случаев, которые не проявились во время разработки. Последующие обновления решают все проблемы и дополнительно улучшают производительность.
Исправления после выхода WPML 3.5
- Исправлено необработанное исключение в случаях, когда столбец domain_name_context_md5 не существовал в таблице icl_strings
- Исправлена ошибка Fatal error: Uncaught exception ‘InvalidArgumentException’ with message ‘Argument ID must be numeric and greater than 0 при фильтрации постоянных ссылок
- Исправлена критическая ошибка, возникавшая во время обновления: WordPress database error: specified key was too long; max key length is 1000
- Исправлена ошибка Fatal error: Declaration of WPML_Post_Element::get_type() must be compatible with that of WPML_Translation_Element::get_type() для PHP 5.2
- Удален начальный обратный слеш \ во избежание предупреждений в PHP до версии 5.3
Улучшения скорости
Мы внесли несколько изменений в новую таблицу, которая хранит информацию о том, какие строки появляются на какой странице. Эти изменения значительно уменьшают размер таблицы, улучшают производительность и снижают потребление памяти.
- Одна большая таблица с избыточными данными разделена на две небольшие и эффективные таблицы
- Оптимизированы индексы таблиц
- Ограничен возможный рост таблицы для сайтов, использующих аргументы URL, за счет белого списка аргументов, изменяющих выбор страницы
Результаты
Мы провели некоторые измерения производительности нашего собственного сайта во время обновлений версий. Вы можете видеть, как нагрузка снизилась, затем выросла (когда индексы таблиц не были оптимизированы), а теперь вернулась на уровень ниже исходного.




Абсолютные значения на всех этих графиках менее важны, поскольку они были получены в разные дни недели. По пятницам наш трафик гораздо ниже, чем по понедельникам. Чтобы понять изменения, посмотрите на пропорции между сегментами. Вы можете видеть, что изначально доступ к icl_strings занимал примерно столько же времени, сколько извлечение записей (что не есть хорошо). Теперь все обращения WPML к базе данных занимают в среднем 1/3 от запросов записей. Это очень важно, поскольку WPML необходимо загружать множество строк, тогда как WordPress требуется лишь несколько записей.
Улучшенный процесс в следующий раз
Нам пришлось выпустить это обновление до того, как мы смогли провести полные измерения производительности, поскольку оно включало изменения для WordPress 4.6. В будущем мы обязательно отделим улучшения производительности от совместимости с WordPress. Как только новая версия WordPress достигнет статуса «кандидат в релизы», мы выпустим минорный релиз только с изменениями для совместимости. Мы оставим время для внедрения более длительных изменений производительности, не связанных с исправлениями ошибок и обновлениями совместимости, и будем выпускать их только тогда, когда будем полностью довольны результатами.
Следующий релиз WPML по-прежнему будет посвящен стабильности и производительности. 99% сайтов, использующих WPML, сейчас работают бесперебойно, но есть несколько сайтов, использующих «уникальные» конфигурации веб-сервера, PHP или базы данных. Мы планируем решить эти проблемы в предстоящем минорном релизе. Мы также включим еще несколько оптимизаций производительности, которые сделают админ-панель и фронтенд более легкими.
Отзывы?
Если у Вас есть вопросы, идеи и предложения, пожалуйста, оставляйте свои комментарии. Мы очень рады получать Ваши отзывы и делаем все возможное, чтобы предоставить то, что Вам нужно.

