2010-10-30 8 views
1

Il semble vraiment difficile d'améliorer les performances d'un UIWebView, en particulier pour des sites Web comme Mashable ou Ars Technica, où des tonnes de scripts sont chargés et de longs articles de plusieurs pages sont courants.Comment améliorer les performances de défilement d'UIWebView?

Je suis au courant de 3 questions similaires, mais ils ont tous deux pas de solution de travail:

  • UIWebView scrolls jerkily - appels API privées comme -(void)_setDrawInWebThread:(BOOL)arg1 et -(void)_setDrawsCheckededPattern:(BOOL)arg1 sont proposées, et nous savons qu'ils ne sont pas autorisés dans l'App Applications du magasin
  • How to get fast, smooth scrolling with UIWebView? - quelqu'un a parlé de CATiledLayer, mais il n'y avait pas de pointeur clair sur la façon de l'implémenter. Brad Larson a déclaré qu '"il n'y a aucun moyen de sauvegarder manuellement un UIWebView avec un CATiledLayer, en raison de son architecture de rendu complexe."

Je me demande s'il y a des solutions à ce problème. Toutes les suggestions sont les bienvenues.

Répondre

5

J'ai bien peur qu'il n'y en ait pas. Les gros sites Web restent gros et consomment beaucoup de mémoire.

Je dirais contre Brad Larson: sauvegarder une webview dans un CATiledLayer propre est techniquement possible (faites juste [webView.layer renderInContext: ]) mais cela n'a pas beaucoup de sens. Les couches en mosaïque se chargent paresseusement, tout comme les vues Web. Vous auriez besoin d'une quantité énorme de code fin pour détecter quand la page a fini de charger, puis pour mettre les choses en cache dans votre couche en mosaïque et ainsi de suite.

Malgré cela, le webview est en réalité assez optimisé. Je dirais même que c'est l'une des choses les mieux optimisées dans l'ensemble de l'iOS. C'est le composant critique de performances le plus utilisé sur l'ensemble de la plate-forme. Chaque texte multiligne est un webview (UITextView est implémenté en les utilisant, par exemple). Si le WebView se brise sur un site Web, vous aurez du mal à le rendre plus rapide.

Il existe des cas où une solution différente peut également fonctionner, mais seulement si vous recherchez quelque chose de spécial. Si vous ne l'êtes pas, laissez vos mains libres et investissez le temps ailleurs. Just my 2 cents ...

+4

Merci pour votre réponse. J'ai posé cette question au support technique d'Apple pour les développeurs, et voici ce qu'ils m'ont dit: "Pour le moment, nous ne fournissons aucun mécanisme pour optimiser le rendu d'UIWebView, car la différence est due à Mobile Safari et UIWebView. en utilisant le même moteur de rendu La performance dépend du contenu chargé Si javascripts est en cours d'exécution ou si des plugins sont utilisés, cela peut nuire aux performances.Je vous recommande de déposer un rapport de bogue détaillant votre situation. Cela vous tiendra également au courant de l'état de votre rapport de bogue. " –

+0

D'accord, ça sonne, je pense." Finalement, ça pourrait aller plus vite " –

1

Je ne sais pas vraiment si cela peut aider ou est précis compte tenu de la question, mais voici ce que je dois dire:

Certaines propriétés comme l'ombre ou un dégradé, et même les images à l'intérieur du WebView affectent beaucoup les performances que vous pouvez obtenir. Essayez de ne pas les utiliser et/ou de les garder le moins possible.

1

Certaines applications de navigateur Web comme iCab et Atomic Web Browser semblent utiliser la méthode _setDrawInWebThread: et elles sont clairement autorisées dans le magasin d'applications. S'ils n'utilisent pas cette méthode, ils utilisent quelque chose qui fonctionne de manière identique pour leurs UIWebViews. Est-ce que quelqu'un sait avec certitude qu'Apple rejette les applications qui utilisent cette API privée? Pourraient-ils laisser passer celui-là par "silencieusement"? Je suis surpris qu'Apple n'en ait pas fait une API publique à ce jour, car toute application qui utilise un UIWebView pour afficher une page Web (et il y a beaucoup d'applications de haut niveau qui le font, FlipBoard par exemple) rend l'appareil "instable" 'et sous-performant ...

Questions connexes