在Sinatra分享对象的正确方法

时间:2016-09-23 09:44:42

标签: ruby oop server sinatra

我的情况很小:

require 'sinatra'
require 'someclass'

['/endpoint1', '/endpoint2', '/endpoint3'].each do |path|
  before path do
    @obj = Someclass.new
  end

get '/endpoint1' do
  @obj.somefunction
end

# similar for other endpoints

更好的方法是什么:

  1. 为每个请求创建新对象? OR
  2. 在服务器启动时全局创建一个对象并将其用于所有请求?
  3. 同样的利弊是什么?

1 个答案:

答案 0 :(得分:2)

  1. 使用更多的内存并且更多地强调垃圾收集器,但是你的对象中没有担心并发问题。
  2. 使用更少的内存,但意味着您的对象需要是线程安全的。
  3. 除非你迫切需要拥有这个对象的单个实例,或者它的结构很昂贵,否则我会选择1.直到它不再可行。