Skip to main content
 首页 » 编程设计

jQuery ajax 速度 vs 直接访问速度

2026年07月28日9jiqing9006

我有一个使用 Pyramid 框架编写的 Web 服务以及一个使用 jQuery 和 jQuery Mobile 编写的前端。我注意到,与直接访问浏览器中的 URL 相比,使用 Ajax 方法完成某些 Ajax 调用所需的时间大约要长 5-10 倍。

我的 Ajax 代码如下所示,为简洁起见,已缩短:

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

现在,我一次向不同的 URL 触发大约 10 个,这可能是响应速度较慢的原因,但如果我一次只触发一个,速度仍然慢 3 倍左右。 (30 毫秒与 90 毫秒)。我尝试过使用 Pyramid 中的 waitress 以及 mod_wsgi(1 个进程,4 个线程),结果大致相同。

我的问题是:开销从哪里来? Pyramid ?网络服务器? jQuery? jQM? .ajax()?如果可以减少请求时间,我可以做什么?

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

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

这是 Firebug 运行的屏幕截图,我有意通过运行 9 个调用,每个调用 5 次来减慢速度:http://s16.postimage.org/n6t5z1ow5/ajax_Cap.png希望能给一些更多的提示。灰色为“阻塞”,紫色为“等待”。

请您参考如下方法:

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

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

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