[英]Optimize ajax synchronously calls
我有一些ajax腳本可以觸發大約250個同步PHP調用。 這是我的劇本
$(document).ready(function(){
$("#generate").html("<div class='modal'><p>Initializing...</p></div>");
$.ajax({
url:'/fetch around 250 url from database.php',
async:false,
dataType: 'json',
success: function(data){
$.each(data,function(key,val){
$("#generate").html("<div class='modal'><p>Fetching "+val.url+"</p></div>");
saveimage(val.url);
}
$("#generate").html("<div class='modal'><p>done</p></div>");
finalcreate();
},
});
});
function saveimage(){
$.ajax({
url: 'do some php work.php',
async: false,
});
}
function finalcreate(){
$.ajax({
url: 'do some php work.php',
async: false,
});
}
在第一部分腳本中,從數據庫中獲取超過250個url,並且對於每個url腳本,使用另一個ajax調用進行一些php計算。 當循環結束腳本時,做最后的ajax調用。
當我在firefox中運行此程序時,它僅成功運行40個URL,然后瀏覽器顯示對話框,其中包含用戶是否要停止此腳本的選項,如果用戶想要運行此腳本,則腳本將再次運行以用於下一個40個URL ,同樣的過程發生到最后。 我如何優化此腳本,我不希望瀏覽器顯示選項來停止此腳本。 請幫忙。
謝謝
嘗試這個:
function nextrequest() {
if (requests.length == 0) {
$("#generate").html("<div class='modal'><p>done</p></div>");
finalcreate();
return;
}
var val = requests.pop();
$("#generate").html("<div class='modal'><p>Fetching "+val.url+"</p></div>");
saveimage(val.url);
}
var requests = [];
$(document).ready(function(){
$("#generate").html("<div class='modal'><p>Initializing...</p></div>");
$.ajax({
url:'/fetch around 250 url from database.php',
dataType: 'json',
success: function(data){
requests = data;
nextrequest();
},
});
});
function saveimage(){
$.ajax({
url: 'do some php work.php',
success: function(data) {
// do something...
nextrequest();
}
});
}
function finalcreate(){
$.ajax({
url: 'do some php work.php',
});
}
您將所有URL存儲在一個全局變量中,並且每次請求完成后,您將獲得下一個URL,直到所有這些URL被消耗, (requests.length == 0)
,您調用最終請求。
這樣,用戶仍然可以在頁面上執行其他操作,並且您可以在每次請求完成時顯示進度。 此外,一件好事是,您可以一次或多次撥打2個電話,以加快處理速度。
Ajax調用需要很長時間才能完成,因為它與遠程服務器通信。 最慢的是對服務器的查詢。 您應該發送一個批處理請求,其中包含服務器所需的所有數據,應該將數據分開並處理它。 一切都應該完成大約250倍的速度。
為每個ajax請求設置一些時間間隔
success: function(data){
$.each(data,function(key,val){
$("#generate").html("<div class='modal'><p>Fetching "+val.url+"</p></div>");
setTimeout(saveimage(val.url),3000);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.