代码之家  ›  专栏  ›  技术社区  ›  Daniel Abrahamsson

乘客在Ajax调用上生成新的Ruby实例

  •  0
  • Daniel Abrahamsson  · 技术社区  · 16 年前

    我对乘客和Ajax通话有一些严重的性能问题。似乎每次我执行Ajax调用时,都会启动一个新的Ruby实例,而不是使用响应原始页面请求的实例,这会使它变得非常慢。几秒钟内可以发出多个Ajax请求的事实并不能使情况好转。

    我调用的操作本身非常慢(它生成一个PDF,通常需要5-10秒),但是当通过Ajax调用时,响应时间是1-3分钟!这在我的开发环境中不会造成任何问题,因为我使用的是一个单一的Mongrel实例,但是乘客在这里确实有问题。

    我尝试过提供的Apache/乘客选项 for this SO question 但是没有运气。

    有谁经历过类似的问题并找到了解决方法?

    2 回复  |  直到 16 年前
        1
  •  0
  •   Stéphan Kochen    16 年前

    什么时候启动Ajax请求?可能与页面加载重叠?

    等到DOM load 触发Ajax请求之前的事件。

        2
  •  0
  •   Daniel Abrahamsson    16 年前

    事实上,答案在于问题。问题在于,乘客会生成许多新的应用程序实例,而不是使用现有的池。因此,解决这一问题的一种方法是设置最大工人数:

    PassengerMaxPoolSize 2
    

    这解决了我的问题,并将响应时间缩短到原来时间的10%-25%。

    更新

    一个更好的方法是限制可以处理单个用户的工人的数量。这就是我最终使用的方法:

    PassengerMaxInstancesPerApp 1
    
    推荐文章