home_run: Рубиновые классы Date и DateTime стали в десятки раз быстрее!

августа 24, 2010  |  Published in Ruby, Ruby Gems  |  3 Comments

clock, ruby's date/datetimeHome_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’

Больше информации ищите здесь:

Tags: , ,

Responses

  1. says:

    декабря 24, 2010 at 02:10 (#)

    А если эту штуку ставить на боевой сервер, на котором ruby-enterprise крутится, будет быстрее и лучше?

  2. admin says:

    декабря 24, 2010 at 02:43 (#)

    Ну лучше только из-за того, что быстрее. На сколько я знаю, там ничего не изменяли просто переписали с Ruby на Си, из-за чего и возникла такая разница в продуктивности. Думаю создателю такой известной ORM как Sequel можно доверять и смело ставить его реализацию.

    А что за Ruby Enterprise, если не секрет?

  3. Валентин says:

    марта 4, 2011 at 03:18 (#)

    А что за Ruby Enterprise, если не секрет?

    Ruby EE — версия руби для prod серверов обладает ~ на 33% сниженным потреблением памяти. В данный момент поддерживается только ветка 1.8

Leave a Response

Для подсветки кода используйте BB - коды: [language]...[/language], где language может быть: ruby, javascript, css, html.