我的sinatra应用程序必须解析一个〜60MB的
XML文件.这个文件几乎没有变化:在每天的cron工作中,它被另一个覆盖.
是否有技巧或方法来将解析的文件保存在内存中作为变量,以便我可以从传入的请求中读取它,但不必一次又一次地分析每个传入的请求?
一些伪代码来说明我的问题.
get '/projects/:id' return @nokigiri_object.search("//projects/project[@id=#{params[:id]}]/name/text()") end post '/projects/update' if params[:token] == "s3cr3t" @nokogiri_object = reparse_the_xml_file end end
我需要知道的是如何创建一个这样的@nokogiri_object,以便在Sinatra运行时它会持续存在.这是可能吗还是需要一些存储?
解决方法
你可以试试:
configure do @@nokogiri_object = parse_xml end
那么@@ nokogiri_object将在您的请求方法中可用.它是一个类变量而不是实例变量,但应该做你想要的.