Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Задание №5
Шаг 1. Настроить сертификат для локального HTTPS
Получение сертификата с использованием
mkcert:Шаг 2. Настраиваем NGINX
Установить
NGINX.Конфигурируем
NGINX:Такой конфиг получился у меня:
Тут я добавила сразу директиву
gzip_static on;, чтобы статические ассеты отдавались в сжатом виде. Ограничиваем директиву только для папокassetsиpacks(webpacker'а)В задании 3 я сделала компиляцию ассетов во время запуска приложения в режиме
local_production:при этом происходит их сжатие, поэтому они уже есть у нас в
*.gz.Запускам
NGINX:Внесем изменения в Procfile, который используется для запуска приложения в
local_production– пуму биндим на unix сокет:Теперь запускаем проект в окружении
local_production:На этом шаге браузер успешно открывает
https://devto.xyz:Шаг 3. Настроить HTTP/2 и server-push
Дополняем конфиг
NGinxподдержкойHTTP/2иserver-push.Шаг 4. Поэкспериментировать с HTTP/2 server-push
На главном экране
dev.toесть ряд картинок.Картинки из меню:
connect.svg,bell.svg,menu.svg– заинлайнены.Картинки
stack.svgиlightning.svg– нет.При перезагрузке страницы видно, что заинлайненные картинки редерятся сразу же вместе с загрузкой html, в то время как скачивание изображений
stack.svgиlightning.svgначинается только после полной загрузки html.Плюс инлайновых картинок в том, что иконки становятся видны пользователю сразу же при загрузке документа, не нужно ждать, чтобы начать пользоваться меню.
Минус – их размер несколько увеличивает размер документа. В данном случае это условный минус, потому что разница около килобайта кажется несущественной. Большие svg'хи, которые нужны как элементы декора, я бы инлайнить не стала. В данном случае уместно.
Теперь попробуем ради эксперимента отказаться от inline svg и добавить для картинок
server-push.Изменения см. здесь: foxy-eyed/task-3#1
Поскольку ассеты, которые мы будем пушить, используются в сквозном
partial'е шаблона, добавление соответствующих заголовков вынесла на уровеньApplicationController(для скорости добавила хук прямо там же, хотя, наверно, это не по фен-шую).Проверка, что всё работает:
Выводы про картинки и server-push
К сожалению, бОльшая часть подгружаемых изображений не являются частью layout, но пользовательскими загрузками (в основном аватарки). Server-push картинок при таком раскладе кажется не очень хорошей идеей. Можно пушить маленькие иконки, которые являются частью layout и критически важны для доступности функций (например, иконки меню). Но, увы, в плане скорости загрузки тут эффект не особо значительный. Аватарки отдаются с CDN и неплохо оптимизированы (если судить по отчету WPT на проде), так что и тут, насколько возможно, все ок.
Самые большие изображения на странице: sloan.png, который показывается в модальном окне регистрации и картинка из заглавного поста.
Вот с первой картинкой можно и нужно что-то сделать – разрешение 3K×4K и вес 8 с лишним Mb явно излишние, учитывая то, как эта картинка используется:
На моем ноутбуке итоговый размер картинки получается 116×166 пикселей. Если взять с запасом на большой монитор, все равно можно смело сократить размер изображения раз в 10!
Вообще (!) не обязательно грузить модалку для signup вместе со страницей. Можно запрашивать ее асинхронно при клике на соотв. кнопку. Это кажется разумным со всех сторон: если я просто читатель и прямо сейчас не собираюсь писать свой первый пост (думаю, таких процентов 99 🙃), мне не нужен этот контент сразу на странице. Если я созрел для регистрации – подожду.
Со вторым большим изображением сложнее, поскольку это user generated content.Например, на момент проведения теста с помощью WebPageTest в заглавном посте была гифка весом 1499.3KB 😭
Тут надо рассмотреть вопрос более широко. Возможно, стоит изменить дизайн (избавиться от большой графической плашки у первого поста) или ввести более жесткие ограничения на размер загружаемых пользователями файлов.
Эксперимент с другими ассетами и server-push
Я попробовала пушить стили и скрипты, которые на всех страницах используются. Думаю, тут есть потенциал, но нужно более аккуратно посмотреть, на каких страницах какие файлы стилей и скриптов нужны, и пушить их избирательно на уровне конкретного экшена. Кроме того, я заметила, что в шаблоне страницы используются инлайновые стили. Можно так же, как мы делали с
svg, вынести их в файлы и пушить клиенту по мере надобности. Таким образом можно немного сократить время загрузки документа до момента доступности текстового контента для пользователя.Шаг 5. Аудит dev.to
Аудит проведен: http://webpagetest.org/result/190421_6J_00032840f0396c362e0e897ea7c22790/
Если посмотреть на график
Content breakdown, видно, что более 80% занимает графика.Радует, что в
productionкартинка с ленивцем все-таки имеет меньший размер 🙈. Но по остальным пунктам выводы, сделанные наlocal production, актуальны: ограничить объём UGC или подумать о смене дизайна, использовать server-push для небольших и важных изображений в layout, добавить push скриптов и стилей.Из точек роста, на которые стоит обратить внимание – низкий показатель
caching of static assets(32/100).