jQuery ajax速度与直接访问速度

Lar*_*ars 5 ajax performance jquery mod-wsgi pyramid

我有一个使用Pyramid框架编写的Web服务和使用jQuery和jQuery Mobile编写的前端.我注意到,使用Ajax方法完成一些Ajax调用需要大约5到10倍的时间才能直接转到浏览器中的URL.

我的Ajax代码看起来像这样,为简洁起见缩短了:

$.ajax({
      url:address,
      dataType:'jsonp',
      crossDomain: true,
      success: function(data)
      {
          Parsing and other stuff that takes some time...
      }});
Run Code Online (Sandbox Code Playgroud)

现在,我一次点击其中的10个到不同的URL,这可能是响应速度较慢的原因,但如果我一次只发射一个,它仍然慢大约3倍.(30ms vs 90ms).我曾尝试在Pyramid中使用女服务员,以及mod_wsgi(1个进程,4个线程),结果大致相同.

我的问题是:开销来自哪里?金字塔?网络服务器?jQuery的?JQM?阿贾克斯()?如果有什么要求减少请求时间,我该怎么办?

编辑:在JSON和JSONP之间切换影响不大,但进一步的测试表明,从测试到测试的时间变化很大(50ms到100ms).但是,通过浏览器直接访问服务始终为30ms +/- 1 ms.

我使用Firebug,Chrome Web Dev工具和Fiddler对此进行了测试,结果类似.在Fiddler中复制其中一个请求时,我得到的结果与在浏览器中直接访问资源的结果相似.

这是一个运行Firebug的屏幕截图,我有意通过每次运行5次调用来降低速度:http://s16.postimage.org/n6t5z1ow5/ajax_Cap.png希望能提供更多提示.灰色是"阻挡",紫色是"等待".

dmp*_*dmp 1

我猜测问题在于 crossdomain/jsonp 选项 - 因为这是一个“假”ajax 请求,旨在绕过浏览器安全限制。

JQuery 在这里所做的是创建一个脚本元素,并将源设置为您在调用中提供的 URL(以及其他一些东西,将返回的数据包装在函数调用中),因此几乎可以肯定会出现一些奇怪/缓慢的情况。如果我没记错的话,浏览器在加载脚本块时实际上也会阻止脚本执行......?

您可以尝试通过在服务中包含一个 设置为“*”(允许所有访问)的“Access-Control-Allow-Origin”标头来解决此问题,并删除所有“跨域”内容。