Crashing Mobile Webkit

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Einer der großen, herzzerreißenden Rückschläge bei der Einführung des neuen Designs war, dass der Ankündigungs-Blogbeitrag Safari auf einigen Mobilgeräten zum Absturz bringen würde. Er brachte mein iPhone 4S zum Absturz, ich hörte Berichte über Abstürze auf anderen Android-Geräten, aber er brachte mein iPad 2 nicht zum Absturz. Debugging auf Mobilgeräten ist bereits schwierig genug, aber das Debugging einer Seite, die die gesamte Anwendung zum Absturz bringt, ist noch schwieriger.

Also habe ich natürlich reduzierte Testfälle erstellt!

STÜRZT ab   STÜRZT NICHT ab

Mein Prozess bestand darin, die abstürzende Seite zu kopieren und dann langsam Elemente zu entfernen, bis der Punkt erreicht war, an dem sie nicht mehr abstürzte. Ich kam zu dem Punkt, an dem ich einen Kommentar aus dem Kommentar-Thread entfernte und er aufhörte abzustürzen. Diese beiden Dokumente stellen den Punkt dar, der dem Wendepunkt am nächsten kam. Beide haben die gesamte JavaScript entfernt. Beide verwenden exakt dasselbe CSS.

Hier sind einige Details zu den beiden Dokumenten.

STÜRZT ab STÜRZT NICHT ab
Dokumentgröße (un-gezippt) 131 KB 123 KB
Dokumentgröße (gezippt) 20,21 KB 19,55 KB
Anzahl der Anfragen 98 92
Gesamtseitengröße 1,42 MB 1,40 MB

Ein weiteres wichtiges Detail: Wenn Sie den Kommentarbereich auf einer der beiden Seiten ausblenden, stürzt diese nicht ab.

Das habe ich als Notlösung auf der Live-Seite implementiert. Es gibt eine Schaltfläche "Kommentare anzeigen", auf die Sie klicken können, um den Kommentar-Thread anzuzeigen. Wenn Sie auf dieser Seite darauf klicken, wird sie zum Absturz gebracht.

Nur weil Elemente versteckt sind, heißt das nicht, dass sie nicht im DOM vorhanden sind, daher können wir die DOM-Größe als Absturzfaktor ausschließen.

Alle sichtbaren Kommentare verbrauchen zwar mehr Speicher (wahrscheinlich viel) und erhöhen auch die Seitenhöhe extrem.

Eine weitere relevante Tatsache: Das Entfernen des CSS stoppt die Abstürze. Das CSS ist nur 37 KB un-gezippt und 7,32 KB gezippt. Es enthält jedoch einige CSS3-Funktionen wie Verläufe und Schatten.

Warum poste ich das?

Wissenschaft! Ich möchte, dass mehr Augen auf diese reduzierten Testfälle fallen, um zu sehen, ob wir sie noch weiter reduzieren und einige Ursachen dafür entdecken können. Es ist schon ein bisschen schade, dass man mit nur ziemlich einfachem HTML und CSS das mobile Webkit zum Absturz bringen kann. Vielleicht ist es etwas sehr Einfaches und wir können die Nachricht verbreiten. Und für meine eigenen Zwecke kann ich das verdammte Absturzproblem beheben, ohne auf etwas wie paginierte Kommentare zurückgreifen zu müssen, was ich wirklich vermeiden möchte.