Предотвратить загрузку json / pure в Rails - PullRequest
0 голосов
/ 19 января 2012

Я пишу приложение Rails, использующее гем 'json', и его поведение, при котором он может переключаться между реализациями 'json / pure' и 'json / ext', вызывает проблемы. В частности, иногда камень вводит строку вроде

require 'json/pure'

Когда это происходит, JSON.parser и JSON.generator глобально переключаются на медленную версию на основе ruby. Тогда каждый вызов JSON.parse и JSON.generate выполняется медленно.

Я хочу избежать ситуации, когда меняющаяся незаметная для меня зависимость от драгоценных камней внезапно делает мой сайт намного медленнее. Как я могу предотвратить загрузку json / pure, принудительно использовать json / ext или иным образом предотвратить эту проблему в будущем?

Ответы [ 2 ]

0 голосов
/ 20 января 2012

Чтобы предотвратить загрузку json / pure, это работает:

require 'json/ext'
JSON.freeze

Вы должны выполнить это до того, как потребуется json / pure.

0 голосов
/ 19 января 2012

Не знаю, сработает ли это в вашем случае, и лекарство может быть хуже, чем болезнь:

module Kernel
  alias old_require require

  def require(path)
    if path =='json/pure'
       # do something appropriate
    else
       old_require path
    end
  end
end

Я пропатчил команду «Обезьяна», когда я хотел оценить производительность различных узких мест запуска в нашем приложении rails. Возможно, вы могли бы понять, почему эти драгоценные камни пытаются использовать 'json / pure', и, возможно, остановить это по-другому.

Я нахожу исходный код gem, как правило, очень читабельным. открытый пакет делает свое дело для меня.

...