|
| 1 | +# Задание №4 |
| 2 | + |
| 3 | +## Цели выполнения задания |
| 4 | + |
| 5 | +- Попрактиковаться в настройке мониторинга |
| 6 | +- Попрактиковаться в поиске возможностей для оптимизации |
| 7 | +- Попрактиковаться в проверке гипотез и обосновании предложений по оптимизации |
| 8 | +- Познакомиться с интересным живым `Rails` `open-source` проектом |
| 9 | + |
| 10 | +## Подготовка |
| 11 | + |
| 12 | +- Завести `dev.to` локально |
| 13 | +- Настроить свой `NewRelic` для мониторинга локального `dev.to` |
| 14 | +- Настроить свой `Skylight` / `Scout` / `Datadog` для мониторинга локального dev.to |
| 15 | +- Настроить свой `Prometheus` + `Grafana` для мониторинга локального `dev.to` |
| 16 | +- Настроить `rack-mini-profiler` |
| 17 | +- Настроить `rails-panel` |
| 18 | +- Сделать возможность запуска проекта в `local_production` |
| 19 | + |
| 20 | +### local_production |
| 21 | + |
| 22 | +Можно либо |
| 23 | + |
| 24 | +- сделать новый `environment`, `local_production` |
| 25 | +- использовать `production`, но найти способ переопределить нужные настройки локально |
| 26 | + |
| 27 | +Основное, что должно отличать ваш `local_production` от `development`: |
| 28 | + |
| 29 | +- `cache_classes: true` |
| 30 | +- `eager_load: true` |
| 31 | +- `perform_caching: true` |
| 32 | +- `assets_debug: false` |
| 33 | +- `assets_compile: false` |
| 34 | + |
| 35 | +Для работы потребуется прекомпиляция ассетов `rake assets:precompile` |
| 36 | + |
| 37 | +## Оптимизация |
| 38 | + |
| 39 | +Все инструменты мониторинга показывают, что самой горячей точкой является главная страница, `StoriesController#index`. |
| 40 | + |
| 41 | +В частности, заметное время занимает рендеринг `partial`-ов `_single_story.html.erb`. |
| 42 | + |
| 43 | +Рассмотрите гипотезу о том, что можно закешировать `<%= render "articles/single_story", story: story %>` в `_main_stories_feed.html.erb` и это даст заметный эффект. |
| 44 | + |
| 45 | +- Не забудьте включить локальное кэширование (`touch tmp/caching-dev.txt`) |
| 46 | +- Сделайте `benchmark` с помощью `ab` |
| 47 | +- Сделайте оптимизацию |
| 48 | +- Перезапустите `benchmark` |
| 49 | + |
| 50 | +Если вы посчитаете, что применить кэширование здесь целесообразно, оформите обоснованный `PR` с этим предложением. Напишите в описании `PR`, какая была гипотеза, откуда она взялась, как вы проверяли гипотезу, какие результаты получили. Приложите скриншоты графиков мониторинга, если на них виден эффект оптимизации. |
| 51 | + |
| 52 | +## Bonus |
| 53 | + |
| 54 | +Поищите возможности для оптимизации самостоятельно. Если сможете что-то найти и оптимизировать, добавляйте в `PR` ваши оптимизации с обоснованиями. |
| 55 | + |
| 56 | +## Сдача задания |
| 57 | + |
| 58 | +`PR` в этот репозиторий с кодом и подробным описанием проделанной работы в описании `PR`-а. |
| 59 | + |
1 | 60 | <div align="center"> |
2 | 61 | <br> |
3 | 62 | <img |
|
0 commit comments