有没有办法让 ajax 调用在 web2py 中看似顺序地触发?
Is there a way to keep ajax calls from firing off seemingly sequentially in web2py?
我正在开发一个 SPA,发现自己在加载某些部分时需要触发几个 (5-10+) ajax 调用。对于 web2py,似乎他们中的许多人都在等待其他人完成或接近完成才能返回任何数据。
这里是一些 Chrome 的时间轴输出示例
其中绿色表示等待时间,灰色表示时间停滞,透明表示排队时间,蓝色表示实际接收内容。
这些都是通过 web2py 控制器的请求,大多数只是做一个简单的操作(通常是数据库查询)。任何访问静态资源的东西似乎都可以快速处理。
郑重声明,我在 cookie 中使用会话,因为我读过有关基于文件的会话如何强制 web2py 进入类似行为的内容。我还在任何不修改会话的控制器顶部调用 session.forget()。
我知道我可以而且我打算通过减少 ajax 调用的次数来优化它,但无论如何我都觉得这种行为很奇怪而且不受欢迎。还有什么办法可以改善这种情况吗?
如果您使用的是基于 cookie 的会话,则不会序列化请求。但是,请注意,浏览器会限制同一主机的并发连接数。查看时间线输出,看起来确实是同时发出了多组请求,但 Chrome 不会同时发出所有 21 个请求。
如果您不能减少请求的数量但必须同时发出所有请求,您可以查看 domain sharding or configuring your web server to use HTTP/2。
顺便说一句,在 web2py 中,如果您正在使用基于文件的会话并且想要在给定请求中解锁会话文件以防止请求序列化,您必须使用 session.forget(response)
而不仅仅是 session.forget()
(后者防止会话被保存,即使它已被更改,但它不会立即解锁文件)。在任何情况下,如果您使用基于 cookie 的会话,都没有要解锁的会话文件。
我正在开发一个 SPA,发现自己在加载某些部分时需要触发几个 (5-10+) ajax 调用。对于 web2py,似乎他们中的许多人都在等待其他人完成或接近完成才能返回任何数据。
这里是一些 Chrome 的时间轴输出示例
其中绿色表示等待时间,灰色表示时间停滞,透明表示排队时间,蓝色表示实际接收内容。
这些都是通过 web2py 控制器的请求,大多数只是做一个简单的操作(通常是数据库查询)。任何访问静态资源的东西似乎都可以快速处理。
郑重声明,我在 cookie 中使用会话,因为我读过有关基于文件的会话如何强制 web2py 进入类似行为的内容。我还在任何不修改会话的控制器顶部调用 session.forget()。
我知道我可以而且我打算通过减少 ajax 调用的次数来优化它,但无论如何我都觉得这种行为很奇怪而且不受欢迎。还有什么办法可以改善这种情况吗?
如果您使用的是基于 cookie 的会话,则不会序列化请求。但是,请注意,浏览器会限制同一主机的并发连接数。查看时间线输出,看起来确实是同时发出了多组请求,但 Chrome 不会同时发出所有 21 个请求。
如果您不能减少请求的数量但必须同时发出所有请求,您可以查看 domain sharding or configuring your web server to use HTTP/2。
顺便说一句,在 web2py 中,如果您正在使用基于文件的会话并且想要在给定请求中解锁会话文件以防止请求序列化,您必须使用 session.forget(response)
而不仅仅是 session.forget()
(后者防止会话被保存,即使它已被更改,但它不会立即解锁文件)。在任何情况下,如果您使用基于 cookie 的会话,都没有要解锁的会话文件。