我可以在处理输入之前重定向吗?

时间:2015-10-27 23:47:31

标签: ruby redirect optimization sinatra

我现在拥有的是:

get "/" do
    submitMeToTheDatabase = veryLongFunction(params[:processme])
    Information.create(complicatedInformation:submitMeToTheDatabase)
    redirect "/otherPage"
end

它是否会以相同的方式工作,但如果我这样做,则会改善用户的加载时间?

get "/" do
    redirect "/otherPage"
    submitMeToTheDatabase = veryLongFunction(params[:processme])
    Information.create(complicatedInformation:submitMeToTheDatabase)
end

附录

另一种完成同样事情的方法是什么?有点像:

get "/" do
    fork do
        submitMeToTheDatabase = veryLongFunction(params[:processme])
        Information.create(complicatedInformation:submitMeToTheDatabase)
    end
    redirect "/otherPage"
end

1 个答案:

答案 0 :(得分:1)

自从我使用过sinatra已经有一段时间了,但我认为第二种不会起作用。

redirect方法的source表示redirect调用暂停(source)并立即停止进一步处理。

您可以将任务放入作业队列并在另一个线程上处理它。请参阅here以了解我的意思。

queue = Queue.new
get "/" do
    queue << params[:processme]
    redirect "/otherPage"
end

consumer = Thread.new do
    loop do
        data = queue.pop
        submitMe = veryLongFunction(data)
        Information.create(complicatedInformation:submitMeToTheDatabase)
    end
end

代码未经测试。