2 votes

Exécuter différents scripts JavaScript en fonction du navigateur

Effacer le canvas donne des performances très différentes sur différents navigateurs. Voir http://jsperf.com/canvas-clearing2 .

J'ai besoin de vider un canvas à chaque frame et la manière dont je le fais a un impact énorme sur les performances de Mobile Safari par rapport à Desktop Safari. Desktop Safari préfère canvas.width = width mais mobile safari préfère canvas.clearRect() .

Existe-t-il un moyen de détecter quel navigateur est quel et d'exécuter un JavaScript différent en fonction de cela? Je préférerais le faire via JavaScript plutôt que côté serveur.

De plus, j'ai constaté que $.browser de jQuery ne fonctionne pas parce qu'il ne fait pas la distinction entre mobile safari et desktop safari. L'objet navigator a des problèmes similaires.

3voto

jfriend00 Points 152127

Cibler des navigateurs spécifiques pose toujours un peu problème. Bien qu'il y ait certainement des moyens de le faire, ce n'est pas une méthode particulièrement maintenable car il existe de nombreux navigateurs différents et des versions de chaque navigateur, et ces navigateurs changent avec le temps, donc lesquels sont optimisés par quel code peuvent changer tout le temps. Cela crée un véritable casse-tête en matière de maintenance. Par exemple, Mobile Safari sur un iPod Touch a des caractéristiques de performance très différentes de Mobile Safari sur chaque génération différente d'iPhone ou d'iPad.

Donc ... au lieu d'essayer de détecter le type de navigateur, il est beaucoup mieux de faire une détection de fonctionnalités ou de performances et d'ajuster dynamiquement en fonction de la réaction de chaque navigateur. Bien fait, cela peut fonctionner aussi bien pour tous les navigateurs, même pour ceux que vous n'avez jamais vus ou qui ne sont pas encore sortis.

Dans votre cas, vous pourriez concevoir un test rapide de performance qui teste la performance de chacune de vos deux méthodes. S'il y a vraiment une grande différence de performance entre les deux méthodes, alors vous pourriez probablement distinguer la différence en quelques centaines de millisecondes, définir un cookie sur le navigateur local indiquant la méthode qui fonctionne le mieux, puis utiliser simplement la méthode préférée dans ce navigateur à partir de ce moment-là. Si vous le souhaitez, vous pourriez laisser le cookie expirer tous les quelques mois (pour le retester de temps en temps) ou vous pourriez mettre le numéro exact de la version du navigateur dans le cookie également et relancer les tests et définir un nouveau cookie si la version du navigateur a changé (mises à jour logicielles).

De cette manière, votre code utiliserait toujours la version la plus rapide de votre code dans tous les navigateurs, maintenant et pour toujours, sans que vous ayez jamais à maintenir/tester des milliards de navigateurs pour savoir lequel devrait être utilisé pour chacun.

1voto

dhira Points 530

Je suis d'accord avec jfriend00 sur ce point si vous cherchez des solutions plus durables et plus sûres. Cependant, vous pouvez toujours obtenir beaucoup d'informations avec certaines fonctions en Javascript et en tirer parti.

Jetez-y un œil:

http://notnotmobile.appspot.com/

Autres ressources

Objet Navigator: http://www.w3schools.com/js/js_browser.asp

Détection du navigateur: http://www.quirksmode.org/js/detect.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X