Hallo,
da meine mh-iPhone-Visu recht viele Seiten hat und mein iPod touch (1.Gen) recht lahm hat mich schon seit geraumer Zeit die Ladezeit gestört. Insbesondere wer unterwegs ist, sein UMTS-Limit erschöpft hat und nur mit GPRS auf die Visu zugreifen kann, wird verstehen, was ich meine...
Daher habe ich mich dran gemacht, die Möglichkeit des asynchronen Nachladens von Layern per Ajax zu untersuchen und möchte Euch hier das Resultat vorstellen.
Bisher lädt die Visu beim Zugriff von index.shtml sämtliche Layers auf einmal und wechselt beim Navigieren dann nur die sichtbare Layer aus ohne etwas neu zu laden. Die Idee ist nun, immer nur die Daten zu laden, welche für die anzuzeigende Layer relevant sind. Das reduziert die initial zu übertragende Datenmenge erheblich und hat noch den netten Nebeneffekt, dass die Stati der Objekte im Untermenü wirklich aktuell sind (da sie ja erst on-demand geladen werden).
Das ganze funktioniert bei mir super gut und der Benutzer merkt von asynchronen Zugriffen im Hintergrund fast gar nichts.
Ich habe die Änderungen so gestaltet, dass es komplett rückwärtskompatibel ist. Soll heißen, Ihr könnt meinen Patch einspielen und es sollte erstmal alles laufen, wie bisher.
Die geänderten Dateien sind mh/lib/http_server.pl und mh/code/public/iphone.pl. Die Patches habe ich angehängt. Wer keine Patches mag, findet die aktuellen Dateien auch im iphone-async.zip.
Um die asynchronen Zugriffe zu aktivieren, braucht Ihr den folgenden Eintrag in der mh.private.ini:
Zusätzlich muss noch in der index.shtml eine neue JS-Funktion eingetragen werden:
Die angepasste "standard" index.shtml findet sich ebenfalls im Zip. Die meisten werden jedoch eine individuelle Startseite haben, daher ist das eintragen der obigen Funktion sehr wichtig. Um eine Async-Layer auf einer individuellen Startseite einzubinden benötigt man die folgende Zeile:
Auch hier habe ich eine Beispielseite ins Zip gepackt.
Ich benutze übrigens die neueste Version des WebApp-UI-Frameworks, kann also nicht garantieren, dass es auch alles sauber auf einer älteren Version davon funktioniert. Aber ich würde sowieso ein Upgrade empfehlen (einfach das web/iphone/WebApp Verzeichnis austauschen), da in der letzten Zeit dort auch zahlreiche Bugs gefixt wurden.
Ich würde mich über Euer Feedback dazu freuen! Wenn's positiv ausfällt werde ich zusehen, das ganze ins mh-SVN committen zu lassen.
Viele Grüße,
Kai
P.S.: Seit wann sind in der iphone.pl die Icons nicht mehr 29x29 sondern 32x20 groß? Bei mir sieht nach dem letzten SVN update alles ziemlich gestaucht aus...
da meine mh-iPhone-Visu recht viele Seiten hat und mein iPod touch (1.Gen) recht lahm hat mich schon seit geraumer Zeit die Ladezeit gestört. Insbesondere wer unterwegs ist, sein UMTS-Limit erschöpft hat und nur mit GPRS auf die Visu zugreifen kann, wird verstehen, was ich meine...
Daher habe ich mich dran gemacht, die Möglichkeit des asynchronen Nachladens von Layern per Ajax zu untersuchen und möchte Euch hier das Resultat vorstellen.
Bisher lädt die Visu beim Zugriff von index.shtml sämtliche Layers auf einmal und wechselt beim Navigieren dann nur die sichtbare Layer aus ohne etwas neu zu laden. Die Idee ist nun, immer nur die Daten zu laden, welche für die anzuzeigende Layer relevant sind. Das reduziert die initial zu übertragende Datenmenge erheblich und hat noch den netten Nebeneffekt, dass die Stati der Objekte im Untermenü wirklich aktuell sind (da sie ja erst on-demand geladen werden).
Das ganze funktioniert bei mir super gut und der Benutzer merkt von asynchronen Zugriffen im Hintergrund fast gar nichts.
Ich habe die Änderungen so gestaltet, dass es komplett rückwärtskompatibel ist. Soll heißen, Ihr könnt meinen Patch einspielen und es sollte erstmal alles laufen, wie bisher.
Die geänderten Dateien sind mh/lib/http_server.pl und mh/code/public/iphone.pl. Die Patches habe ich angehängt. Wer keine Patches mag, findet die aktuellen Dateien auch im iphone-async.zip.
Um die asynchronen Zugriffe zu aktivieren, braucht Ihr den folgenden Eintrag in der mh.private.ini:
Code:
iphone_async = 1
Code:
function AsyncLoad(item) { WA.Request("../SUB;&iphoneWebApp('" + item +"','iasyncLayer')#_" + item, null, -1, true, null); }
Code:
<li><a href="#_Gruppenname" onclick="AsyncLoad('Gruppenname')"><img src="/graphics/gruppenicon.png" width=29 height=29 />Gruppenname</a></li>
Ich benutze übrigens die neueste Version des WebApp-UI-Frameworks, kann also nicht garantieren, dass es auch alles sauber auf einer älteren Version davon funktioniert. Aber ich würde sowieso ein Upgrade empfehlen (einfach das web/iphone/WebApp Verzeichnis austauschen), da in der letzten Zeit dort auch zahlreiche Bugs gefixt wurden.
Ich würde mich über Euer Feedback dazu freuen! Wenn's positiv ausfällt werde ich zusehen, das ganze ins mh-SVN committen zu lassen.
Viele Grüße,
Kai
P.S.: Seit wann sind in der iphone.pl die Icons nicht mehr 29x29 sondern 32x20 groß? Bei mir sieht nach dem letzten SVN update alles ziemlich gestaucht aus...
Kommentar