Советы по повышению производительности Ruby — как оптимизировать код с нуля

Ruby Tutorial for Python Programmers Программирование и разработка

За последние несколько лет все больше разработчиков выбрали Ruby в качестве основного языка программирования. Кто может их винить? У него, безусловно, есть много привлекательных функций. Во-первых, синтаксис легко читать и отлаживать. Архитектура MVC по умолчанию в большинстве фреймворков Ruby — еще один заманчивый фактор, который, возможно, заставил вас использовать ее.

Несмотря на длинный список преимуществ, существует, пожалуй, не менее длинный список минусов. Вершиной упомянутых минусов являются характеристики низкой производительности, которые демонстрирует каждое приложение Ruby, если оно не оптимизировано. Многие причины этого связаны с природой самого языка. Подробнее об этом читайте дальше. К счастью, есть несколько советов по повышению производительности Ruby, которые стоит держать в рукаве, чтобы они окупились.

Если вам абсолютно необходимо использовать Ruby в качестве языка при создании приложений, эта статья поможет вам обойти врожденные недостатки производительности. Предполагается, что вы хорошо знакомы с Ruby, хотя вы можете использовать этот пост для навигации по процессу принятия решений при создании ваших первых приложений. Однако это не будет руководством по настройке приложения, использующего Ruby в качестве языка программирования.

Производительность Ruby с нуля

Сам по себе Ruby способен лишь на создание современных интерфейсов и сложных решений повседневных проблем. Чтобы выжать максимум из языка, разумно использовать фреймворки.

Теперь они доступны с уже существующими библиотеками, чтобы помочь вам быстрее создавать приложения с Ruby. На момент написания в нашем распоряжении около 20 таких фреймворков, и основные отличия, которые вы должны принять во внимание, — это вариации уровня производительности. Давайте рассмотрим всего три таких фреймворка и то, как выбор любой из них влияет на производительность вашего приложения в целом. Мы будем использовать три фреймворка для передачи нескольких запросов к идентичным базам данных.

Примечание: единственная цель — сохранить чистоту этого поста и сфокусировать внимание на советах, ради которых вы здесь находитесь, на реализациях трех фреймворков (в которых код уже написан, и мы бы предпочли не копировать его прямо в пост) доступны, когда вы переходите по соответствующим ссылкам на их целевые страницы. Это также дает свежий и не пугающий взгляд на способы сделать Ruby быстрее.

Читайте также:  Memcmp в C

Ruby on Rails

Возможно, наиболее популярным на момент написания является фреймворк Ruby on Rails (RoR). Он до краев наполнен библиотеками, которые делают развертывание вашего первого приложения Ruby столь же простым, как вызов нескольких строк через любой интерфейс командной строки. Чем раньше вы используете версию Rails, тем меньше будет отставание вашего приложения с точки зрения частоты обновления и времени выполнения запросов. Однако из трех сравниваемых здесь вариантов это самый медленный вариант.

Sinatra

Это упрощение фреймворка Rails. Вы можете ошибочно принять реализацию Sinatra за простую маршрутизацию, но она имеет множество подключаемых модулей. Если вы хотите создавать проекты Ruby, которые начинаются с малого и в конечном итоге будут масштабироваться, вам следует выбрать именно этот. Как вы уже догадались, его показатели производительности лучше, чем у Rails.

Roda

Roda — это веб-инструментарий дерева маршрутизации, который позволяет разработчикам Ruby очень быстро создавать REST API. Он использует очень легкую реализацию языка Ruby, предоставляя плагины, в которых сложность начинает вкрадываться в проект. Основная идея использования Roda — это минимальные когнитивные издержки. Древовидная структура маршрутов, используемых для создания приложений с помощью Roda, очень легко читается и даже проста для компиляции интерпретаторами.

Простое представление возможных номеров других фреймворков Ruby, наряду с этими тремя, показано в результатах на диаграмме выше. И выделение памяти, и количество запросов в секунду влияют на производительность. Тесты могут быть выполнены для вашего собственного подтверждения с помощью репозитория Git Bench.

Повышение производительности Ruby при программировании

К настоящему времени вы сделали осознанный выбор при выборе фреймворка для использования в написанном на Ruby приложении. Следующий шаг — убедиться, что вы не прострелите себе ногу при написании кода. Из-за способа создания языка (с использованием C) у него есть недостатки. Главный из них, на который мы пролим свет, связан с тем преимуществом, которым он может похвастаться — все основано на ООП. В основном у вас есть объекты повсюду, и это связано с большим количеством запросов на выделение памяти, как видно на диаграмме результатов теста.

Вы должны использовать эффективный код, чтобы обойти этот факт. Это может показаться очевидным, особенно если вы раньше использовали другие языки и отправляли код на проверку. Однако Ruby является особенным, когда он написан обычным способом (давайте сделаем все и вернемся домой). Вы создаете множество узких мест, которые не помечаются как ошибки, но обнаруживаются при проверке производительности. Уровень эффективности, которого вы можете достичь, во многом зависит от вашего опыта работы с Ruby как языком. Это также зависит от того, сколько у вас времени. Таким образом, вы можете просмотреть документацию и найти лучшие способы избежать создания кода, который требует больше памяти при каждом запуске. Функции, как правило, делают это в Ruby. Итак, давайте рассмотрим несколько советов по повышению производительности Ruby, которые необходимо соблюдать при разработке приложений.

Советы по производительности Ruby

  1. Не пишите код с нуля, если существует жемчужина для того же конечного результата. Обычно драгоценные камни содержат оптимизированный код. Код не только будет работать быстрее, но и быстрее попадет в IDE.
  2. Если ваше приложение требует передачи большого количества запросов к базе данных, используйте функции базы данных для их обработки. Базы данных часто содержат больше инструментов, чем мы используем. Попробуйте их.
  3. Многие опытные разработчики продолжают исправлять Ruby’s GC. Это может не добавлять заметных эффектов на небольших веб-сайтах, но помогает увеличить скорость при масштабировании вашего приложения.
  4. Самый важный совет — иметь способ узнать, когда что-то, что вы только что добавили, привело к падению производительности. Вы можете сделать это с помощью APM на всем этапе разработки.

Использование APM для мониторинга производительности Ruby

Инструмент мониторинга производительности приложений (APM), такой как Raygun’s, позволяет вам постоянно следить за тем, как ваше кодирование влияет на производительность. На самом деле, вы могли бы создать приложение «привет, мир» и построить из этого каркаса полноценный веб-сайт. Но при использовании хорошо размещенных подключаемых модулей и вызове представлений, которые показывают полезные данные для конечного пользователя, сам код вызывает меньшую озабоченность, чем обеспечение оптимальной производительности во время выполнения для получения приятных впечатлений. Вам необходимо знать, какие запросы отвечают за медленную работу страниц, а когда использовать отложенную загрузку, исходя из фактического времени, когда страница (и ее ресурсы) запрашиваются пользователями. APM покажет вам все это, а в случае APM Raygun он также расскажет, почему часть вашего кода работает медленно.

Это превращает всю проблему из проблемы, связанной с языком, в то, что вы готовы сделать, чтобы код работал гладко. Выбранный фреймворк Ruby действительно вступает в игру. В сочетании с возможностью быстрого выполнения APM еще больше расширит ваши возможности по превращению вашего приложения в приятное, когда оно достигнет ваших предполагаемых пользователей. По мере развития языка и появления новых фреймворков у него все еще будет возможность заглянуть под капот, пока аудитория запускает приложение, которое позволяет старшим программистам Ruby выделять свои приложения.

Возможно, лучший совет, когда речь идет о производительности Ruby как языка программирования, — это внимательно следить за тем, как каждый выбор, сделанный при кодировании, влияет на общую скорость выполнения с помощью эффективного APM.

Мониторинг производительности приложений для Ruby скоро появится в Raygun! Команды Ruby скоро смогут получить непрерывный мониторинг с такими функциями, как подробное отслеживание транзакций, информационные панели, мониторинг взаимодействия с пользователем и многое другое.

Оцените статью
bestprogrammer.ru
Добавить комментарий