FAQ |
Kalender |
2009-04-15, 19:18 | #1 | ||
|
|||
Mycket flitig postare
|
Hej! Längesen man hängde här nu...
Jag gör en kalender (hotelliggare) som tidigare har skapats genom html-kod från php och skickats till klienten, nu är det omarbetning modell större på gång och tänkte då flytta renderingen till javascript istället. Jag har kommit långt tycker jag, men det tycker inte IE... Min liggare funkar utmärkt i FF, och tar kanske 2 sekunder att bygga tabellen (f.n. ~ 100 rader och 30 kolumner). I IE6 däremot tar det 10-15 sekunder, och IE7 5-10s. Inga problem egentligen även om det är tröttsamt att vänta. (IE6 käkar ca 150MB vid detta tillfälle, FF ~80MB) Problemet uppstår när jag uppdaterar eller lämnar sidan (klickar på en annan länk), då får jag ett antal frågor om jag vill tillåta skripten att fortsätta för att ie går långsamt, men jag har inga (mig veterligen) skript som kör när man lämnar sidan... Info: Använder Mootools för att skapa tabellen Kod:
new Element('td').inject(new Element('tr').inject(table)); Oj. Mycket text... Jaja, ha det så länge! |
||
Svara med citat |
2009-04-15, 21:21 | #2 | |||
|
||||
Mycket flitig postare
|
Du borde få betydligt bättre prestanda om du jobbar mot en container som inte är del av sidans DOM. Antingen en löst hängande DOM-nod eller ett fragment (document.createDocumentFragment()).
|
|||
Svara med citat |
2009-04-16, 12:39 | #3 | |||
|
||||
Mycket flitig postare
|
Jag vet inte om det är lösningen du letar efter men det kanske går lite snabbare: använd XSLT från XML-dokumentet jag antar du har som grund. Även detta går att göra på klienten.
Explorers javascript-motor är tyvärr väldigt seg (med exempelvis Chrome eller Safari borde du få ännu snabbare resultat). Kanske fungerar IE bättre med element.innerHTML += '<tr>…</tr>' (bara en chansning). Jag själv skulle nog använda egna DOM-funktioner för att kunna optimera koden om jag inte skulle använda xsl. |
|||
Svara med citat |
2009-04-16, 16:18 | #4 | ||
|
|||
Medlem
|
har för mig att det är problem med minnesläckage med DOM manipulationer som dessa ..testa annars något stil med:
http://blog.markturansky.com/BetterJ...Templates.html för att även få enklare underhåll av koden.. |
||
Svara med citat |
2009-04-17, 14:29 | #5 | ||
|
|||
Mycket flitig postare
|
Citat:
Ang. XSLT så har jag inte f.n. ett xml-dokument som grund. Mitt php-skript hämtar ur db och skriver JSON som sedan renderas med JS. Gjorde en liten snabbkoll, och min JSON ligger runt 20kB och motsvarande html/xml-kod runt 240kB, och i min json har jag dessutom mycket överflödig info som inte används i xml. En löst hängande dom-nod: är det t.ex. att jag skapar en nod utan att lägga dokumentet som förälder? Ex. Kod:
var table = new Element('table'); Kod:
table.inject(document.getElementById('table_position')); Annan fråga: just nu ligger följande kod där tabellen skall vara: Kod:
<div id="table_position"></div><script type="text/javascript> cal.render('table_position'); </script> Skall jag kanske placera koden i onLoad eller onDomReady så att tabellen renderas när sidan är färdig? |
||
Svara med citat |
2009-04-17, 16:48 | #6 | |||
|
||||
Mycket flitig postare
|
Citat:
Citat:
Citat:
|
|||
Svara med citat |
2009-04-29, 23:45 | #7 | |||
|
||||
Mycket flitig postare
|
Hur gick det?
|
|||
Svara med citat |
2009-05-01, 20:07 | #8 | ||
|
|||
Mycket flitig postare
|
Jo, liten statusrapport. Problemet var inte renderingen, utan mootools Garbage Collection. När jag använde funktionen new Element(); så skapas ett element med alla mootools-funktioner vilket senare måste trashas när man lämnar sidan. Detta tog ca. 90% av laddningstiden (läs 5-6 sek i FF). Testade även en större tabell (ca 20.000 celler), och då var unload ca 10 sek.
Har nu skrivit om min rendering till att skapa en html-sträng och sedan sätta div.innerHTML till denna sträng. Renderar något snabbare än mootools, och ingen garbage att samla in. Sidan kan lämnas direkt. Vet inte hur det prestandamässigt är att skapa en html-sträng med 20000+ celler (50-100 celler per rad) och sedan skicka den till DOM med innerHTML jämfört mot t.ex. document.createElement. Har bara konstaterat att mootools (v1.11) inte skall av´nvändas till stora dynamiska tabeller. |
||
Svara med citat |
2009-05-09, 20:18 | #9 | |||
|
||||
Mycket flitig postare
|
Ok, trevligt med lite information och slutsatser. Det kommer säkert hjälpa nån annan framöver.
|
|||
Svara med citat |
2009-07-06, 14:43 | #10 | ||
|
|||
Mycket flitig postare
|
Hej igen! Tar nu upp en gammal tråd igen för jag har stött på problem...
Skriptet hänger sig eller tar upp ca 300 MB minne så måste göra något åt detta. (Lite beroende på vilken dator osv...) Har f.n. ungefär 120 rader med 30-40 celler per rad ( = ~5000 celler ) och attribut och innehåll i de flesta. Nu renderas innehållet som rå html och läggs in i div med innerHTML. Kanske det funkar bättre att rendera med document.createElement ? |
||
Svara med citat |
Svara |
|
|