Napotkałem obecnie na pewien problem a mianowicie:
Mam skrypt w jQuery ( poniżej wraz z wyjaśnieniem ) który korzystając z funkcji .post() ma za zadanie:
- wywołać zewnętrzną stronę przekazując do niej pewne dane
- wywołana strona wykonuje operację na bazie danych i zwraca "OK"
- skrypt po odebraniu potwierdzenia wykonania zadania wywołuje stronę jeszcze raz i tak aż skończą się rekordy w bazie danych - ok 5000 razy
Problem w tym że po wywołaniu tego skryptu strasznie jest pożerana pamięć systemowa ok 5MB na każdy rekord z bazy co powoduje po jakimś czasie pożarcie całej pamięci i wyświetlenie "out of memory" pod IE
Zastanawia mnie czy jest możliwe że taki wpływ ma skrypt czy też może jest jakiś inny powód...
function run_arec(){
$('#form').dialog('close');
$('#form').dialog('destroy');
vars={
title:'Auto-reconciliation',
f_start:function(){
$("#form .loading").hide();
if($.stop_arec==0){
$.post('elements.php?go=autorec_all',{},function(data){
$.autorec_all=data; // pobranie ilości rekordów znajdujących się w bazie
$.post('elements.php?go=autorec_recd',{},function(data2){
$.autorec_recd=data2; // pobranie ilości jaka już została poprawiona
$("#form .text").html('<center><b>Auto-reconciliation in progress - please wait !</b><p/><div id="progressbar"></div><p/>Reconciled '+$.autorec_recd+' from '+$.autorec_all+'</center>');
$("#progressbar").progressbar({
value: Math.round(($.autorec_recd/$.autorec_all)*100)
});
if($.autorec_all==$.autorec_recd){ // jeśli wszystkie już zostały poprawione
$.post('elements.php?go=set_autoreconciled',{},function(data3){
if(data3=='OK'){
reset_main(); // jeśli zakończono nie wykonuj już nic
$('#form').dialog('destroy');
}
else{
$("#form .text").html(data3);
}
});
}
else{
$.post('elements.php?go=autorec',{},function(data3){ // wywołaj stronę która ma poprawić wpis w bazie
if(data3=='OK'){ // jeśli wpis został poprawiony
if($.stop_arec==0) {run_arec();} // wykonaj całą funkcję od początku
}
else{
$("#form .text").html(data3);
}
});
}
});
});
}
},
sub_button:'no',
cancel:1,
fn_cancel:function(){
$("#form").dialog("destroy");
$.stop_arec=1;
},
width:400
};
show_form(vars);
}