Al comparar this benchmark con Chrome 16 vs Opera 11.6 encontramos que¿Por qué Function.prototype.bind es lento?
- en lazo nativo de Chrome es casi 5 veces más lento que una versión emulada de bind
- en la ópera se unen nativa es casi 4 veces más rápido que un emulado versión de bind
Cuando una versión emulada de bind en este caso es
var emulatebind = function (f, context) {
return function() {
f.apply(context, arguments);
};
};
¿Hay buenas razones por las cuales existe tal diferencia o es solo una cuestión de v8 no optimizar lo suficiente?
Nota: emulatebind
solo implementa un subconjunto pero eso no es realmente relevante. Si tiene un enlace emulado optimizado y con todas las funciones, el performance difference in the benchmark aún existe.
@RobW introdujo la versión emulada de bind, la estoy comparando. – Raynos
Supongo que esto se debe a una optimización diferente del código. Tal vez, el contenedor con enlace nativo no permite algunas optimizaciones determinadas. FF10 demuestra el comportamiento similar. – kirilloid
Su Q. debe ser _ "¿Por qué mi emulado .bind() es más rápido que un nativo en Chrome, FireFox y más lento en Opera e IE?" _. Y por qué piensas que debe ser de otra manera? Diferente optimización de código. Su enlace emulado no permite agregar parámetros, sino solo contexto, por ejemplo. –