Skip to content

Commit ffe56d7

Browse files
committed
Update readme
1 parent ee13b05 commit ffe56d7

File tree

1 file changed

+48
-7
lines changed

1 file changed

+48
-7
lines changed

Readme.md

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
# Задание №5
22

33
## Цели задания
4+
45
В этом задании немного попрактикуемся с `HTTP/2` в `Rails`.
56

67
Польза:
8+
79
- научиться настраивать `HTTPS` для локального `Rails`-приложения
810
- научиться настраивать `HTTP/2` `reverse proxy` с поддержкой `server-push`
911
- научиться делать `server-push`, сравнить его с `inlining`
@@ -13,15 +15,18 @@
1315
Работать будем на примере проекта `dev.to` из задания №3.
1416

1517
Ресурсы:
18+
1619
- http://railscasts.com/episodes/357-adding-ssl?view=asciicast - старый, но очень понятный `RailsCast`
1720
- https://github.com/FiloSottile/mkcert - инструмент для настройки локальных сертификатов одной командой
1821
- https://www.nginx.com/blog/nginx-1-13-9-http2-server-push/ - настройка `http2-server-push` в `NGinx`.
1922
- https://github.com/surma/http2-push-detect - утилита для проверки `server-push`
2023

2124
### Шаг 1. Настроить сертификат для локального HTTPS
25+
2226
Можно сделать с использованием `mkcert`
2327

2428
### Шаг 2. Настраиваем NGinx как reverse-proxy
29+
2530
Установить или обновить `NGinx`.
2631

2732
Конфигурируем `NGinx` так, чтобы он принимал `https`-запросы `https://localhost` и ходил в `upstream` на `http://localhost:3000`.
@@ -51,6 +56,7 @@ server {
5156
На этом шаге браузер должен успешно открывать `https://localhost`
5257

5358
### Шаг 3. Настроить HTTP/2 и server-push
59+
5460
Дополняем конфиг `NGinx` поддержкой `HTTP/2` и `server-push`
5561

5662
```
@@ -66,7 +72,9 @@ server {
6672
```
6773

6874
### Шаг 4. Поэксперементировать с HTTP/2 server-push
75+
6976
На главном экране в мобильном виде `dev.to` есть ряд картинок:
77+
7078
- `connect.svg`
7179
- `bell.svg`
7280
- `menu.svg`
@@ -120,33 +128,66 @@ Receiving pushed resource: /assets/lightning.svg
120128

121129
Теперь поэксперементируйте, попробуйте включать и выключать `server-push` для тех или иных картинок и оцените, как это сказывается на их рендеринге.
122130

123-
### Шаг 5. Измерение эффективности сделанных изменений
131+
### Шаг 5. Измерение эффекта сделанных изменений
132+
133+
Сравним вариант с `server-push` и с обычными картинками без инлайнинга и без пуша.
134+
135+
Для этого воспользуемся `sitespeed.io` (подробнее расскажу об этом мощном инструменте в лекции №6)
136+
137+
#### 5.1 Анализ без `server-push`
124138

139+
Выполните анализ версии без `server-push` и без `inline`:
140+
141+
```
142+
docker run --rm -v "$(pwd)":/sitespeed.io sitespeedio/sitespeed.io:9.8.1 --mobile -n 5 --preUrl https://host.docker.internal/ https://host.docker.internal/
143+
144+
# --mobile - мобильный вид
145+
# -n 5 - 5 повторов
146+
# --preUrl https://host.docker.internal/ - урл, первого захода
147+
# https://host.docker.internal/ - урл повтороного захода, который и анализируем
148+
```
149+
150+
Откройте сгенерированный отчёт, зайдите на вкладку `Pages`, там провалитесь в отчёт по единственной странице, и внизу воспользуйтесь кнопкой `DOWNLOAD HAR` - и сохраните `HAR`-файла, закомиттьте его.
151+
152+
#### 5.2. Анализ с `server-push`
153+
154+
Сделайте то же, что в пункте `5.1`, но с версией, где устанавливаются заголовки `server-push`. Сохраните `HAR`-файл, закомиттьте его.
155+
156+
#### 5.3 Сравнение результатов
157+
158+
Сравните два полученных `HAR`-файла с помощью https://compare.sitespeed.io/
159+
160+
**Обязательно добавьте ссылку на сравнение в описание `PR`**
161+
162+
Вы должны увидеть на `Waterfall`, что `server-push` картинки отправляются в самую первую очередь.
163+
164+
На `filmstrip` и `video` также можно увидеть, что `server-push` картинки действительно появляются заметно раньше.
125165

126166
## Bonus 1. Аудит dev.to
167+
127168
Теперь, когда у вас сформировалась интуиция по работе с `HTTP/2` и `server-push`, постройте и проанализируйте отчёт `WebPageTest` для сайте `dev.to`.
128169

129170
Видите ли вы какие-то возможности использовать возможности `HTTP/2` для оптимизации `dev.to`, исходя из отчётов `WPT`?
130171

131172
## Bonus 2. Falcon HTTP/2
173+
132174
Сервер `Falcon` https://github.com/socketry/falcon утверждает, что может сервить `Rails`-приложения и из коробки поддерживает `HTTP/2`.
133175

134176
Попробуйте настроить работу `dev.to` с `server-push` для `Falcon`.
135177

136178
Сделайте сравнительный бенчмарк `puma` и `falcon` на примере главной страницы `dev.to`.
137179

138180
## Как сдать задание
181+
139182
Нужно сделать `PR` в этот репозиторий с вашими изменениями кода `dev.to` для использования `server-push`, конфигом `NGinx` и описанием.
140183

141184
### Чеклист для сдачи задания
142185

143-
- [x] Скриншот `DevTools` с работающим `server-push`
144-
- [x] Файлы кода `dev.to`, которые вы изменили, чтобы сделать `server-push` картинок (комитьте итоговые версии файлов, затронутых изменениями)
186+
- [x] Реализация `server-push` для указанных в задании картинок
145187
- [x] Конфиг `NGinx`
146-
- [x] Описание со сравнением *восприятия* работы сайта с `inline`-картинками, обычными картинками и `server-pushed` картинками (попробовать разные варианты локально)
147-
- [x] Гипотезы о возможных оптимизациях `dev.to` по результатам анализа отчёта `WebPageTest` на их проде; подумайте в контексте интуиции работы с `server-push`, которую вы получили
148-
- [ ] Бонус про `Falcon`
149-
188+
- [x] Ссылка на сравнение `HAR`-файлов с `server-push` и без
189+
- [ ] Бонус 1 про `dev.to`
190+
- [ ] Бонус 2 про `Falcon`
150191

151192
<div align="center">
152193
<br>

0 commit comments

Comments
 (0)