所以我不确定这是否发生在任何人之前,但在我的ajax中,我正在加载一堆数据。就像字面上的很多数据一样。主要问题是页面加载,它加载速度非常快,但是当你试图右键单击页面的任何部分时。在加载整个页面后大约5秒钟,右键单击不起作用。因此,加载5秒后,右键单击上下文菜单将最终打开。这比任何事情都更加拖延。
关于如何同时加载大量数据的任何想法不会让它像这样延迟吗?
这是我的ajax。我知道,这很简单。
<div id="load_user_data"></div>
<script type="text/javascript">
$('#load_user_data').load("ajax/load_user_data.php?load=<?php echo $user; ?>", function() {
window.setInterval("loadData", 1000);
});
</script>
答案 0 :(得分:0)
你的问题不太可能出现在AJAX调用中,就像处理它的响应一样。
浏览器(JS,DOM渲染,CSS绘画......整个事情)在单个线程上运行。如果您因任何原因锁定该线程,其他所有内容(其他计算,DOM呈现......甚至关闭选项卡)都可以完全挂起,直到该块消失为止。
当您进行AJAX调用时,除非您使用的是旧世界系统,否则您需要同步AJAX(从不这样做 - 99%的情况下,有更好的方式 )AJAX调用几乎没有时间阻止;它会发出请求,然后消失,让浏览器继续做自己的事情。 当服务器发送数据并且浏览器完成当前任务时,AJAX将返回,解析数据,并运行您之后要求运行的任何任务。
var value = false;
function hasValueFlipped () { return value !== false; }
AJAX.get("data.json", function () {
console.log("AJAX has returned");
console.log("flipped now?", hasValueFlipped());
});
console.log("flipped?", hasValueFlipped());
value = true;
console.log("flipped?", hasValueFlipped());
应打印出来:
"flipped? false" "flipped? true" "AJAX has returned" "flipped now? true"
问题是,如果你传递了数兆字节的数据,那么浏览器就需要变成要绘制的元素,或执行繁重的数学运算......等等......任务运行在所有数据上意味着你的线程被完全阻止,没有任何东西(点击,打字,离开等)将一直有效。
尝试
a)将任务分解为更小的异步部分
b)将结果数量分解为您请求和操作的小块,一个接一个