Курс для практикующих Ruby/Rails-разработчиков, которые хотят:
всерьез заняться оптимизацией кода
сделать свои проекты быстрее и эффективнее
добиться профессионального и карьерного роста
получать еще больший кайф от своей работы.
Цель курса: научить участников грамотно выстраивать процесс оптимизации, управлять им и применять правильные инструменты в нужное время и в нужном месте.
После курса вы сможете:
Выстраивать стратегию оптимизации Rails-приложений: уметь определять и собирать нужные метрики, ставить обоснованные цели по производительности и достигать их
Понять, что надо оптимизировать, а что лучше не стоит и подойти к оптимизации любого аспекта Rails-приложения так, чтобы добиться нужного результата
Дружить со сборщиком мусора, профилировать и оптимизировать ruby и rails приложения по процессору и по памяти. Находить и устранять реальные bottleneck'и
Настраивать и использовать мониторинг rails-приложений, настраивать production-окружение и production-like данные локально
Оптимизировать работу СУБД, находить и оптимизировать медленные SQL-запросы, эффективно работать с индексами. Бороться с гидрой N+1, оптимизировать ActiveRecord и понимать, когда лучше работать в обход него
Оптимизировать фронтенд под современный интернет, использовать кеширование по максимуму, понимать как браузер строит страницу, получая ответ сервера, и оптимизировать этот процесс
Оптимизировать свой Development Experience: прогон тестов, сборку, деплой, CI и т.д.
Оптимизировать настройки app-сервера, адаптировать серверы под неравномерную нагрузку
Программа
Одна тема в неделю + задание на неделю.Проверка автором с подробным code review
Спойлер: Неделя 1. Оптимизация работы с памятью в ruby-программах
Оптимизация: общие подходы и мантра
Планирование эксперимента
Общая стратегия сбора метрик, постановки целей по оптимизации Rails-приложений
Сбор метрик и постановка целей по оптимизации памяти
Как устроена работа с памятью в ruby
Сборщик мусора: эволюция, современное состояние, тюнинг
Замеры использования памяти
Memory leak vs Memory bloat
Профилирование использования памяти, визуализация и анализ результатов
Возможности сброса работы с ruby на более подходящие части технологического стека
Альтернативные аллокаторы памяти, jemalloc
Связь оптимизации памяти c оптимизацией CPU
Спойлер: Неделя 2. Оптимизация работы с CPU в ruby-программах
Сбор метрик и постановка целей по оптимизации CPU
Особенности организации эксперимента с использованием CPU
Бенчмаркинг ruby-программ
Профилирование использования CPU в ruby-коде (rubyprof, stackprof, rbspy)
Визуализация и анализ результатов профилирования CPU
Разновидности, идентификация и устранение Bottleneck'ов
Возможности использования оптимизированных библиотек для нагруженных частей проекта
Параллельные вычисления в Ruby, GIL, потоки, процессы
Закон Амдала
Best-practices и gotchas
Спойлер: Неделя 3. Оптимизация Rails бекенда
Сбор метрик и постановка целей по оптимизации бэкенда
Настройка production-like данных локально - зачем и как
Уточнение роли бэкенда в цикле запрос-ответ-взаимодействие современного веб-приложения
Работа с rack-mini-profiler
Настройка и использование мониторинга NewRelic, Skylight, Scout
Кеширование!
Вынос ресурсоемких процессов в фоновые задачи
Resque, Sidekiq и другие
Профилирование rails-бэкенда, нагрузочные тесты, численные эксперименты
Спойлер: Неделя 4. Оптимизация ActiveRecord и работы с базой данных
Сбор метрик и постановка целей по оптимизации работы с базой данных
Борьба с гидрой N+1
Определение и исправление медленных запросов
Сокращение количества запросов
Кэширование сложных запросов
Работа с планировщиком запросов БД с Explain Analyze
Эффективная работа с индексами базы данных
Vacuum, autovacuum и чем он может быть опасен
Импорт больших объёмов данных с ActiveRecord и в обход него
Польза, цена и альтернативы ActiveRecord
Спойлер: Неделя 5. Оптимизация фронтенда для современного интернета
Сбор метрик и постановка целей по оптимизации фронтенда
Формирование Performance mindset у себя и в своей компании
Оценка стоимости вашего фронтенда
Работа с сервисом WebPageTest
Настройка local-production окружения
HTTP 1, 2, 3 и как с ними жить
Preconnect, Prefetch, Preload, Server Push
Конкатенация ассетов, CDN rotation, CDN внешних библиотек: за и против
Gzip, brotli, zopfli, WebP
Server-Sent Events, Streaming шаблонов в Rails
Спойлер: Неделя 6. Оптимизация фронтенда для современных браузеров
Процесс построения браузером страницы в деталях
Chrome Timeline как профилировщик фронтенда
Формирование оптимального тега HEAD
Critical CSS
Оптимизация CSS-бандлов
service-workers
Работа с картинками, шрифтами
Webpack bundle-analyzing, code-splitting, tree-shaking
Автоматизация защиты от разбухания js-бандлов
Интеграция инструментов контроля соблюдения бюджетов в CI
PageSpeed Insights, Lighthouse
Чек-листы производительного фронтенда
Спойлер: Неделя 7. Оптимизация серверов приложений
Сбор метрик и постановка целей по оптимизации серверов
Обзор и сравнение альтернативных app-серверов для Rails
Закон Литтла
Расчёт оптимальных настроек серверов для вашего проекта
Контроль потребления памяти в production
Отлов memory bloat в production
Оптимизация Rails как фреймворка, derailed_behcnmarks
Оптимизация серверов под неравномерную нагрузку
Reverse Proxy
Минимальная защита от DDoS
Спойлер: Неделя 8. Оптимизация DX (Development eXperience)
Сбор метрик и постановка целей по оптимизации DX
Ещё раз в важности feedback-loop для разработчика
Оптимизация open-source инструментов
Оптимизация скорости загрузки Rails
Оптимизация прогона тестов
Оптимизация деплоя
Оптимизация пересборки
Оптимизация CI
Live-reload css и js
Автор
Алексей Васильев
Техлид в Busfor, кандидат технических наук (Github, LinkedIn)
Всерьёз втянулся в оптимизацию при написании кандидатской диссертации].
В научной работе на два порядка ускорил моделирование газотранспортных систем Газпрома за счёт применения архитектурных решений, параллельных и распределённых вычислений, расчётов на графических картах.
В 2015 году сменил академическую среду на продуктовую разработку на Rails.
В Busfor оптимизировал и продолжает оптимизировать всё, что тормозило
(бэкенд, фронтенд, postgres, sprockets, webpack, capistrano, тесты, CI, кэш и т.д.).
За время работы над проектом:
снизил пиковую нагрузку на бэкенд в 5 раз с 15000rpm до 3000rpm
ускорил деплой в 5 раз
ускорил прогон тестов в 4 раза
В 2 раза снизил потребление памяти приложения
в 4 раза ускорил загрузку приложения
ускорил импорт данных объёмом 3Гб в 20 раз, c 60 до 3х минут.
Кроме Rails владеет C++, Go, JavaScript.
Ссылка :
всерьез заняться оптимизацией кода
сделать свои проекты быстрее и эффективнее
добиться профессионального и карьерного роста
получать еще больший кайф от своей работы.
Цель курса: научить участников грамотно выстраивать процесс оптимизации, управлять им и применять правильные инструменты в нужное время и в нужном месте.
После курса вы сможете:
Выстраивать стратегию оптимизации Rails-приложений: уметь определять и собирать нужные метрики, ставить обоснованные цели по производительности и достигать их
Понять, что надо оптимизировать, а что лучше не стоит и подойти к оптимизации любого аспекта Rails-приложения так, чтобы добиться нужного результата
Дружить со сборщиком мусора, профилировать и оптимизировать ruby и rails приложения по процессору и по памяти. Находить и устранять реальные bottleneck'и
Настраивать и использовать мониторинг rails-приложений, настраивать production-окружение и production-like данные локально
Оптимизировать работу СУБД, находить и оптимизировать медленные SQL-запросы, эффективно работать с индексами. Бороться с гидрой N+1, оптимизировать ActiveRecord и понимать, когда лучше работать в обход него
Оптимизировать фронтенд под современный интернет, использовать кеширование по максимуму, понимать как браузер строит страницу, получая ответ сервера, и оптимизировать этот процесс
Оптимизировать свой Development Experience: прогон тестов, сборку, деплой, CI и т.д.
Оптимизировать настройки app-сервера, адаптировать серверы под неравномерную нагрузку
Программа
Одна тема в неделю + задание на неделю.Проверка автором с подробным code review
Спойлер: Неделя 1. Оптимизация работы с памятью в ruby-программах
Оптимизация: общие подходы и мантра
Планирование эксперимента
Общая стратегия сбора метрик, постановки целей по оптимизации Rails-приложений
Сбор метрик и постановка целей по оптимизации памяти
Как устроена работа с памятью в ruby
Сборщик мусора: эволюция, современное состояние, тюнинг
Замеры использования памяти
Memory leak vs Memory bloat
Профилирование использования памяти, визуализация и анализ результатов
Возможности сброса работы с ruby на более подходящие части технологического стека
Альтернативные аллокаторы памяти, jemalloc
Связь оптимизации памяти c оптимизацией CPU
Спойлер: Неделя 2. Оптимизация работы с CPU в ruby-программах
Сбор метрик и постановка целей по оптимизации CPU
Особенности организации эксперимента с использованием CPU
Бенчмаркинг ruby-программ
Профилирование использования CPU в ruby-коде (rubyprof, stackprof, rbspy)
Визуализация и анализ результатов профилирования CPU
Разновидности, идентификация и устранение Bottleneck'ов
Возможности использования оптимизированных библиотек для нагруженных частей проекта
Параллельные вычисления в Ruby, GIL, потоки, процессы
Закон Амдала
Best-practices и gotchas
Спойлер: Неделя 3. Оптимизация Rails бекенда
Сбор метрик и постановка целей по оптимизации бэкенда
Настройка production-like данных локально - зачем и как
Уточнение роли бэкенда в цикле запрос-ответ-взаимодействие современного веб-приложения
Работа с rack-mini-profiler
Настройка и использование мониторинга NewRelic, Skylight, Scout
Кеширование!
Вынос ресурсоемких процессов в фоновые задачи
Resque, Sidekiq и другие
Профилирование rails-бэкенда, нагрузочные тесты, численные эксперименты
Спойлер: Неделя 4. Оптимизация ActiveRecord и работы с базой данных
Сбор метрик и постановка целей по оптимизации работы с базой данных
Борьба с гидрой N+1
Определение и исправление медленных запросов
Сокращение количества запросов
Кэширование сложных запросов
Работа с планировщиком запросов БД с Explain Analyze
Эффективная работа с индексами базы данных
Vacuum, autovacuum и чем он может быть опасен
Импорт больших объёмов данных с ActiveRecord и в обход него
Польза, цена и альтернативы ActiveRecord
Спойлер: Неделя 5. Оптимизация фронтенда для современного интернета
Сбор метрик и постановка целей по оптимизации фронтенда
Формирование Performance mindset у себя и в своей компании
Оценка стоимости вашего фронтенда
Работа с сервисом WebPageTest
Настройка local-production окружения
HTTP 1, 2, 3 и как с ними жить
Preconnect, Prefetch, Preload, Server Push
Конкатенация ассетов, CDN rotation, CDN внешних библиотек: за и против
Gzip, brotli, zopfli, WebP
Server-Sent Events, Streaming шаблонов в Rails
Спойлер: Неделя 6. Оптимизация фронтенда для современных браузеров
Процесс построения браузером страницы в деталях
Chrome Timeline как профилировщик фронтенда
Формирование оптимального тега HEAD
Critical CSS
Оптимизация CSS-бандлов
service-workers
Работа с картинками, шрифтами
Webpack bundle-analyzing, code-splitting, tree-shaking
Автоматизация защиты от разбухания js-бандлов
Интеграция инструментов контроля соблюдения бюджетов в CI
PageSpeed Insights, Lighthouse
Чек-листы производительного фронтенда
Спойлер: Неделя 7. Оптимизация серверов приложений
Сбор метрик и постановка целей по оптимизации серверов
Обзор и сравнение альтернативных app-серверов для Rails
Закон Литтла
Расчёт оптимальных настроек серверов для вашего проекта
Контроль потребления памяти в production
Отлов memory bloat в production
Оптимизация Rails как фреймворка, derailed_behcnmarks
Оптимизация серверов под неравномерную нагрузку
Reverse Proxy
Минимальная защита от DDoS
Спойлер: Неделя 8. Оптимизация DX (Development eXperience)
Сбор метрик и постановка целей по оптимизации DX
Ещё раз в важности feedback-loop для разработчика
Оптимизация open-source инструментов
Оптимизация скорости загрузки Rails
Оптимизация прогона тестов
Оптимизация деплоя
Оптимизация пересборки
Оптимизация CI
Live-reload css и js
Автор
Алексей Васильев
Техлид в Busfor, кандидат технических наук (Github, LinkedIn)
Всерьёз втянулся в оптимизацию при написании кандидатской диссертации].
В научной работе на два порядка ускорил моделирование газотранспортных систем Газпрома за счёт применения архитектурных решений, параллельных и распределённых вычислений, расчётов на графических картах.
В 2015 году сменил академическую среду на продуктовую разработку на Rails.
В Busfor оптимизировал и продолжает оптимизировать всё, что тормозило
(бэкенд, фронтенд, postgres, sprockets, webpack, capistrano, тесты, CI, кэш и т.д.).
За время работы над проектом:
снизил пиковую нагрузку на бэкенд в 5 раз с 15000rpm до 3000rpm
ускорил деплой в 5 раз
ускорил прогон тестов в 4 раза
В 2 раза снизил потребление памяти приложения
в 4 раза ускорил загрузку приложения
ускорил импорт данных объёмом 3Гб в 20 раз, c 60 до 3х минут.
Кроме Rails владеет C++, Go, JavaScript.
Ссылка :
Для просмотра содержимого вам необходимо авторизоваться
Для просмотра содержимого вам необходимо авторизоваться