2016-05-06 49 views
0

我正在开发一个SPA,并发现自己需要在加载某些部分时触发几个(5-10 +)ajax调用。使用web2py,似乎很多人都在等待其他人完成或接近完成以获取任何返回的数据。有没有一种方法可以防止Ajax调用在web2py中依次触发?

这里列出一些Chrome的时间表输出的

example

这里绿草表示时间花费在等待一个例子,灰色表示时间停滞,透明表示时间排队,和蓝色表示实际接收的内容。

这些都是通过web2py控制器的请求,大多数只是做一个简单的操作(通常是数据库查询)。任何访问静态资源的东西似乎都不会很快被处理。

为了记录,我在cookies中使用了会话,因为我确实了解了基于文件的会话如何强制web2py进入类似的行为。我还在任何不修改会话的控制器的顶部调用session.forget()。

我知道我可以和我打算通过减少ajax调用的次数来优化这一点,但我发现这种行为很奇怪并且不受欢迎。还有什么可以改善这种情况吗?

回答

0

如果您使用基于cookie的会话,则请求不会被序列化。但请注意,浏览器限制同一主机的并发连接数。查看时间线输出,看起来好像是一组请求确实同时发生,但Chrome不会同时发出所有21个请求。

如果您无法减少请求数量,但必须同时完成所有请求,则可以查看domain sharding或将您的Web服务器配置为使用HTTP/2。另外,在web2py中,如果您使用的是基于文件的会话,并且想要在给定的请求中解锁会话文件以阻止请求的序列化,那么您必须使用session.forget(response)而不仅仅是session.forget()(后者会阻止会话从被保存,即使它已被更改,但它不会立即解锁文件)。无论如何,如果您使用基于Cookie的会话,则不会解锁会话文件。

+0

我们尝试切换到HTTP/2,虽然某些实现(IIS)比其他实现(nginx和uwsgiemperor)快得多,但请求的形状保持不变。即Chrome中的时间线输出仍然看起来像一个阶梯,因为每个请求都会连续返回。还有什么我们可以看看? [示例](http://i.imgur.com/55qoXfg.png) – mattjn

+0

在新示例中,它看起来好像是同时触发请求,但服务器一次只能处理一个或两个以上的请求。在您的Web服务器配置中,您指定了多少个进程/线程。您可能需要配置更多的工作人员,以便可以同时处理多个请求。 – Anthony

相关问题