ECMAScript Quinta edición (lanzada en diciembre de 2009) presenta una serie de métodos nuevos (consulte this table para obtener más información). Sin embargo, todavía hay navegadores más antiguos que no implementan esos nuevos métodos.Cómo proporcionar ECMAScript 5 (ES 5) -shim?
Afortunadamente, existe un script conveniente (escrito en JavaScript) - ES5-shim - que implementa esos métodos manualmente en entornos donde no existen.
Sin embargo, no estoy seguro de cómo proporcionar ES5-calce ... ¿Debo "dar" a todos los navegadores, así:
<script src="es5-shim.js"></scipt>
O debería incluir un cheque con el fin de solamente "molestan" los navegadores que realmente lo necesitan, así:.
<script>
if (!Function.prototype.hasOwnProperty('bind')) {
(function() {
var shim = document.createElement('script');
shim.src = 'es5-shim.js';
var script = document.getElementsByTagName('script')[0];
script.parentNode.insertBefore(shim, script);
}());
}
</script>
(estoy usando Function.prototype.bind
para comprobar si un navegador implementa todos los nuevos métodos de ECMAScript 5 de acuerdo con la tabla de compatibilidad que he vinculado anteriormente, es bind
el "último bastión" cuando se trata de implementar ECM Ascript 5 métodos.)
Por supuesto, para esta cuña para ser eficaz, tiene que ser ejecutado antes todas las otras secuencias de comandos, lo que significa que queremos incluir los elementos del guión antes mencionados al principio de la página (en el HEAD, antes que todos los demás elementos SCRIPT).
Entonces, ¿este segundo ejemplo sería una buena manera de proporcionar ECMAScript 5-shim a los navegadores? Hay una mejor manera de hacerlo?
Pero que obligaría a los navegadores compatibles con ES5 (última IE, Chrome, Firefox, pronto Opera) para descargar y ejecutar la cuña que ralentiza la página web innecesariamente . Si puedo evitar esto con un poco de verificación de JavaScript, con mucho gusto lo haré. –
@ ŠimeVidas: Son 8kB. Con el almacenamiento en caché adecuado, no hay nada de qué preocuparse. – You
El rendimiento alcanzado es insignificante, el ES5 Shim ya hace lo que puede para evitar la ejecución innecesaria del código. – JaredMcAteer