2011-12-19 132 views
-1

我想在document.ready中使用jquery执行ajax.get。但get似乎阻止浏览器。ajax调用document.ready阻止浏览器

虚设例如: http://jsfiddle.net/gauravshah/HpfXL/

我试图执行得到的document.ready,结果需要大约15-17秒的时间内服务器上生成。所以在那之前浏览器似乎被阻止了。对于前景背景图像不生动。

其次,在IE 8浏览器挂起,直到收到请求。

类似的问题:Simple ajax call seems to be blocking 建议为通话使用延迟,但为什么要使用延迟?我没有找到正确的解决方案。

我的实际代码:(不知道这将是有帮助)

$(document).ready(function(){ 
feat_id = "feat-2222" 
$.post('/features/creator/get_existing/'+feat_id, { 
     "url":url, 
     'path':path, 
     'parentURL':parentURL, 
     'index':index 
    },function(data){ 
     var new_id = $(data).attr('id') 
     $(data).find('.featureLocation').html($(data).find('.featureLocation').html()); 
     $(obj).replaceWith(data) 
    }) 
}); 
+0

是您的Ajax调用同步或台异步?你的jsFiddle拥有40个同步的ajax调用 - 这是怎么回事? – jfriend00 2011-12-19 06:24:24

+0

默认情况下ajax调用是异步的...我想要模拟加载数据需要一些时间。但由于get不能在域外执行请求,我正在调用一些40个Ajax请求fom jsfiddle。我在服务器上的实际脚本大约需要15秒来计算..所以想要通过发出40个请求来模拟至少2-3秒 – 2011-12-19 06:26:42

+0

在我看来,这不是一个非常有用的模拟,因为不同的问题将发挥作用(如最大数量连接允许一次打开)。如果您的ajax调用确实是异步的,并且响应的处理不耗费时间,并且您没有在等待响应的任何地方循环,那么浏览器应该完全活动,但是我们需要查看您的真实代码以向您提供想法。我建议向我们展示您的真实代码,而不是与您的真实代码没有任何共同之处。 – jfriend00 2011-12-19 06:30:16

回答

1

在同一解决方案作为抵贴在类似的问题

jQuery(document).ready(function() { 
    setTimeout(function() { 
    $.getJSON("veryLongRequest", function(json) { 
    alert("JSON Result: " + json[0].id);}); 
    }, 500); // You may need to adjust this to a longer delay. 
}); 

Simple ajax call seems to be blocking

0

我怀疑有一个小不仅仅是一个“沉重”的查询更会在这里。 See this article用于改善JavaScript性能。 Javascript本身,尤其是当我们加载类似jQuery的库时,对于浏览器来说可能是“庞大的”。添加诸如您建议的查询以及应用程序或网站的感知响应时间可能会对用户造成不利影响。

毫无疑问,JavaScript文件会阻塞你的http加载,如果做得不好,并且广泛滥用javascript文件。只加载必要的东西。只加载缩小的文件。如果可能,合并。最后,要知道任何15秒的查询都会出现一个困境....查询会一直执行,直到完成后再显示信息。如果你正在做一个特别沉重的查询,浏览器要么堵塞,要么等到有一些东西要加载。所以,考虑攻击查询和显示模式本身。

一旦我确定基于上面的文章的教导有效地调用了我的Javascript,我会停下来一分钟,并考虑我的Ajax查询。服务器端的查询是否是最有效的查询?有没有办法可以分解数据的加载,例如server-side, pipelined datatable这样,您只需加载用户可以合理查看的信息,然后让他们做一个单独的ajaxed get以获取更多信息,重新准备好,增加感知响应时间。

此外,虽然我几乎总是使用文件准备dom加载程序,如上所示,尝试一次,没有一次.....运行一些测试用例。当IE 6肆虐时,Dom装载机非常棒。对于大多数较新的浏览器,加载问题已经在很大程度上被克服。

我是一个SAAS应用程序的UI开发人员,他定期处理数百万条记录....所以这对我来说每天都是一个难题。我发现以“一次一件”的方式查看数据的方式最有效地使得最有效的接口。

+0

在我的实际情况中,我只是从服务器加载一个约100个字符的文本字符串..只有服务器部分的计算是沉重的..不是可以理解的数据量 – 2011-12-19 06:32:06

+0

,但无论UI世界中的15秒是永恒的。无论如何,这将是一个薄弱环节。这是一种奇特的加入?你能索引速度吗?性能如何调整查询本身?作为替代,写一个测试函数,不做任何计算,只是吐出一串......是延迟加载仍然是一个问题? – bpeterson76 2011-12-19 06:34:51

+0

我不能改变计算,这很好..我的用户知道它,它不能被帮助。是的,我尝试立即返回虚拟文本,然后浏览器似乎回复完美。 – 2011-12-19 06:37:08