Мне нравится Ruby on Rails, и я использую его для всех своих проектов веб-разработки. Несколько лет назад было много разговоров о том, что Rails - это боров памяти, и о том, как он не очень хорошо масштабируется, но эти предложения были уложены Греггом Поллаком здесь .
В последнее время я слышал, как люди говорили, что сам Ruby работает медленно.
- Почему Ruby считается медленным?
Я не считаю Ruby медленным, но опять же, я просто использую его для создания простых приложений CRUD и блогов компании. Какие проекты мне нужно было бы сделать, прежде чем Ruby станет медленным? Или эта медлительность влияет на все языки программирования?
Какие у вас есть возможности программиста на Ruby, если вы хотите справиться с этой «медлительностью»?
Какая версия Ruby лучше всего подойдет для такого приложения, как Stack Overflow, где скорость критична, а трафик интенсивен?
Вопросы субъективны, и я понимаю, что архитектурная настройка (EC2 по сравнению с автономными серверами и т. Д.) Имеет большое значение, но я хотел бы услышать, что люди думают о медленной Ruby.
Наконец, я не могу найти много новостей о Ruby 2.0 - я так понимаю, что до этого у нас еще несколько лет?
источник
Ответы:
Потому что, если вы запускаете типичные тесты между Ruby и другими языками, Ruby проигрывает.
Возможно, Ruby не поможет вам в написании приложения для цифровой обработки сигналов в реальном времени или любой другой системы управления в реальном времени. Ruby (с современными виртуальными машинами), вероятно, захлебнется ограниченным в ресурсах компьютером, таким как смартфоны.
Помните, что большая часть обработки ваших веб-приложений на самом деле выполняется программным обеспечением, разработанным на C. Например, Apache, Thin, Nginx, SQLite, MySQL, PostgreSQL, многие библиотеки синтаксического анализа, RMagick, TCP / IP и т. Д. - это программы на C, используемые Ruby. , Ruby обеспечивает клей и бизнес-логику.
Переключитесь на более быстрый язык. Но это несет цену. Это цена, которая может стоить того. Но для большинства веб-приложений выбор языка не является существенным фактором, поскольку недостаточно оправдать трафик, используя более быстрый язык, который стоит гораздо дороже в разработке.
Другие люди ответили на это - JRuby, IronRuby, REE заставят Ruby-часть вашего приложения работать быстрее на платформах, которые могут позволить себе виртуальные машины. А поскольку медлительность часто вызывает не Ruby, а архитектура вашего компьютера и архитектура приложений, вы можете выполнять такие вещи, как репликация базы данных, несколько серверов приложений, балансировка нагрузки с помощью обратных прокси-серверов, HTTP-кэширование, memcache, Ajax, клиентское кэширование и т. Д. Ничто из этого не относится к Ruby.
Большинство людей ждут Ruby 1.9.1. Я сам жду Rails 3.1 на Ruby 1.9.1 на JRuby.
Наконец, помните, что многие разработчики выбирают Ruby, потому что он делает программирование более радостным по сравнению с другими языками, а также потому, что Ruby с Rails позволяет опытным веб-разработчикам очень быстро разрабатывать приложения.
источник
Прежде всего, медленнее, чем ? C? Python? Давайте возьмем некоторые цифры в игре «Тесты компьютерного языка» :
Зависит от того, кого вы спрашиваете. Вы могли бы сказать, что:
Но, опять же, медленно по отношению к чему? Ruby 1.9 примерно так же быстр, как Python и PHP (с коэффициентом производительности в 3 раза) по сравнению с C (который может быть в 300 раз быстрее), поэтому приведенное выше (за исключением соображений о многопоточности, должно ли ваше приложение сильно зависеть от этого аспекта) ) в значительной степени академические.
Пишите для масштабируемости и добавляйте больше оборудования (например, памяти)
Ну, REE (в сочетании с пассажиром ) будет очень хорошим кандидатом.
источник
Вот что сказал создатель Rails Дэвид Хайнемайер Ханссон :
т. е. выбрасывать больше оборудования или машин для решения проблемы дешевле, чем нанимать больше разработчиков и использовать более быстрый, но труднее поддерживать язык. Ведь мало кто пишет веб-приложения на C.
Ruby 1.9 - это значительное улучшение по сравнению с 1.8. Самыми большими проблемами с Ruby 1.8 является его интерпретируемая природа (без байт-кода, без компиляции), а вызовы методов, одна из самых распространенных операций в Ruby, особенно медленны.
Это не помогает, что почти все это поиск методов в Ruby - добавление двух чисел, индексация массива. Там, где другие языки выставляют хаки (
__add__
метод Python , Perl overload.pm), Ruby делает чистый OO во всех случаях, и это может снизить производительность, если компилятор / интерпретатор недостаточно умен.Если бы я писал популярное веб-приложение на Ruby, я бы сосредоточился на кешировании. Кэширование страницы сокращает время обработки этой страницы до нуля независимо от того, какой язык вы используете. Для веб-приложений издержки базы данных и другие операции ввода-вывода начинают иметь гораздо большее значение, чем скорость языка, поэтому я бы сосредоточился на их оптимизации.
источник
Написание кода идет медленно. Чтение кода идет медленно. Поиск и исправление ошибок происходит медленно. Добавление функций и улучшений происходит медленно. Все, что улучшается по сравнению с предыдущим, является победой. Очень редко возникает проблема с исполнением.
источник
Ответ прост: люди говорят, что рубин медленный, потому что он это медленно на основе измеренных сравнений с другими языками. Имейте в виду, что «медленный» относительный. Часто ruby и другие «медленные» языки достаточно быстрые.
источник
Джоэл о программном обеспечении - Ruby Performance Revisited довольно хорошо это объясняет. Может быть устаревшим, хотя ...
Я бы порекомендовал просто придерживаться этого, поскольку вы привыкли к Ruby on Rails,
если вы когда-нибудь столкнетесь с проблемой производительности, вы можете пересмотреть использование другого языка и фреймворка.
В этом случае я бы действительно предложил C # с ASP.NET MVC 2 , очень хорошо работает для приложений CRUD.
источник
Я бы сказал, что Ruby работает медленно, потому что на то, чтобы сделать переводчика быстрее, не было потрачено много времени. То же относится и к Python. Smalltalk так же динамичен, как Ruby или Python, но работает на порядок лучше, см. Http://benchmarksgame.alioth.debian.org . Поскольку Smalltalk был более или менее заменен Java и C # (то есть, по крайней мере, 10 лет назад), для него не было проделано никакой работы по оптимизации производительности, и Smalltalk по-прежнему намного быстрее, чем Ruby и Python. У людей в Xerox Parc и OTI / IBM были деньги, чтобы платить людям, которые работают над тем, чтобы сделать Smalltalk быстрее. Я не понимаю, почему Google не тратит деньги на то, чтобы сделать Python быстрее, потому что это большой магазин Python. Вместо этого они тратят деньги на развитие таких языков, как Go ...
источник
Прежде всего, вас волнует, что другие говорят о языке, который вам нравится? Когда он делает работу, которую должен сделать, ты в порядке.
ОО не самый быстрый способ выполнения кода, но он помогает в создании кода. Умный код всегда быстрее, чем тупой код и бесполезные циклы. Я администратор баз данных и вижу множество этих бесполезных циклов, отбрасываю их, использую лучший код и запросы, и приложение работает быстрее, намного быстрее. Вас волнует последняя микросекунда? Возможно, языки оптимизированы для скорости, другие просто выполняют свою работу и могут поддерживаться многими разными программистами.
Это всего лишь выбор.
источник
Очевидно, говоря о скорости, Руби проигрывает. Несмотря на то, что тесты показывают, что Ruby не намного медленнее, чем PHP. Но взамен вы получаете простой в обслуживании DRY-код, лучший из всех фреймворков на разных языках.
Для небольшого проекта вы не почувствуете никакой медлительности (я имею в виду до тех пор, как пользователи <50K), учитывая, что в коде не используются сложные вычисления, только основной материал.
Для более крупного проекта оплата ресурсов окупается и дешевле, чем заработная плата разработчиков. Кроме того, написание кода на RoR оказывается намного быстрее, чем на любом другом.
В 2014 году величина разницы в скорости, о которой вы говорите, для большинства веб-сайтов незначительна.
источник
Способ работы с Ruby в веб-приложении такой же, как и в любом другом языке программирования:
АРХИТЕКТУРА
Это легче сделать в Rails, чем в большинстве других веб-фреймворков.
На уровне приложения - кэширование всего, что предполагается кэшировать, и интеллектуальное управление доступом к БД (поскольку узкое место обычно заключается в доступе «БД» для большинства веб-приложений).
Rails позволяет очень легко и естественно решить эти проблемы. Есть несколько абстракций для кэширования данных, страниц и фрагментов , а также есть очень хорошие абстракции для работы с частью SQL оптимизированным и многократно используемым способом ( Active Record и AREL ).
Это причина, почему так много приложений, написанных на более быстрых и не очень выразительных языках (таких как php), в конечном итоге работают медленнее, чем аналоги Ruby. С этими языками не так просто и легко справиться с кэшированием и запросами, как с Ruby.
На уровне инфраструктуры разумно подумать о балансировке нагрузки и обо всем этом, о чем мне не так много известно. Я бы передал эту проблему на аутсорсинг, наняв платформу в качестве поставщика услуг, например Heroku или Engine Yard . Тем не мение. Развертывание рельсов с балансировкой нагрузки, вероятно, не очень сложно сделать.
источник
Ruby медленнее, чем C ++, в ряде легко измеримых задач (например, при выполнении кода, который сильно зависит от плавающей запятой). Это не очень удивительно, но есть достаточное оправдание для некоторых людей, чтобы сказать, что «Рубин медленен» без квалификации. Они не считают, что писать код на Ruby намного проще и безопаснее, чем на С ++.
Лучшее решение - использовать целевые модули, написанные на другом языке (например, C, C ++, Fortran) в вашем коде Ruby. Они могут сделать тяжелую работу, и ваши сценарии могут сосредоточиться на вопросах координации более высокого уровня.
источник
Производительность почти всегда зависит от хорошего дизайна и оптимизированного взаимодействия с базой данных. Ruby делает то, что нужно большинству веб-сайтов, довольно быстро, особенно в последних версиях; а скорость разработки и простота обслуживания обеспечивают высокую окупаемость затрат и удовлетворение клиентов. Я считаю, что JAVA имеет низкую производительность выполнения для некоторых задач, и, учитывая сложность разработки в JAVA, многие разработчики создают медленные приложения независимо от теоретической возможности скорости, как продемонстрировано в тестах производительности (тесты, как правило, изобретены, чтобы показать специфическую и узкую возможность). Когда мне нужна интенсивная обработка, которая не очень подходит для возможностей моей базы данных, я выбираю C или Objective-C или другой действительно высокопроизводительный скомпилированный язык для этих задач в зависимости от платформы. Если мне нужно создать веб-приложение на основе данных, Я использую RoR или иногда C # ASP.NET в зависимости от других требований; потому что все платформы имеют свои сильные и слабые стороны. Скорость выполнения того, что делает ваше приложение, важна, но в конце концов, если важна производительность выполнения одного узкого аспекта языка; тогда я все еще мог бы использовать язык Ассемблера для всего.
источник
Люди говорят, что Ruby работает медленно, потому что они сравнивают программы на Ruby с программами, написанными на других языках. Может быть, программы, которые вы пишете, не должны быть быстрее. Возможно, для программ, которые вы пишете, Ruby не является узким местом, которое замедляет процесс.
Ruby 2.1 по сравнению с Javascript V8
Ruby 2.1 по сравнению с обычным Lua
Ruby 2.1 по сравнению с Python 3
источник
Ruby хорошо работает для производительности разработчиков. Ruby по своей природе заставляет тестировать управляемую разработку из-за отсутствия типов. Ruby хорошо работает, когда используется в качестве оболочки высокого уровня для библиотек C. Ruby также хорошо работает во время длительных процессов, когда JIT-компилируется в машинный код через JVM или Rbx VM. Ruby не очень хорошо работает, когда требуется за короткий промежуток времени обработать числа чистым рубиновым кодом.
источник