|
1 | 1 | # Setup через docker, docker-compose и dip |
2 | 2 |
|
| 3 | +- для начала нужно зарегаться в algolia.com и получить API-ключи (у dev.to хорошие сиды, но они завязаны на algolia, поэтому приходится этим заниматься) |
| 4 | + - cp .env-example .env (.env is gitignored) |
| 5 | + - в .env вставить свои ключи от Algolia |
3 | 6 | - gem install dip (maybe change .ruby-version file with your ruby ver) |
4 | 7 | - cd .dev_to |
5 | 8 | - docker-compose build |
6 | | -- For algolia not to brake setup |
7 | | - - cp .env-example .env (.env is gitignored) |
8 | | - - in .env paste your Algolia keys |
9 | 9 | - dip provision |
10 | 10 | - docker-compose up |
11 | 11 | - open localhost:3000 in your browser |
12 | 12 |
|
13 | 13 | After setup you can |
14 | 14 |
|
| 15 | +- dip bash - to do any other commands or just to peek around |
15 | 16 | - dip bundle - to bundle install after adding gems |
16 | 17 | - dip setup - to rerun bin/setup |
17 | | -- dip bash - to do any other commands or just to peek around |
| 18 | + |
18 | 19 |
|
19 | 20 | # Задание №4 |
20 | 21 |
|
21 | 22 | ## Цели выполнения задания |
22 | 23 |
|
23 | | -- Попрактиковаться в настройке мониторинга |
24 | | -- Попрактиковаться в поиске возможностей для оптимизации |
25 | | -- Попрактиковаться в проверке гипотез и обосновании предложений по оптимизации |
26 | | -- Познакомиться с интересным живым `Rails` `open-source` проектом |
| 24 | +- Попрактиковаться в подключении APM |
| 25 | +- Попрактиковаться в проверке гипотез, бенчмарках и обосновании предложений по оптимизации |
27 | 26 |
|
28 | 27 | ## Подготовка |
29 | 28 |
|
30 | | -- Завести `dev.to` локально (прямо в этом репозитории, не нужно клонировать `dev.to` от них, иначе будут отличаться версии) |
| 29 | +- Завести `dev.to` локально через docker, по инструкции выше |
31 | 30 | - Настроить свой `NewRelic` для мониторинга локального `dev.to` |
32 | | -- Настроить свой `Skylight` / `Scout` / `Datadog` для мониторинга локального dev.to |
33 | | -- Настроить свой `Prometheus` + `Grafana` для мониторинга локального `dev.to` |
34 | 31 | - Настроить `rack-mini-profiler` |
35 | | -- Настроить `rails-panel` |
36 | | -- Сделать возможность запуска проекта в `local_production` |
37 | 32 |
|
38 | | -### local_production |
| 33 | +## Оптимизация |
39 | 34 |
|
40 | | -Можно либо |
| 35 | +Инструменты мониторинга показывают, что самой горячей точкой является главная страница, `StoriesController#index`. |
41 | 36 |
|
42 | | -- сделать новый `environment`, `local_production` |
43 | | -- использовать `production`, но найти способ переопределить нужные настройки локально |
| 37 | +В частности, заметное время занимает рендеринг `partial`-ов `_single_story.html.erb`. |
44 | 38 |
|
45 | | -Основное, что должно отличать ваш `local_production` от `development`: |
| 39 | +Рассмотрите гипотезу о том, что можно закешировать `<%= render "articles/single_story", story: story %>` в `_main_stories_feed.html.erb` и это даст заметный эффект. (В этот паршл входят счётчики лайков и комментариев, они не заморозятся?) |
46 | 40 |
|
47 | | -- `cache_classes: true` |
48 | | -- `eager_load: true` |
49 | | -- `perform_caching: true` |
50 | | -- `assets_debug: false` |
51 | | -- `assets_compile: false` |
| 41 | +- Не забудьте включить локальное кэширование (`touch tmp/caching-dev.txt` / `rails dev:cache`) |
| 42 | +- Сделайте `benchmark` с помощью `ab` (`ab -n 100 -c 5 http://localhost:3000/`) |
| 43 | +- Сделайте оптимизацию |
| 44 | +- Перезапустите `benchmark` и сравните результаты |
52 | 45 |
|
53 | | -Для работы потребуется прекомпиляция ассетов `rake assets:precompile` |
| 46 | +Если вы посчитаете, что применить кэширование здесь целесообразно, оформите обоснованный `PR` с этим предложением. Напишите в описании `PR`, какая была гипотеза, откуда она взялась, как вы проверяли гипотезу, какие результаты получили. Приложите скриншоты графиков APM, если на них виден эффект оптимизации. |
54 | 47 |
|
55 | | -## Оптимизация |
56 | 48 |
|
57 | | -Все инструменты мониторинга показывают, что самой горячей точкой является главная страница, `StoriesController#index`. |
| 49 | +## Бонусная программа |
| 50 | +- Попробовать что-то ещё, поимио `NewRelic` - `datadog`, `scout`, `skylight`, etc... |
| 51 | +- Настроить `local_production` окружение, сравнить скорость работы с обычным `development` |
58 | 52 |
|
59 | | -В частности, заметное время занимает рендеринг `partial`-ов `_single_story.html.erb`. |
| 53 | +### local_production |
60 | 54 |
|
61 | | -Рассмотрите гипотезу о том, что можно закешировать `<%= render "articles/single_story", story: story %>` в `_main_stories_feed.html.erb` и это даст заметный эффект. |
| 55 | +Cделать новый `environment`, `local_production` |
62 | 56 |
|
63 | | -- Не забудьте включить локальное кэширование (`touch tmp/caching-dev.txt`) |
64 | | -- Сделайте `benchmark` с помощью `ab` |
65 | | -- Сделайте оптимизацию |
66 | | -- Перезапустите `benchmark` |
| 57 | +Основное, что должно отличать ваш `local_production` от `development`: |
67 | 58 |
|
68 | | -Если вы посчитаете, что применить кэширование здесь целесообразно, оформите обоснованный `PR` с этим предложением. Напишите в описании `PR`, какая была гипотеза, откуда она взялась, как вы проверяли гипотезу, какие результаты получили. Приложите скриншоты графиков мониторинга, если на них виден эффект оптимизации. |
| 59 | +- `cache_classes: true` |
| 60 | +- `eager_load: true` |
| 61 | +- `perform_caching: true` |
| 62 | +- `assets_debug: false` |
| 63 | +- `assets_compile: false` |
69 | 64 |
|
70 | | -## Bonus |
| 65 | +Для работы потребуется прекомпиляция ассетов `rake assets:precompile` |
71 | 66 |
|
72 | | -Поищите возможности для оптимизации самостоятельно. Если сможете что-то найти и оптимизировать, добавляйте в `PR` ваши оптимизации с обоснованиями. |
73 | 67 |
|
74 | 68 | ## Сдача задания |
75 | 69 |
|
76 | | -`PR` в этот репозиторий с кодом и подробным описанием проделанной работы в описании `PR`-а. |
| 70 | +Как обычно, `PR` в этот репозиторий с кодом и case-study по проделанной работе в описании `PR`-а, или в файле. |
77 | 71 |
|
78 | 72 | <div align="center"> |
79 | 73 | <br> |
|
0 commit comments