home_run: Рубиновые классы Date и DateTime стали в десятки раз быстрее!
августа 24, 2010 | Published in Ruby, Ruby Gems | 3 Comments
Home_run – реализация рубиновых Date / DateTime классов на языке Си, с улучшенной производительностью (ускорение в десятки раз), что полностью совместима со стандартной библиотекой Ruby.
Home_run возникла стараниями Джереми Эванса, известного также по разработке Sequel. Были проведены бенчмарки на двух различных моделях Rails, что показали прирост скорости работы моделей соответственно в 2 и 3 раза.
$ script/console production Loading production environment (Rails 2.3.5) >> require 'benchmark' => false >> puts Benchmark.measure{Employee.all} 0.270000 0.020000 0.290000 ( 0.460604) => nil >> puts Benchmark.measure{Notification.all} 2.510000 0.050000 2.560000 ( 2.967896) => nil $ home_run script/console production Loading production environment (Rails 2.3.5) >> require 'benchmark' => false >> puts Benchmark.measure{Employee.all} 0.100000 0.000000 0.100000 ( 0.114747) => nil >> puts Benchmark.measure{Notification.all} 0.860000 0.010000 0.870000 ( 0.939594)
Будем надеяться, что home_run войдет в стандартную библиотеку Ruby.
Сайт проекта:
Вот таблица демонстрирующая ускорение работы:
# | i386 | i386 | i386 | i386 | amd64 | # |Windows| Linux | Linux | Linux |OpenBSD| # | 1.8.6 | 1.8.7 | 1.9.1 | 1.9.2 | 1.9.2 | # |-------+-------+-------+------ +-------| Date.civil | 82x | 66x | 27x | 21x | 14x | Date.parse | 56x | 56x | 33x | 30x | 25x | Date.today | 17x | 6x | 2x | 2x | 2x | Date.strptime | 43x | 62x | 63x | 37x | 23x | DateTime.civil | 252x | 146x | 52x | 41x | 17x | DateTime.parse | 52x | 54x | 32x | 27x | 20x | DateTime.now | 78x | 35x | 11x | 8x | 4x | DateTime.strptime | 63x | 71x | 58x | 35x | 23x | Date#strftime | 156x | 104x | 110x | 70x | 62x | Date#+ | 34x | 32x | 5x | 5x | 4x | Date#<< | 177x | 220x | 86x | 72x | 40x | Date#to_s | 15x | 6x | 5x | 4x | 2x | DateTime#strftime | 146x | 107x | 114x | 71x | 60x | DateTime#+ | 34x | 37x | 8x | 6x | 3x | DateTime#<< | 88x | 106x | 40x | 33x | 16x | DateTime#to_s | 144x | 47x | 54x | 29x | 24x |
Устоновка home_run
Home_run устанавливается в виде обычного gem’а:
gem install home_run
Установка в site_ruby
Установка в site_ruby означает, что home_run будет использоваться по-умолчанию вместо стандартной библиотеки.
После установки gem’а выполните следующую команду в консоли:
home_run --install
Если вы вдруг передумаете использовать home_run как Date/DateTime классы по-умолчанию, то воспользуйтесь следующей командой:
home_run --uninstall
Запуск без установки в site_ruby
Если home_run не установлен в site_ruby, вы можете использовать его запуская ваши приложения используя команду home_run …:
home_run ruby …
home_run irb …
home_run unicorn …
home_run rake …
Это манипуляция с переменными окружения RUBYLIB и RUBYOPT.
Вам также следует включить библитеку в запускаемые скрипты:
require ‘home_run’
Больше информации ищите здесь:
декабря 24, 2010 at 02:10 (#)
А если эту штуку ставить на боевой сервер, на котором ruby-enterprise крутится, будет быстрее и лучше?
декабря 24, 2010 at 02:43 (#)
Ну лучше только из-за того, что быстрее. На сколько я знаю, там ничего не изменяли просто переписали с Ruby на Си, из-за чего и возникла такая разница в продуктивности. Думаю создателю такой известной ORM как Sequel можно доверять и смело ставить его реализацию.
А что за Ruby Enterprise, если не секрет?
марта 4, 2011 at 03:18 (#)
А что за Ruby Enterprise, если не секрет?
Ruby EE — версия руби для prod серверов обладает ~ на 33% сниженным потреблением памяти. В данный момент поддерживается только ветка 1.8