Drupal 7 VS Drupal 8 производительность. Бонус: render_boost модуль

Главные вкладки

Аватар пользователя gor gor 9 февраля 2016 в 5:09
6

Для начала начну с того, что после вот этого поста:
http://alexrayu.com/blog/drupal-739-vs-drupal-8-rc1-performance

Я был очень удивлен комментариям, процитирую:

Wim Leers wrote:

You conveniently fail to mention two things in the blog post:

1. You compare Drupal 8's out-of-the-box performance with a tweaked Drupal 7: you enabled the page cache.
2. Drupal 7's page cache is inferior: a) no instantaneous updates; b) any node or comment posted causes the entire page cache to be cleared (!); c) many user actions that cause the page to change do not invalidate the page cache, so stale content continues to be sent.

In other words, Drupal 7's page cache:
- shows stale content, hence the site appears broken to the site owner
- is cleared in its entirety and thus far less effective

Hence this is an apples-to-oranges comparison.

A Drupal 8 site with the Page Cache enabled is functionally equivalent to a Drupal 7 site with Page Cache disabled. Make that comparison instead, and the chart will look vastly different.

Wim Leers wrote:

Claiming every tutorial recommends this does not make this comparison correct. Only bad articles say "Enable page cache.", good articles say "Enable page cache, but know that it comes with disadvantages X, Y and Z." — i.e. they provide the necessary nuance.

If you simply refuse to compare things correctly or even call out the necessary nuances, fine, then there is nothing else I can say.

Если коротко, то вы не то и не так сравниваете. Очень много слов что сравнивать работу кеша Drupal 7 и кеша Drupal 8 не верно, так как они предоставляют разные данные.

Окей. Давайте сделаем "правильно":
- установил Drupal 7.
- набил в него контента через devel generate
- мигрировал это все дело на drupal 8
- параметры хостинга: CPU E5-1650 v3 @ 3.50GHz, php_memory_limit = 512M, HW SSD RAID 5, Innodb database. xcache opcode. php-5.6

В итоге получилось 2 такие вот страницы:
http://drupal7.drupal-site.net/node/199
http://drupal8.drupal-site.net/node/199

Если вы посмотрите исходник HTML в самом конце вы увидите данные которые я буду приводить ниже.
Эти данные генерируются на уровне php, специально разработанным модулем php.

Тест 1. Cтраница материала 199 под авторизированым пользователем.
Drupal 7 сайт с отключеным кешированием. , авторизация под админом
Drupal 8 c включенным кешированием, авторизация под обычным пользователем

Drupal 7

        queries total:                  222
                select:                 221
                insert:                 0
                update:                 1
                other:                  0
        memory peak:                    5.25 Mb

        execution time :                130.570 ms
        queries time :                  7.706 ms
        utime:                          120.981 ms
        stime:                          6.000 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  18.943 ms
        profiler_time_before call:      14.068 ms
        profiler_time_after call:       4.875 ms

Drupal8

Summary:
        queries total:                  125
                select:                 125
                insert:                 0
                update:                 0
                other:                  0
        memory peak:                    16.75 Mb

        execution time :                152.216 ms
        queries time :                  1.403 ms
        utime:                          141.978 ms
        stime:                          7.999 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  18.522 ms
        profiler_time_before call:      14.900 ms
        profiler_time_after call:       3.621 ms

Итог: Drupal 8 150ms и Drupal 7 130ms
Напоминаю у Drupal 7 отключен кеш для "честного сравнения".

Теперь все тоже, но под анонимным пользователем.

Тест 2. эта страница под анонимным пользователем.
Drupal 7 сайт с отключеным кешированием.
Drupal 8 c включенным кешированием

Drupal 7

        queries total:                  181
                select:                 181
                insert:                 0
                update:                 0
                other:                  0
        memory peak:                    4.50 Mb

        execution time :                110.098 ms
        queries time :                  5.157 ms
        utime:                          99.985 ms
        stime:                          7.998 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  17.804 ms
        profiler_time_before call:      12.630 ms
        profiler_time_after call:       5.174 ms

Drupal 8

        queries total:                  3
                select:                 3
                insert:                 0
                update:                 0
                other:                  0
        memory peak:                    2.75 Mb

        execution time :                12.615 ms
        queries time :                  0.034 ms
        utime:                          9.999 ms
        stime:                          2.000 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  0.506 ms
        profiler_time_before call:      0.417 ms
        profiler_time_after call:       0.089 ms

Но при этом контент появился не сразу... и после разбирательств я нашел запрос на
http://drupal8.drupal-site.net/history/199/read

        queries total:                  23
                select:                 22
                insert:                 0
                update:                 1
                other:                  0
        memory peak:                    7.00 Mb

        execution time :                33.361 ms
        queries time :                  0.212 ms
        utime:                          24.996 ms
        stime:                          8.999 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  2.847 ms
        profiler_time_before call:      2.277 ms
        profiler_time_after call:       0.571 ms

Итог: Drupal 8 12+33 = 45ms и Drupal 7 110ms
Напоминаю у Drupal 7 отключен кеш для "честного сравнения".

А теперь попробуем небольшой модуль render_boost
По сути это кеш рендеринга. А значит данные актуальные при отображении.

Доступно для теста тут: http://rb.drupal7.drupal-site.net/node/199

Тест 1. Авторизированный.

        queries total:                  183
                select:                 182
                insert:                 0
                update:                 1
                other:                  0
        memory peak:                    5.00 Mb

        execution time :                61.199 ms
        queries time :                  8.722 ms
        utime:                          53.992 ms
        stime:                          1.999 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  7.444 ms
        profiler_time_before call:      4.981 ms
        profiler_time_after call:       2.463 ms

Тест 2. Анонимный

        queries total:                  141
                select:                 140
                insert:                 1
                update:                 0
                other:                  0
        memory peak:                    4.50 Mb

        execution time :                52.414 ms
        queries time :                  5.385 ms
        utime:                          47.993 ms
        stime:                          2.000 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  6.931 ms
        profiler_time_before call:      4.675 ms
        profiler_time_after call:       2.256 ms

Итого сделаем табличку результата:

Инсталляция                  тест 1 (авторизированый)     тест 2 (аноним)
Drupal 7 no cache               130ms                   110ms
Drupal8 cache enabled           150ms                   45ms
Drupal 7 + render boost         60ms                    52ms

Комментарии к цифрам теста: Я делал по несколько запросов, чтоб дать возможность разогреться opcode cache, drupal cache и render_boost кешу и выбирал лучшую цифру из нескольких запросов. Суть теста показать возможности системы кеширования Drupal 7, Drupal 8 и Drupal 7 + render_boost в приблизительных цифрах

Комментарии

Аватар пользователя Studio VIZA Studio VIZA 9 февраля 2016 в 8:06

Для полной картины любопытны результаты теста, для Drupal 7 cache enabled.
Модуль render boost очень полезен для высоко-нагруженных проектов. Не будет ли явной финансовой оплошностью ставить его на новый проект?
Много ли диска он сожрёт, приблизительно?

Аватар пользователя gor gor 9 февраля 2016 в 13:36

Разумный вопрос. Действительно - если на сайте посещаемость минимальная, бонуса не будет постоянным истечением времени жизни Кеша.
Особого теста сравнения на объем диска не делал. Будут результаты - кину или сюда или на страницу модуля.

Аватар пользователя mbaev mbaev 9 февраля 2016 в 8:14

Мне не понятно почему сравнивается d7 без кэша, а d8 с кэшем. На первый взгляд это сделано для того, чтобы хоть как то выровнять показатели )

Аватар пользователя Studio VIZA Studio VIZA 9 февраля 2016 в 8:16

mbaev wrote:

На первый взгляд это сделано для того, чтобы хоть как то выровнять показатели )

Да, как фора в шахматах ) Семёрка монолит, позиций не сдаст.

Аватар пользователя gorr gorr 9 февраля 2016 в 10:20
1

gor wrote:

Суть теста показать возможности системы кеширования Drupal 7, Drupal 8 и Drupal 7 + render_boost в приблизительных цифрах

Спасибо за тесты, очень интересно!
mbaev wrote:

Мне не понятно почему сравнивается d7 без кэша, а d8 с кэшем.

Кеширование по дефолту в D7 и D8 работают по разному.
D7 - на какое-то время кешируется все содержание страницы, пользователи не получают обновленную страницу при ее изменении в этот период времени.
D8 - позволяет часть содержимого вывода кешированной страницы отдавать с более часто обновляемым кешем или совсем не кешировать. ( http://wimleers.com/article/drupal-8-dynamic-page-cache )
gor wrote:

А теперь попробуем небольшой модуль render_boost
По сути это кеш рендеринга. А значит данные актуальные при отображении

Интересно, не очень понял как этот модуль работает. Можно подробнее рассказать? На любой D7 сайт ставится?

Аватар пользователя g78knl6cvxf0 g78knl6cvxf0 9 февраля 2016 в 11:43
1

@gor, большое спасибо, всегда интересно посмотреть сравнения!

Слышал, что друпал 8 здорово подтянулся в производительности, но чтобы на столько приблизится к 7-ке?!

gorr wrote:

D8 - позволяет часть содержимого вывода кешированной страницы отдавать с более часто обновляемым кешем или совсем не кешировать

В точку! Если перевести комментарии Лирса чуть длиннее, то получится:

Чуваки, как можно сравнивать яблоки с апельсинами? Добавьте драйва на ваши монолитные страницы под ламинатом, и результат не заставит себя ждать Smile

Аватар пользователя dropout dropout 9 февраля 2016 в 16:40

семерка без кеша в сущности получается быстрее восьмерки с кешем
но восьмерку php7 спасает, но и семерку сделают совместимой с php7

Аватар пользователя gor gor 9 февраля 2016 в 17:16

У друпал 7 контриба будут проблемы с php7.
Да и вполне могут принять решение:
'не адаптировать Drupal 7 под php7'

Что б лучше смотрелась 8ка.
К слову backdrop CMS (та что форк от Drupal 7) уже совместима с php7

Аватар пользователя gor gor 9 февраля 2016 в 11:57
1

gorr wrote:

Интересно, не очень понял как этот модуль работает. Можно подробнее рассказать? На любой D7 сайт ставится?

Да, можно ставить на любой Drupal 7.
Самый большой выигрыш на страницах с большим рендерингом: страница перечня нод или страница ноды с комментариями.
Суть работы такая. Вызывается

Render($content)

Модуль кеширует результат работы этой функции по md5 $content .
В итоге в базе данных набор кешей которые могут быть использованы на разных страницах разными пользователями.

Аватар пользователя gor gor 9 февраля 2016 в 12:05

vaplas wrote:

Слышал, что друпал 8 здорово подтянулся в производительности, но чтобы на столько приблизится к 7-ке?!

Если мне прийдет в голову как собирать кеш вообще всей страницы для анонима, то разница будет опять существенна.

при этом есть интересный момент: пока что никто не делал сравнение потери на разогрев кеша.
Думаю многим знакома проблема, когда сайт банально тупит после сброса Кеша минут 5 .
Что будет с d8 еще не понятно.

Аватар пользователя Владимир Ситников Владимир Ситников 8 апреля 2016 в 4:02

Попытался поставить себе модуль https://www.drupal.org/project/render_cache
Особых результатов не заметил, как настраивать не понял, при этом он у меня не работал с контекстом, снес модуль.
Поставил модуль от gor с этой страницы https://www.drupal.org/node/2665640 https://github.com/itpatrol/render_boost/ Тоже ничего не увидел, включая настройки Sad Правда хостинг от it patrol и так быстрый, может поэтому никакой визуальной разницы не понял!?
Приходит письмо от gor (gor@me.com через krypton2.vps-private.net ) с текстом:
Thank you for registering at Render cache. Your application for an account is
currently pending approval. Once it has been approved, you will receive
another e-mail containing information about how to log in, set your password,
and other details.

-- Render cache team
Это письмо какого модуля касается? Кэша или буста?
Там что, какие-то настройки будут? Или он у меня и не работал?
Эти модули взаимозамяемые? Или как? Хотел что-бы в https://www.drupal.org/project/render_cache big pipe как в Drupal 8 ( https://www.drupal.org/project/big_pipe ) заработало, сильно меня их демонстрация удивила.. Вроде там есть render_cache_big_pipe
Заранее спасибо за ответы, я только любитель, знаний и умений катастрофически не хватает..

Аватар пользователя gor gor 23 апреля 2016 в 21:29

Владимир, очень странное сообщение.

Я банально теряюсь в мыслях откуда и почему.
выглядит как текст при регистрации аккаунта.

Но при чем тут мой имейл?

Далее - https://www.drupal.org/project/render_cache это не мой модуль и ничего общего не имеет.

Что б модуль заработал - надо сделать патч на ядро (команды тут: https://github.com/itpatrol/render_boost/blob/master/README.md)

и еще потом зайти в настройки на странице настройки производительностей в админке, секция Render boost

Аватар пользователя Владимир Ситников Владимир Ситников 24 апреля 2016 в 5:31

Спасибо за комментарий, я попросил ребят с вашего хостинга, они пропатчили ядро и модуль Render boost заработал на сайте http://s09.ru . Все работает замечательно, даже визуально заметно увеличение скорости открытия страницы, но есть маленькая проблемка, не админам (анонимам и т.д.) показывается контекстное меню у блоков на страницах. Т.е. при наведение на любой блок появляется рамочка меню. При нажатие на него пишет что нет прав менять, т.е. почему-то закешировался именно вывод css контекстного меню для всех ролей!?
Пришлось отключить модуль контекст, нельзя ли это поправить?

Аватар пользователя Mihail.space Mihail.space 25 апреля 2016 в 0:22

вы реалиу поставили? она сама по-себе тема не фонтан, перегружена имхо и затачивалась разработчиками темы под риэлторов.

Аватар пользователя gor gor 25 апреля 2016 в 14:38

Спасибо, надо будет глянуть что за конфликт с этим модулем.

Кстати сам модуль контекст всё же рекомендую не использовать всё равно - он создает заметную нагрузку . Если верно помню, они контекстные елементы проверяют через проверку элементов пути.

Аватар пользователя Владимир Ситников Владимир Ситников 25 апреля 2016 в 15:05

Прошу прощения, модуль контекст у меня тоже стоит, но проблема была не с ним, после включения вашего модуля показывались контекстные ссылки блоков, т.е. те что зависят от ядерного модуля "Contextual links". Именно его пришлось отключить..

Аватар пользователя Владимир Ситников Владимир Ситников 25 апреля 2016 в 15:39
1

Проблема решилась использованием опции "Use Context Editor Dialog " в модуле контекст.
Теперь и кэширование работает, и контекстные ссылки тоже. И у анонимов все в порядке.