Pourquoi un simple site web plante-t-il sur un mobile (iOS Safari et Chrome, au moins)?
J'ai un site qui est très simple, mais très longue, beaucoup de texte qui pourrait être fait défiler. C'est un site de documentation, et compte tenu de la nature du contenu (beaucoup de court de participations similaires) j'ai décidé de montrer tout à la fois, de sorte que l'utilisateur peut, soit passer d'une entrée à l'autre ou de naviguer via une barre latérale de l'index. Il est commun de documentation du modèle que j'aime (par exemple,Trait de soulignementÉpine dorsaleet LoDash).
Le site est ici: http://davidtheclark.github.io/scut/. Vous pouvez consulter la pré-production de code ici: https://github.com/davidtheclark/scut/tree/master/docs/dev.
Et voici le problème: Pour un nombre d'utilisateurs de ce site régulièrement des plantages leurs navigateurs iOS. Pas tous les utilisateurs (pas moi), mais pour ceux qui ne expérience de l'accident, il semble se reproduire de manière cohérente. (Le site peut également se bloquer certaines personnes, les téléphones Android, je ne sais pas: vous n'avez pas entendu parler de tous les utilisateurs d'Android.) Je suis en espérant que quelqu'un peut m'aider à diagnostiquer et éventuellement résoudre ce problème.
Partie de la difficulté que j'ai est que je ne peut pas reproduire le crash de moi-même -- pas sur mes propres appareils iOS, pas sur Xcode simulateurs. Parce que le site n'est pas à toutes les ressources lourd (~70KB charge) et comprend très peu de JavaScript, et à cause des effets de quelques tentatives antérieures pour résoudre ce problème, je suppose que le problème implique l'utilisation de la mémoire -- que les navigateurs iOS sont s'écraser parce que le site est exigeant trop de mémoire. Mais je ne suis pas sûr c'est la question, et si elle est, je ne suis pas sûr de savoir comment je peux le résoudre.
Je ne suis pas sûr de ce que d'essayer la prochaine, et j'espère que certains férus StackOverflow deux férus d'avoir des conseils. Qu'est-ce à propos de ce site, qui semble si simple et de base à mes yeux, c'est de faire en sorte gourmandes en mémoire que c'est de s'écraser navigateurs?
Est-il trop long? Est-il CSS qui est trop difficile à rendre? Sont là JavaScript fuites de mémoire?
Je me suis intéressée à la fois pour le bien de ce site particulier, et afin que je puisse apprendre à anticiper et à prévenir et/ou de diagnostiquer et résoudre des problèmes similaires sur d'autres sites dans le futur.
N'hésitez pas à regarder ou de contribuer à [l'Github question] (dans cette Github problème.
Additif
Voici quelques choses à savoir sur le site qui pourraient être utiles:
- Le code HTML doc est grand par rapport à d'autres sites HTML docs. Unminified il semble être ~225KB. (J'ai remarqué que LoDash docs sont encore plus -- est-ce que le site de crash du peuple téléphones?)
- L'servi HTML doc est minimisé.
- Servi CSS et JS sont également minimisé.
- Le site utilise Prism.js pour la coloration syntaxique.
- Le site utilise Renverser de faire les 2 à défilement-colonnes de mise en page de travail sur les tablettes.
<aside id="help-content">
est fixe et traduit en dehors de l'écran; il glisse lorsque vous cliquez sur [?] comme celui d'aucune utilité "utiliser l'-nom".
Un iOS de Crash
Ces compter sur moi pour être potentiellement pertinentes lignes d'un rapport d'accident à partir d'un iPhone équipé de Chrome et de s'écraser sur le site (je ne suis pas sûr de savoir si elles sont pertinentes ou pas parce que je n'ai pas encore développé les applications iOS et ne connais pas les tenants et les aboutissants de ces rapports):
Free pages: 5674
Active pages: 117674
Inactive pages: 55121
Speculative pages: 3429
Throttled pages: 0
Purgeable pages: 0
Wired pages: 60906
File-backed pages: 23821
Anonymous pages: 152403
Compressions: 356216
Decompressions: 121241
Compressor Size: 16403
Uncompressed Pages in Compressor: 49228
Largest process: Chrome
[...]
Chrome <2a759438c2253e3baededaa0d13feb56> 166479 166479 200 [per-process-limit] (frontmost) (resume)
source d'informationauteur davidtheclark
Vous devez vous connecter pour publier un commentaire.
Je pense que j'ai corrigé!
Le problème, comme suspect, a été rendu, de la peinture causés par la mise en forme CSS. Téléphone de la taille, j'avais été cacher le contenu de chaque entrée jusqu'à ce qu'il a choisi; et la méthode que j'avais utilisé pour les cacher, et de supprimer toute trace d'eux à partir de la mise en page, inclus
position: absolute
. Je n'ai pas de recourir d'abord àdisplay: none
en raison de préoccupations typiques de l'envie de ne pas voir le contenu, mais le garder ilpour les différents lecteurs et des raisons. J'ai jeté ces préoccupations de côté et changé la mise en page afin que les entrées ont été cachés avecdisplay: none
et illustré avecdisplay: block
-- et qui semble avoir fixé le crash.Je pense que le positionnement absolu est empilement d'une énorme quantité de contenu dans le coin de l'écran, et bien qu'il n'était pas visible, il était exigeant de la mémoire.
Ce clued sur moi pour essayer ceci était une réponse à une autre question, liée ci-dessus, par @tea_totaler: https://stackoverflow.com/a/14866503/2284669. Il dit:
Je pense que mes autres se cachant méthode a été pas la libération de la mémoire, en dépit de ses autres avantages (qui étaient peut-être pas pertinent pour ce site particulier, de toute façon). Je suis sûr que c'est devenu un problème que parce que le site a été si longtemps.
C'est quelque chose à considérer, cependant, lorsque vous souhaitez masquer un élément: rendu/demandes de mémoire.
Sur mon site, il a été causé par des éléments avec la propriété css
-webkit-backface-visibility: hidden
retrait de cette propriété fixe tous les accidents!
voir iOS: Plusieurs divs avec -webkit-backface-visibility:hidden crash du navigateur lorsque le zoom
J'ai couru un audit avec Chrome sur le site. Il a suggéré ceci:
Supprimer les règles CSS (44)
44 règlement (10%) de la CSS n'est pas utilisé par la page en cours.
css-construit.min.css: 10% n'est pas utilisé par la page en cours.
Le gestionnaire de tâches sur Chrome indique que la page prend environ 2x comme quantité de mémoire que d'autres sites, comme stackoverflow et dropbox. Je recommande la répartition des fonctions dans des pages séparées au lieu d'une longue page. En séparant les fonctions qu'il permettrait d'améliorer le serveur de l'efficacité et le navigateur du temps de chargement et utilisation de la mémoire. Il y aurait moins de JavaScript et de CSS en cours d'exécution sur chaque page, et de plus petites quantités de données seraient envoyés à partir du serveur. En ayant toutes les caractéristiques sur la page d'accueil est inefficace. Par exemple, si un utilisateur a uniquement besoin de chercher comment faire une Icône de Police de l'Étiquette qu'ils auraient à charge d'autres sections de la page qui ne sont pas nécessaires et de prendre de la mémoire.
Désolé pour juste faire un devine, mais je vois deux causes potentielles dans votre feuille de style qui pourrait être issu de collision
1.) À l'aide de données d'url pour l'image de fond de rendu comme ici
2.) Aussi -webkit-transition pourrait être le coupable. Lire ici pour plus d' https://stackoverflow.com/a/11833285/900132
Votre balisage HTML a quelques erreurs (comme une balise div à l'intérieur d'une balise h1) qui doivent être corrigés avant d'essayer d'analyser un accident.
Je vous suggère de le lancer à travers un validateur HTML, par exemple http://validator.w3.org/check?uri=http%3A%2F%2Fdavidtheclark.github.io%2Fscut%2F&charset=%28detect+automatically%29&doctype=Inline&group=0
La div à l'intérieur de h1 apparemment causé une cascade d'erreurs que le validateur a dû supprimer pour continuer.
Quand j'ai le navigateur s'écraser problèmes, la validation HTML est toujours ma première étape. Ensuite, j'essaie de voir ce qui pourrait être mal avec le javascript si la correction du HTML n'a pas aidé.
Je viens de lire ce post et essayé http://davidtheclark.github.io/scut/ sur mon iPad. Chrome se bloque immédiatement, bien que parfois peu de temps montre la page d'accueil. Safari affiche la page d'accueil correct et de nombreuses autres pages, mais en cliquant sur "à propos de > l'installation" lien sur la gauche la fait planter tout de suite (enfin, une fois qu'il affiche OK, mais en cliquant de nouveau il s'est écrasé). Tout cela est assez cohérent.
Les erreurs sont en effet en raison de LowMemory et c'est le processus de navigateur qui utilise le plus de mémoire. Les accidents peuvent arriver à environ 150000 pages (4KO/page? => 600 mo d'espace disque???).
Cela étant dit, j'ai peur de ne pas avoir de réponse à votre question. Espérons que cela aide au moins un peu.
Salutations,
/Sigiswald
Retrait
position: sticky;
m'a aidé et mon mobile safari problèmes de plantage. Vous ne savez pas exactement pourquoi.