我有一个为移动客户端(本机)和基于浏览器的客户端提供服务的rails服务器。大多数流量来自基于浏览器的客户端。基于浏览器的客户端通过中间rails服务器来获取视图。中央服务器公开了基于REST的服务。
[ Iphone +---------------+
Blackberry | |
Android ]<-------------------------------------->| Central Rails|
| Server |
| |
[ Browser ]<------->[intermediary server]<-------->| |
+---------------+
系统在过去8个月内投入生产。最近,在一次性能调优练习中,我们注意到ActiveResource通信的XML序列化/反序列化成本非常高。所以我们试图共同定位中间服务器和中央rails服务器控制器 rails服务器实例。
我可以重写中间控制器以直接使用模型。这种方法需要重写大量代码,我将放弃所有强制执行的授权检查 中央控制器。
我试图弄清楚如何从中间服务器控制器调用中央服务器控制器,而不会产生序列化/反序列化成本。 理想情况下,我希望现有的中央控制器返回内存对象而不是XML字符串。
例如:
中央控制器:
class ActiveRecord::Base
def to_ar
self
end
end
class UserController
def show
respond_to do |format|
format.xml { render :xml => @user }
format.json { render :json => @user }
format.ar { render :ar => @user }
end
end
end
中央控制器:
app.get '/users/1.ar'
@user = app.response.body
基本上,我试图模仿ActionController :: IntegrationTest类的行为,将实际的ActiveRecord对象作为主体。
任何指示/建议都将受到高度赞赏。
PS :我在Rails 2.3.9上。