Hago esta pregunta porque mi colega y yo tenemos una disputa sobre el estilo de codificación porque él prefiere la declaración de la función de flechas:
const sum = (a, b) => a + b;Y prefiero la declaración de función independiente de estilo antiguo:
function sum(a, b) { return a + b; }Mi punto es que el código en estilo antiguo es más legible y puede distinguir más claramente las funciones y las declaraciones de variables. Su punto es que el código con funciones de flecha simplemente se ejecuta más rápido.
¿Sabe algo sobre las penalizaciones de rendimiento reales (en v8) cuando usa la declaración de función independiente de estilo antiguo en lugar de funciones de flecha? ¿Es que las penas realmente existen?
Desarrollador V8 aquí. Las funciones de flecha son (en su mayoría) solo "azúcar sintáctico" para las declaraciones de funciones convencionales. No hay diferencia de rendimiento.
Lo siguiente muestra que:
function goFat() { for (var i = 0; i < 1000000; i++) { var v = ()=>{}; v(); } } function goTraditional() { for (var i = 0; i < 1000000; i++) { var v = function() {}; v(); } } function race() { var start = performance.now(); goTraditional(); console.log('Traditional elapsed: ' + (performance.now() - start)); start = performance.now(); goFat() console.log('Fat elapsed: ' + (performance.now() - start)); start = performance.now(); goTraditional(); console.log('Traditional elapsed: ' + (performance.now() - start)); start = performance.now(); goFat() console.log('Fat elapsed: ' + (performance.now() - start)); console.log('------'); } <button onclick="race()">RACE!</button>Creo que las funciones de flecha en las propiedades de clase pueden causar algún problema de rendimiento. Aquí hay un ejemplo :
class Car { setColor = (color) => { this.color = color; } constructor() { this.color = ''; this.getColor = () => { return this.color; }; } printCarColor() { console.log(this.color); } } var c = new Car(); console.log(c);Si echamos un vistazo a la variable c, notará que la función setColor y getColor se crean completamente nuevas para cada instancia , y cada nueva copia se coloca en cada instancia, mientras que la función printCarColor reside en el prototipo.
Si desea mil instancias para que cada una pueda hacer referencias de métodos de contexto fijo, necesitará mil métodos separados (no uno compartido) y, por supuesto, tendrá que almacenar cada uno de esos mil métodos separados en las instancias mismas, derrotando así todo el punto del prototipo único compartido.