Avatar billede karto Nybegynder
25. april 2003 - 13:03 Der er 18 kommentarer og
1 løsning

JavaScript engine i IE 6.0 crasher periodisk

Jeg er ved at lave en browser baseret applikation, der bruger meget JavaScript. Når jeg sætter applikationen til at hente og afvikle en masse JavaScript (DHTML), ændre noget i dom strukturen og hente en side i en iframe samtidig, så sker det 1 ud af 5 gange at JavaScript engine i IE 6.0 crasher. Jeg ved at det er JavaScript enginen der cracher, da der ikke er noget JS der virker, heller ikke I andre browsere der er lavet via CTRL + n eller filer -> ny -> ny vindue.

Jeg har testet, debugget og tracet på det i et par uger nu (ja, det er en stor applikation), men er ikke kommet nærmere på hvad det kunne være.

Jeg har dog en mistanke om at det er fordi jeg bruger htc’er i applikationen, da jeg har oplevet problemet i en anden applikation, hvor jeg også bruger htc’er. Men det er meget periodisk, og det jeg kan ikke indsnævre det til en ting der er galt.

/Karto
Avatar billede nikolajdu Nybegynder
25. april 2003 - 13:09 #1
Spørgmålet er og hvordan skal vi gætte os til tingene?
Avatar billede =maddog= Nybegynder
25. april 2003 - 13:11 #2
lige mine ord. jeg kan godt se at det er frustrende, men du har altså ikke stillet et konkret spørgsmål...
Avatar billede karto Nybegynder
25. april 2003 - 13:20 #3
Ok, sorry, min fejl.

Spørgsmålet må være: Er der nogen af jer, der har været ude for det. Og hvad gjorde i for at løse det?
Avatar billede =maddog= Nybegynder
25. april 2003 - 13:27 #4
jeg har aldrig rodet med htc'er, men du siger at det sker når du roder med DOM strukturen...
Jeg erindrer at jakoba har fortalt at javascript ikke har så mange stakke til rekursion. Bruger du meget rekursion til at bladre igennem DOM træet?
Avatar billede karto Nybegynder
25. april 2003 - 13:32 #5
Nope. Jeg tilfår elementerne direkte. Men det sker når jeg giver browseren noget at lave. dvs beder den hente en fil en en iframe, resize nogle dom elementer, køre omkring 100-200 kb javascript kode igemmen og sådan lidt....
Avatar billede =maddog= Nybegynder
25. april 2003 - 13:52 #6
kan det være et samtidigheds-problem. det er meget kode at køre, og selvom det i teorien et korrekt kodet kan det være at JScript ikke er "robust" nok til at håndtere flere resourcer er i brug.
Det kunne f.x. være at to funktioner er under afvikling på samme tid og har brug for samme resource.
Jeg ved ikke nok om hvorledes JavaScript afvikles til at kunne sige noget definitivt. Jeg håber at nogle af de rigtig seje kodere (dem der kender deres teori) kigger forbi og tager et kig.
Hvis der er mulighed for at koden generer en fejl kan du gribe fejlen og derved sikre at programmet forsat kan afvikles.
Eks:
<script>
    var r =5;
    try {
        r.list(); }
    catch (e) {
        alert(e.name+"\n"+e.message+"\nError Code:"+e.number);
    }
</script>
Avatar billede karto Nybegynder
25. april 2003 - 13:55 #7
Den kommer ikke med nogen fejl, og det er ikke muligt for internet explore at afvikle to stykker JS på samme tid, så det er heller ikke en mulighed.

Når den cracher, så er der bare slet ingen responce fra noget JS (ingen mouseOver, ingen knapper, eller noget)
Avatar billede olebole Juniormester
25. april 2003 - 15:09 #8
<ole>

Hej Karto, din høje slanke krølhårede monsterkoder  :D
Jeg kan se, intet har ændret sig: "Jeg ved at det er JavaScript enginen der cracher, da der ikke er noget JS der virker, heller ikke I andre browsere ..."
*LooooL* Nå, nu skal jeg nok _prøve_ at opføre mig pænt  ;o)

Som du ved, har rodet rigtig meget med HTC'ere og 'tunge' JavaScripts. Fornylig har jeg lavet lidt af en monster-app på over en Mb - helt uden probs.

Men da JS trods alt er et 'lille' script-sprog, skal man være yderst varsom og tænke grundigt over performance i hvert enkelt led. Nogle absolutte no-no's i store apps er:
1. CSS-klasseskift (skift enkelt-properties i stedet)
2. Udskrivning af enkelt-linier (fyld i stedet et array og join det)
3. Brug af CSS-expressions (de kan være fede - men er _tunge_)

Da jeg går udfra, du anvender mange komplicerede ranges, skal du også huske at collapse dem igen.

Måske, du kan få noget ud af at kikke her:
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwebgen/html/dhtmlperf.asp
Der er en del tommelfingerregler, der er gode at have med, når der skal laves store apps.

Uden at se selve koden, er det ikke til at sige præcis, hvor der er uhensigtsmæssigheder  :)

/mvh
</bole>
Avatar billede karto Nybegynder
25. april 2003 - 15:23 #9
HEjsa olebole,

det er ved at være længe siden, har du det godt?
Som du ved, så ligger jeg på samme niveau som dig når det kommer til DHTML kodning.
Og de regler du angiver er der jo ikke noget nyt i, sådan ahr det jo altid været.

Og problemet er ikke performance, men derimod at IE periodisk cracher, og at der ikke er noget system i det.

Når det sker, så kommer den ikke med fejl, eller andet, den holder bare op med at afvikle JS. Det ses bl.a. ved at mouse over ikke virker osv.

Når det virker, så køre det uden problemer, what so ever.

Den går typisk ned, når jeg loader en side i EasySite. Siden den loader indeholder en dropdown menu (htc), en toolbar(htc), nogle faneblade (alm html og js), 10 i frames, der bliver resizet mens den loader, inde i den ene iframe loader den en ny side, der indeholder mellem 4 og 10 htc'er a 25 kb stykket, og så en masse html på selve siden.

Jeg er løbet tør for ider til hvad det kan være.

/karto
Avatar billede =maddog= Nybegynder
25. april 2003 - 15:32 #10
gensynsglæde så tårerne pisker ned af kinderne.
olebole er lige nøjagtig den rigtig seje koder der kan sin teori, jeg henførte til tidligere :).
Avatar billede olebole Juniormester
25. april 2003 - 15:52 #11
Hehe ... karto er en tidligere kollega, så han kender mine evner - og mangel på samme  ;o)

karto >> Jamen, så fik jeg jo også lært noget idag - men det er rart at høre, du har højnet dit DHTML-niveau. Jaja, jeg sagde jo kun, jeg ville _prøve_ at opføre mig pænt  ;oD

Med hensyn til IE's crashes, så er der jo ikke så mange muligheder: En ulovlig handling - eller en eller anden form for manglende headroom i forhold til afviklingen af din kode.
Derfor er jeg temmelig sikker på, du skal kikke på din kodes performance. Ikke mindst, hvis du gør brug af nogle af de no-no's, jeg beskrev før.
Jeg sætter gerne en 2-liters polsk Cola og et par poser 'krisser' på højkant på, at det er der, du skal finde årsagen  ;o)
/mvh
Avatar billede karto Nybegynder
25. april 2003 - 16:07 #12
:-)

Jeg har ikke lavet nogle af de no-no's du har beskrevet. Og selvfølgelig ville det hjælpe at optimere performance på systemet, da jeg tror det er fordi JS engienen bliver overbelastet. Men den eneste måde jeg kan optimere det på er ved at fjerne features, og det sker ikke. (Du kender de andre her inde) :-)

Men jeg kan bare ikke forstå at IE's JS engine kan gå ned periodisk, og uden at komme med en fejl besked... Jeg tror at næste skridt er at snakke med MS om det...

Så skal jeg bare til at bruge forbindelserne til at finde en person hos MS der ved noget om IE, istedet for en eller anden skide supporter der alligevel ikke ved noget.. :-)

Det er bare irriterende at jeg ikke kan finde en (eller et par) linie kode, der er årsagen... jeg har været ude for det et par gange før, men der tænkte jeg jo ikke vidre over det.. :-(  ...
Det sker kun når jeg har alt koden til at køre samtidig, hvilket så henleder tanken på en buffer overflow i JS enginen....

Tja, jeg ved det sku snart ikke,

/Karto
Avatar billede olebole Juniormester
25. april 2003 - 16:29 #13
Har du prøvet at sætte dine arrays' length til 0, når du har brugt dem - og at genbruge variabler til flere ting. Du har formodentlig en bunke 'lort' liggende og 'rode' (det tårner sig hurtigt op) - og der _er_ grænser for, hvad JS-motoren kan 'huske' og håndtere samtidigt  :)

Det, du skriver med 'buffer-overflow', tyder på, vi mener det samme. Det er to sider af samme sag  ;o)
Avatar billede karto Nybegynder
25. april 2003 - 18:23 #14
Men hvis det er pga. for meget "lort" så burde det være koncekvent, og ikke kun periodisk. Det kan komme både når man lige har genstaret, og det kan komme efter at computeren har stået tændt i 3 mdr.. Og efter at have lukket browseren og startet den igen en 10-20 gange, så virker det igen.... :-)

Sux...


/Karto
Avatar billede olebole Juniormester
25. april 2003 - 19:27 #15
Martin, du misforstår  :)
Det er 'kode-affald' i browseren, jeg taler om. Hvis du f.eks. opretter 50 arrays, der alle har en masse elementer, opbygger du hurtigt en bunke overflødigt 'lort', som du _har_ brugt - men ikke længere har brug for. Det ligger og 'fylder'.
Arrays kan du rytte op i ved at sætte deres length til 0.
/mvh
Avatar billede karto Nybegynder
28. april 2003 - 10:12 #16
Naa, jeg ved godt hvad du mener, det er dig der misforstår mit svar.

Hvis der er for meget "lort" / "affald" eller noget i browseren, så er det jo den samme mængde der kommer hver gang man køre det samme script. Og så burde browseren jo gå ned hver gang (eller overleve hver gang)
Avatar billede olebole Juniormester
28. april 2003 - 11:45 #17
Okay ... nu forstår vi i hvert fald hinanden  ;o)

Det forholder sig desværre ikke, som du formoder. Når du kommer helt op under loftet i IE, bliver den ustabil - og det er ikke altid, den vælter på samme punkt.
Når man skriver meget store JS-applikationer, er problemet ikke at få de enkelte stumper til at virke - det er som oftest 'piece of cake'. Kunsten ligger i at effektivisere koden, så den kan køre i sammenhæng. Det kræver enormt god kodeskik og meget grundige overvejelser og effektivitetstestning. Hver eneste linie skal overvejes i hoved og r..

Skriver man småscripts betyder det ikke så meget. Det gør det tit heller ikke, når man scripter på serveren (den har betydelig flere muskler at spille med) - men når man scripter store apps på klienten, er det noget helt andet.

Problemet er fantastisk udbredt (det er faktisk meget sjældent at opleve andet) blandt kodere og scriptere ... langt mere end blandt rigtige programmører. Formodentlig fordi de sidstnævnte har fået det ind med en grundig uddannelse i modsætning til kodere og scriptere, der oftest er selvlærte.

Backend'en på EasySite har (eller havde sidst, jeg så den) præcis samme mangler, men der mærker man det som sagt ikke så meget.

1. Udryd al redundans.
2. Gør koden objektorienteret, hvor det er en fordel (det er det langt fra altid).
3. Ryd seriøst op i alle data-containere (variabler og arrays) under afviklingen.
4. Kort variabel- og funktionsnavne ned til det mindst mulige.
5. Test, test og test igen alle stumpers afviklingstider.
... Så kan du flytte loftet meget væsentligt opad.

Det er ganske rigtig, hvad du skriver om samtidighed i IE, men den kan sagtens snuble over sine egne fødder, hvis koden ikke er afstemt ordentligt. Her kan enkelte delays hjælpe ganske væsentligt.

Det er desværre det bedste, jeg kan gøre for dig uden at se koden - og bruge en rum tid med den.
At skrive den slags apps tager lang tid, da den ofte skal skrives om flere gange - men det ved jeg godt, firmaet ikke har tid til.
Det er lidt en Catch 22 situation. You're damned if you do 'n' you're damned if you don't  :)
/mvh
Avatar billede karto Nybegynder
28. april 2003 - 12:13 #18
:-) Ja. Jeg er ved at prøve at fjerne nogle af alle mine HTC'er, for at se om det ikke hjælper. Det tror jeg det gør, men nu får vi af se.
Jeg har den her uge til at finde ud af det, så forhåbentligt, så virker det uden htc'er, så skal det bare kodes om.
Avatar billede karto Nybegynder
28. april 2003 - 12:14 #19
Ellers tak for sluderen, det er  godt at høre at du stadig er i live :-)

/Karto
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester