Jeg har en webapplication som har en bug som er meget svær at finde og jeg har brug for lidt hjælp. når brugeren har brugt den samme skærm i "lang tid", så går browseren ned med en "Explorer encountered a problem and must close" fejl.
Det er ikke konsekvent at dette sker, men når det sker er det altid ved det samme serverkald (Save). lang tid er naturligvis et vidt begreb men det er det bedste vi har kunnet få fra brugerne.
når fejlen opstår efter et vist stykke tid så mistænker jeg at det er en eller anden form for memory leak.
vi bruger store mængder af javascript i vores løsning. jeg har prøvet at debugge vores javascript med visual studio, men der er det svært at se noget om memory forbrug.
er der nogen der: ...har nogle gode tools/metoder til memory overvågning af session/javascript? ...ved hvor meget ram en browser (IE) må bruge til data? ...har andre forslag til hvad der kan få en browser til at gå ned på denne måde?
Specielt IE har en frygtelig skidt garbage-collection, så der er rigtig mange kilder til den slags nedbrud. Som oftest er der dog tale et samspil mellem IE og dårlig kode. De fleste JS'ere har aldrig lært at programmere og derfor heller aldrig lært at skrive effektiv kode eller at rydde op efter sig ... de mangler den grundlæggende forståelse for programmerings håndværket.
Mon du nogensinde nedlægger variabler, tømmer arrays eller delete'er objekter? Hvis ikke, skal det jo gå galt i komplekse applikationer ;o)
Du har ret I at jeg aldrig har lært at programmere i js, men jeg anser mig selv for en ganske habil java/.Net programmør.
Du har ret i at vi ikke gør meget ud af at rydde op i objecter, men jeg har altid gået ud fra at de samme scope regler gælder som i andre sprog, dvs variabler erklæret inde i en metode bliver nedlagt når metode kaldet er udført.
Vi har nogle ganske få globale js variabler, dvs. variabler som er erklæret i direkter i en script blok f.eks <script> var global = "xxx"; </script>
der er ikke gjort noget specielt for at rydde op i disse variable og det er nok en fejl. Men bliver javascript variabler ikke clearet når HTML siden renderes igen?
ellers har jeg læst noget om at circulære referencer er roden til de fleste js memory leaks, men hvordan finder man lige frem til sådan nogle, f.eks vha et tool?
jeg læste i en artikel at mange page faults er tegn på memory leaks, vi har omkring 2-4000 page faults pr server kald på den pågældende side. Er det mange?
Det er specielt objekter, der skal delete'es i IE ... det er mest sandsynligt dér, problemet ligger - men det er ikke til at sige uden et kik i jeres koder =)
Derudover adskiller det at skrive kode, der skal afvikles i en browser sig væsentligt fra andre sprog. Der er jo her også hele DOM-sektionen, hvor der kan gemme sig rigtig mange leaks, hvis man ikke får slettet evt. 'gamle' elementer ... igen afhængigt af koden ;o)
det er nu ikke fordi jeg ikke vil vise dig koden men det er >2000 linier javascript så det ville måske være lidt vildt at paste det ind her. Du siger at objecter skal deletes? er der forskel på "var x = noget" og et object kan du give et kodeeksempel på at delete et object? sætte det til null?
Jeg er ikke sikker på jeg forstår din kommentar omkring DOM sektionen. DOM er Document Object Model, så langt er jeg med, og den beskriver hele HTML siden med alle HTML objecter på siden, korrekt?
Hvad mener du men at slette gamle elementer? js? Html?
jeg har lidt mistanke til at dette stykke kode kan skabe problemer. ideen er at man alle felter af en bestemt type igennem og så tildeler eventhandlers til de felter som der skal reageres på. dette gøre når siden loades
hvis alle disse objecter på en eller anden måde bliver hængende efter dette metodekald er udført så kan man jo godt se hvad der vil ske:)
function initializeFieldNavigation() { var allInput = document.getElementsByTagName('input'); var allTextarea = document.getElementsByTagName('textarea'); var allSelect = document.getElementsByTagName('select'); var allButton = document.getElementsByTagName('button'); var allA = document.getElementsByTagName('a');
var nr = 0;
for( nr = 0 ; nr < allInput.length ; nr++ ) { setFieldEventHandler( allInput[nr] ); }
for( nr = 0 ; nr < allTextarea.length ; nr++ ) { setFieldEventHandler( allTextarea[nr] ); }
for( nr = 0 ; nr < allSelect.length ; nr++ ) { setFieldEventHandler( allSelect[nr] ); }
for( nr = 0 ; nr < allButton.length ; nr++ ) { setFieldEventHandler( allButton[nr] ); }
for( nr = 0 ; nr < allA.length ; nr++ ) { setFieldEventHandler( allA[nr] ); } }
"hvis alle disse objecter på en eller anden måde bliver hængende efter dette metodekald er udført så kan man jo godt se hvad der vil ske"
Nej, det kan jeg ikke ... hvad mener du med det, du skriver?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.