HTML5 ApplicationCache sucks!

Die vom W3C publizierte Definition des ApplicationCache ist meiner Meinung nach eine gute Sache. Offline-fähige Websites und Apps sind beim aktuellen Stand der mobilen Netzabdeckung immer noch wichtig.

Leider leidet die Schnittstelle an zu wenig Kontrolle seitens der Programmlogik. Es ist z.B. nicht möglich aus JS heraus einen bestehenden Cache zu löschen oder das Herunterladen von Dateien zu unterbrechen. Das einzige was als Programmierer über die API möglich ist zum einen applicationCache.update() aufzurufen, woraufhin das Cache-Manifest auf Änderungen überprüft wird und zum anderen applicationCache.swapCache(), womit lediglich der alte Cache mit dem neuen ausgetauscht werden kann.

Es ist also eine Read-Only Schnittstelle, wo der Programmierer zum Beobachter wird. Auch wenn kein JS implementiert wurde, kann der Browser nicht daran gehindert werden, das festgelegte Cache-Manifest samt Dateien und Inhalte herunterzuladen (um den Start z.B. selber festzulegen). Hinzu kommen Quota-Beschränkungen seitens des Browsers und unterschiedliche Verhaltensweisen in den Browser-Implementierungen.

Safari z.B. kriegt Probleme, wenn mehrere iFrames auf dasselbe Cache-Manifest zugreifen, da nicht wie in Chrome und Firefox alle iFrames alle Events erhalten, sondern Safari nur einem iFrame das Privileg gibt alle Events (im Speziellen die abschließenden Events wie: noupdate, updateready, cached oder error) zu erfassen.
Die Verwendung im UIWebView einer iOS-App ist zwar möglich, aber dort stößt man bei ca. 50 MegaByte an die Grenze der ApplicationCache-Quota, welche sich im UIWebView nicht anpassen lässt (getestet im IAB von PhoneGap). Apropos Größe, bei einer Datei-Anzahl > 200 kann es bei Safari und iOS schon eine Weile dauern bis alle Dateien erfolgreich heruntergeladen wurden.

Hoffentlich wird es mit HTTP/2.0 und Service Worker bald besser!

Battery Status API

Es gibt eine Battery Status API, vorgeschlagen vom W3C, welche aktuell im Google Chrome implementiert wurde.

Was die API liefert, kann man in dem folgenden Screenshot sehen (Chrome 40)

battery-status-api

Damit könnten performance-lastige Aktionen / Berechnungen / Animationen einer Web-App z.B. für eine bestimmte Zeit beschränkt oder ganz deaktiviert werden. Außerdem vereinfacht es hybriden Apps das Auslesen von Systeminformationen.

Das ganze funktioniert dabei mit Promises, welche man mittlerweile an vielen Stellen (wie jQuery, AngularJS, …) wieder findet.

Weiterführende Links und Themen:

WordPress Cache Manifest Builder Plugin

Das eigens von mir entwickelte Plugin für WordPress namens „Manifest Builder“ zur Generierung eines Cache-Manifests, befindet sich aktuell in der Version 0.5 und lädt bereits automatisch alle Beitrags- und Kategorielinks in das HTML 5 Cache-Manifest. Zusätzlich können über das WordPress-Backend weitere Dateipfade hinzugefügt werden, die zum Beispiel zu Bildern und JavaScripts des aktuellen Themes verweisen. „WordPress Cache Manifest Builder Plugin“ weiterlesen

Virtuelle Maschinen für den Browser

Bisher konnte man auf virtuelle Maschinen nur mittels spezieller Software zugreifen. Mit der kostenlosen Virtual Box von Oracle oder der VMware Workstation können virtuelle Systeme erzeugt und benutzt werden. Mit XenCenter können virtuelle Maschinen sogar über ein Netzwerk gesteuert und verwaltet werden.

Nun kommt jedoch eine Technik, die es ermöglicht, virtuelle Maschinen im Netzwerk oder Internet über einen normalen Browser zu benutzen, der keine Plugins oder Erweiterungen benötigt. „Virtuelle Maschinen für den Browser“ weiterlesen