Ensuite, je suppose, la question plus complète est, "Comment ces considérations sont-elles affectées lorsque le moteur Javascript est connu (sur une base de moteur populaire)." La raison pour laquelle je pense que je dois demander à "communauté" est que ceux qui créent des choses comme Node.js, comme Strongloop, écrivent aussi du code comme util.inherits, une fonction dans laquelle, au lieu de: TheConstructorFunction.prototype.constructor = TheConstructorFunction
ils créent une définition de propriété qui a lui-même 4 propriétés étant définies:Considérant le code pour un moteur Javascript inconnu, quelles considérations ont le plus d'impact sur la vitesse d'exécution et la conservation de la mémoire?
ctor.prototype = Object.create(superCtor.prototype, {
constructor: {
value: ctor,
enumerable: false,
writable: true,
configurable: true
}
});
cela me semble inefficace, mais, je ne l'ai toujours cherché à en écrire un meilleur Javascript pour 3 ans par opposition aux auteurs de code comme celui-ci. Y a-t-il une explication de pourquoi ceci est ou n'est pas efficace? Une réponse indique que util.inherits n'est pas inefficace car les opérations de sous-classe sont rares. Mais compte tenu du fait que certaines bibliothèques traitent des centaines et des milliers d'opérations de sous-classes entre la construction et l'observation des résultats de test, si Node.js utilise en interne util.inherits, cela affecte le temps de développement de ses consommateurs. Je pense que, sur ce plan, l'efficacité est importante et j'espère que util.heritas n'est pas utilisé en interne. Je ne comprends même pas le but de util.inherits. Pourquoi l'avoir du tout? Je pense que cela favorise une inefficacité aggravante. require('util').inherits(C1,C2);
est presque aussi lent et probablement moins de C1.prototype=Object.create(C2.prototype); C1.prototype.constructor=C1;
Si c'est juste destiné à attirer les consommateurs, je suis cool avec ça. Mon souci est de savoir si ces pros utilisent cette fonction en interne, car les bibliothèques plus grandes dépendront de l'efficacité de Node.js. Quant à faire .constructor
non-énumérable ... Je pense que le cas où son "énumérabilité" importe est rare et devrait être laissé au consommateur, mais si les opérations internes dépendent des util.heritas, ce n'est pas vraiment laissé de côté au consommateur.
L'exemple que vous avez donné de 'ctor.prototype' n'est pas le même que le' prototype.constructor' que vous avez comparé. C'est des pommes aux oranges. – TylerY86
"* certaines bibliothèques traitent des centaines et des milliers d'opérations de sous-classes qui se déroulent entre la construction pour tester l'observation des résultats *" - oh vraiment? Qu'est ce qui te fait penser ça? Et non, même cette échelle importe peu, comparée par exemple. à lire les fichiers sources à partir du disque. "* presque aussi et probablement plus lent *" - ni, en fait. Si vous êtes si curieux, comparez-les vous-même. Et non, les fonctions standard de la bibliothèque ne favorisent pas l'inefficacité, elles favorisent la * simplicité *, ce qui fait gagner aux développeurs beaucoup plus de temps que ne le pourraient les micro-optimisations. – Bergi
@ Bergi, vous pourriez avoir raison, et j'accepte votre défi. Je les comparerai à un moment donné dans un proche avenir.Parce que, si vous avez raison, je perds juste plus de temps à y penser. Mais si vous avez tort, alors vous et toute une série de blogueurs/éducateurs/professionnels répandez un concept assez flagrant. J'ai écrit un logiciel de gestion de parc éolien en PHP et il utilise près de 20-50 classes différentes en fonction du type de requête, j'envisage d'implémenter le système dans Node.js mais je prévois d'avoir un système sous-jacent similaire à Wordpress. .. donc il y a un exemple. – flcoder