Encore sur le cache de l’iPhone

L’iPhone a changé la donne sur la consultation du web par les mobiles. Avant nous luttions pour faire comprendre que les performances des sites web devaient aussi être adaptées à une consultation avec une grande latence et une très faible bande passante. Maintenant nous voyons même apparaître des sites spécifiques iPhone.

Apple lui même met clairement en avant les performances de la navigation iPhone, au point de tricher dans ses publicités en montrant un scénario de navigation accéléré par rapport aux situations réelles (la publicité a d’ailleurs été interdite au Royaume Uni à cause de cela).

Reste que la bataille des performances n’est pas gagnée.

Encore il y a peu nous parlions d’un cache HTTP limité à 25ko par composant sur l’iPhone, 500ko au total. On parle de la taille une fois la ressource décompressée (sans gzip donc). 25ko c’est peu, la plupart des sites ont un composant qui dépasse cette taille. 500ko ce n’est pas beaucoup mieux, naviguez sur un ou deux sites et le cache aura complètement oublié vos précédentes visites. Pire, des bibliothèques javascript comme jquery dépassent les 25ko et donc ne passeront jamais dans le cache.

Moins de restriction par composant

La bonne nouvelle c’est que cette limite est désormais dépassée. Une présentation de Nicole Sullivan indique que la limite des 25ko a disparue, et que la taille globale du cache a été doublée.

Malheureusement je n’ai trouvé aucune autre source d’information, donc avec Anthony Ricaud nous avons lancé un petit test. Le résultat c’est que l’iPhone 3G (firmware 2.1) met bien en cache les images de plus de 25ko. Je n’ai pas tenté de trouver la limite, mais une image de 180ko part dans le cache correctement.

Mais un racisme anti-HTML

La mauvaise nouvelle c’est que dans nos tests Safari iPhone ne met jamais en cache la page HTML principale. Nous avons tenté des entêtes d’expiration explicites, des pages de 3ko. Rien n’y fait. la page elle-même est à chaque fois retéléchargée par l’iPhone alors que sur mon Safari Mac classique, lui, se sert bien du cache.

C’est un moindre mal, mais c’est une limitation assez peu compréhensible. Si quelqu’un me trompe une raison légitime de castrer le cache ainsi seulement sur le mobile, je suis preneur.

À vous pour la suite

Le cache de l’iPhone est définitivement différent de celui d’un Safari classique. Je n’ai malheureusement pas d’iPhone pour tester* donc à ceux que ça intéresse, je suis preneur des résultats suivants (pour la v1 et la version 3G) :

  • quelles sont les nouvelles limites par composant ?
  • quelle est la nouvelle limite globale ?
  • ces limites sont-elles les même wifi et en 3G ?
  • le HTML principal est-il mis en cache lors d’une connexion wifi ?
  • nous avons testé avec une image, est-ce la même chose avec une feuille de style ou un javascript ?

Le protocole de test est assez simple, je vous met ici en copie une petite archive des fichiers PHP que j’ai utilisé pour mon test avec Anthony.

Bref, à vous de tester, et de commenter ici avec vos résultats (n’oubliez pas de faire un lien vers votre protocole de test et de donner la version exacte de votre iPhone, sans ça les résultats sont moins utiles).

(* Ceci est un message subliminal à celui qui veut financer mes recherches sur le sujet)

Publié par edaspet

Plus d'informations sur mon profil en ligne

6 réponses sur « Encore sur le cache de l’iPhone »

  1. J’ai fait les tests avec mon ipod Touch première génération, fimware 2.2 et Safari 3.1.1 : résultat le HTML principal n’est jamais mis en cache, le compteur serveur et date augmente à chaque test. Les images elles sont mises en cache. Si on force le chargement avec le bouton reload, alors les compteurs des images s’incrémentent.

  2. A propos du « pourquoi pas de cache sur la page HTML ». Je pense que la raison est tout simplement du coté des deals avec les opérateurs. Ou comment générer plus de traffic, donc un meilleur ARPU (Average Revenu Per User).

  3. J’ai fait le test avec un iPhone première génération et j’ai les mêmes résultats en Edge ou en wifi. J’attends les tests JS et CSS que je t’ai envoyé.

    Il faudrait aussi écrire un test pour le nombre maximum de ressources mises en cache.

Les commentaires sont fermés.