Rails 4.2 - 性能问题

4

我最近把我的一个应用程序升级到了Rails 4.2。当在本地机器上运行时,我发现一个简单的link_to指向一个基本的show action有时需要很长时间才能完成。

这就是链接:

= link_to team_members_path(@team) do
  Members

这是我的操作(在我的 MembersController 中):

def index

  @team = Team.find_by_id(params[:team_id])

  if params[:search].present?
    @members = Member.search ThinkingSphinx::Query.escape(params[:search]), :with => {:team_id => @team.id}, :page => params[:page], :per_page => 10
  else
    @members = Member.search params[:search], :with => {:team_id => @team.id}, :page => params[:page], :per_page => 10
  end
end

我使用SphinxThinkingSphinx进行搜索。当点击链接时,我的控制台上出现了异常长的“日志”。

Started GET "/users/1" for ::1 at 2014-12-24 11:24:40 +0100
Processing by UsersController#show as JS
Parameters: {"id"=>"1"}
[renders stuff etc]

...

Started GET "/users/1" for ::1 at 2014-12-24 11:24:40 +0100
Processing by UsersController#show as JS
Parameters: {"id"=>"1"}
[renders stuff etc. with the same timestamp as above]

...

Started GET "/users/1" for ::1 at 2014-12-24 11:24:40 +0100
Processing by UsersController#show as JS
Parameters: {"id"=>"1"}
[renders stuff etc. with the same timestamp as above]

这个操作:Started GET "/users/1" 似乎会被多次调用,如上所示(比我上面粘贴的要多得多),这似乎导致性能非常差,即使在我的本地机器上运行也是如此。
我不确定该如何解决它或者是什么原因导致了它。有什么想法吗?
注意:
实际上,我不知道为什么在这种情况下会调用GET "/users/1"。我没有链接到用户显示操作。
我已经使用Firefox控制台进行了检查。请参见下面的图像:

1
看起来像是Rails 4引入的turbolinks gem导致了问题,因为我可以看到有太多的js请求。尝试直接查看show pay,例如http://localhost:3000/users/1。如果它引起了麻烦,您可以删除turbolinks,这意味着性能会有所提高。 - maximus ツ
@maximus 是的,我现在已经完成了,看起来它正在发送请求。我已经在我的问题中添加了一张日志图片。 - Anders
@maximus,老实说,我认为这个视图不会给你任何线索。 - Anders
这可能是因为Ajax请求源自视图。尝试删除所有代码并查看是否能够重现该问题。 - maximus ツ
1
很好,你可以回答自己的问题,这也可以帮助其他人。 - maximus ツ
显示剩余5条评论
1个回答

1
问题似乎出在我内联的 Javascript 上,它在一个局部表单 (_form.html.haml) 中。由于该表单放置在Bootstrap模态窗口中并且可以在任何位置显示,因此该表单在大多数页面上都会呈现。在这个局部表单中,我执行了一些 JavascriptAjax 调用。每次呈现表单时,我都会使用 Ajax 执行此操作:
:javascript
  $(document).ready(function() {

  $.ajax({
    url: "#{update_idea_team_path}",
    data: {
      team_id : $('#select_idea_team').val()
    },
    dataType: "script"
  });

由于某种原因,这似乎引起了我在上面描述的问题。将JavaScript和Ajax代码移动到一个.coffee.js文件中而不是内联呈现可以解决我的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接