Независимо от того, что вы делаете для масштабирования или увеличения производительности Rails, вы захотите пройти тесты до и после. Легко установить новейший плагин, повышающий производительность, или скопировать чужую технику, но без измерения времени выполнения вы никогда не узнаете, повышают ли выполняемые вами действия производительность или ухудшают ее.
Производительность относительно и может варьироваться в зависимости от многих факторов. Для масштабирования Rails важны два аспекта производительности:
- Задержка - Как быстро мы можем ответить на запрос? Это измеряется как время, прошедшее между запросом и ответом.
- Пропускная способность - Сколько запросов мы можем обработать за определенный промежуток времени? Это измеряется как ответы в секунду.
После того, как мы проведем общее тестирование производительности, мы можем легко увидеть узкие места. В этот момент мы можем дополнительно использовать упакованные инструменты, чтобы сузить область фокуса до одного или нескольких из следующих пунктов, которые расположены в порядке от наиболее распространенного до наименее распространенного:
- Проблемы с базой данных : плохой пользовательский SQL, неправильные или неоптимальные объединения и ассоциации, слишком большие таблицы базы данных и т. Д.
- Модельные проблемы : бизнес-правила слишком сложны или неправильно разработаны.
- Проблемы с внешним видом : плохой выбор HTML или CSS, очень большие библиотеки javascript, неоптимизированные изображения и т. Д.
- Транзакционные проблемы : слишком мало запущенных экземпляров Mongrel (или другого сервера приложений), недостаточно оборудования, плохо написаны или неоптимальные контроллеры, неправильно спроектированы приложения и т. Д.
Часто люди считают транзакционные проблемы причиной плохой работы, когда чаще это вызвано другими типами проблем.
Если у вас плохо спроектированный пользовательский SQL, очень большие таблицы базы данных или неоптимальные объединения или ассоциации, независимо от того, сколько оборудования вы добавляете в микшер, вы никогда не увеличите производительность. Ваше Rails-приложение просто не масштабируется. То же самое относится к некоторым транзакционным проблемам. Большинство проблем с масштабируемостью возникает, когда на этапах проектирования и кодирования были применены плохие методы.
Следующие инструменты помогут определить, где живут ваши узкие места ...
- " query_analyzer " - MySQL-инструмент Боба Сильвы для автоматического ОБЪЯСНЕНИЯ каждого запроса.
- " ruby-prof " - быстрый профилировщик кода Ruby, написанный на C.
- " pl_analyze " - написанный Эриком Ходелом, он анализирует выходные данные регистратора из SysLogLogger.
- " yslow " - Плагин Firebug для измерения и определения, почему конкретная страница работает медленно.
- " YUI компрессор " - инструмент сжатия Javascript / CSS от команды по производительности в Yahoo.
Как только вы определили, где существуют проблемы, гораздо проще сосредоточиться и решить каждую проблему.