Pourquoi les fonctions de réseau natif sont-elles beaucoup plus lentes que la boucle?

La question est dans le titre, mais voici une explication plus longue.

Il y a longtemps, j'ai appris de jolies fonctions javascript comme la réduction, le filtrage, la carte et ainsi de suite . Je les aime vraiment et j'ai commencé à les utiliser fréquemment (ils ont l'air élégant et je pensais que parce qu'ils sont des fonctions natives, ils devraient être plus rapides que mes anciennes boucles).

  • Javascript Regexp - Correspond à des personnages après une certaine phrase
  • Comment puis-je faire cette expression régulière ne peut pas entraîner un «retour en arrière catastrophique»?
  • Recommander une bonne bibliothèque de statistiques javascript?
  • Decoding hex string dans javascript
  • Exécuter la tâche de fond en Javascript
  • Comment créer un lien en utilisant javascript?
  • Récemment, j'ai dû effectuer de gros calculs js, alors j'ai décidé de vérifier à quel point ils sont plus rapides et à ma grande surprise qu'ils ne sont pas plus rapides, ils sont beaucoup plus lents (de 3 à 25 fois plus lente)

    Aussi, je n'ai pas vérifié pour chaque fonction, voici mes tests jsperf pour:

    • Filtre (25 fois plus lent)
    • Réduire (3 fois plus lentement)
    • Carte (3 fois plus lente)

    Alors, pourquoi les fonctions natives sont-elles beaucoup plus lentes que les anciennes boucles et ce qu'il fallait les créer si elles ne font rien de mieux.

    Je suppose que la perte de vitesse est due à l'invocation de la fonction à l'intérieur d'eux, mais cela ne justifie pas une telle perte. De plus, je ne vois pas pourquoi le code écrit avec ces fonctions est plus lisible, sans oublier, qu'ils ne sont pas pris en charge dans tous les navigateurs.

  • SetTimeout () sur la fonction récursive dans une fonction d'auto-appel
  • Pourquoi les pseudos fonctionnels tels que: not () and: has () allow quoted arguments?
  • Destruction dans Node.JS
  • Ckeditor enlevant automatiquement la portée vide
  • Href = "#" Ne pas défiler
  • JQuery .getJSON Firefox 3 Erreur de syntaxe Indéfinie
  • One Solution collect form web for “Pourquoi les fonctions de réseau natif sont-elles beaucoup plus lentes que la boucle?”

    Je pense que, à un moment donné, cela se résume au fait que ces fonctions natives sont plus sucre que les optimisations.

    Ce n'est pas le même que dire en utilisant Array.prototype.splice plutôt que de boucler et de le faire vous-même là où la mise en œuvre évolue évidemment de pouvoir faire beaucoup plus sous le capot (en mémoire) que vous ne devriez le faire.

    À un certain moment avec le filtre, réduire et mapper le navigateur va devoir faire une boucle sur votre tableau et effectuer une opération sur la valeur contenue dans celui-ci (tout comme vous le faites avec une boucle). Il ne peut pas réduire le montant qu'il faut faire pour atteindre les mêmes fins (il est toujours en boucle et en effectuant une opération), mais il peut vous donner une API plus agréable et fournir des erreurs de vérification, etc, ce qui augmentera le temps.

    JavaScript rend le site Web intelligent, beauté et facile à utiliser.