[jQuery][JS] Stanowcze zmniejszenie pamięci systemowej ...

0

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:

  1. wywołać zewnętrzną stronę przekazując do niej pewne dane
  2. wywołana strona wykonuje operację na bazie danych i zwraca "OK"
  3. 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);
	
	}



0

Znalazłem przyczynę stanu rzeczy otóż w jQuery UI korzystając z rozszerzenia dialog() do wyświetlania wyników miałem w ustawieniach "modal:true" co powodowało dezaktywację reszty elementów na stronie i przy tym pożarcie ok 5 MB pamięci. Nie wiadomo dlaczego ale nie "oddawało" tej pamięci nawet po zamknięciu okna dialogowego - ciekawe dlaczego ale to już inna sprawa. Pomogło wyłączenie tej opcji :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1