我正在编写一个使用'json'gem的Rails应用程序,它可以在'json / pure'和'json / ext'实现之间切换的行为导致了问题。具体来说,有时宝石会引入类似
的行require 'json/pure'
当发生这种情况时,JSON.parser和JSON.generator会全局切换到基于ruby的慢速版本。然后每次调用JSON.parse和JSON.generate都很慢。
我想避免一种情况,即我不知道的改变宝石依赖性突然使我的网站变得更慢。如何防止'json / pure'被加载,强制执行'json / ext'使用,或者在将来阻止这个问题?
答案 0 :(得分:0)
不知道这是否适用于您的病例,并且治愈可能比疾病更糟糕:
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源代码通常非常易读。捆绑打开对我有用。
答案 1 :(得分:0)
为了防止加载json / pure,这有效:
require 'json/ext'
JSON.freeze
你必须在需要json / pure之前运行它。