我有Action,它返回页面上的图表数据。它需要chartType参数并返回图表数据。 Page使用jQuery和$.post
函数来调用它。这是一个例子:
var fillChart = function (chartData){ /* fill routine here */};
$(function () {
$.post(
'/Charts/ChartsJson',
'chartType=Type1',
fillChart,
'json');
$.post(
'/Charts/ChartsJson',
'chartType=Type2',
fillChart,
'json');
// other calls here [*]
});
我有一些应该处理的chartTypes。如果我在注释行之后添加所有调用,那么它们将一次发送。没关系,如果有1到3个项目。但如果有更多的项目,那么它对性能不利。
有没有办法限制同时执行的邮件请求数量?
我知道,我可以使用第一个帖子的回调,它会调用第二个,依此类推......我的问题是:“还有其他办法吗?”
UPD:每个电话都已分区。 (并且我的数组中的项目数量并不总是已知。)此操作每次调用返回大约1000个复杂元素,不同的chartType
表示要使用哪个表(以及提取数据的逻辑)
所有数据的总提取可能需要20秒甚至40秒。所以我想在旅途中显示它,因为它已被处理。
答案 0 :(得分:4)
我在设置临时“消息队列”方面取得了很大成功。消息可以是json对象,其中post的参数作为数据。您可以让任意数量的工作人员将对象从队列中拉出来。
例如:
var ajax_message_queue = [];
ajax_message_queue.push({
"ajaxtype" : "post",
"action" : '/Charts/ChartsJson',
"data" : handlers.fillChart,
"datatype" : "json"
});
一个worker只是一个基于setTimeout的函数,弹出最旧的消息并执行它。然后可以阻止工作人员弹出下一条消息,直到第一条消息完成。如果您希望工作人员在失败时可以重做请求。
答案 1 :(得分:1)
这是由浏览器自动完成的 - Web浏览器在任何时候都不会向任何单个服务器发送超过一定数量的HTTP请求。它们将在完成后自动排队并执行。
如果您想提高效果,我建议您重写服务器端代码,以便一次性提交多个项目。
答案 2 :(得分:0)
您应该立即发送所有数据。重新构造输入数组以获得chartType
键。那样在后端你可以相应地处理它