span content change javascript

change - javascript get html content



¿El modo estricto es más eficaz? (4)

¿Se pretende que el modo estricto, entre sus otros objetivos, permita a los navegadores introducir optimizaciones adicionales u otras mejoras de rendimiento?

Si estaba o no destinado a hacer esto, no estoy seguro, aunque creo que la respuesta es sí.

Pero puedo decir con certeza que el modo estricto brinda estas oportunidades, y los exploradores las implementarán, sin importar si brindar esas oportunidades fue un objetivo intencional para el comité de ECMA. Sin embargo, no esperaría que todas esas oportunidades fueran tomadas inmediatamente. En muchos casos, es probable que el mantra sea correcto primero, luego el rendimiento, porque el modo estricto no se usa ampliamente en este momento. (Trabajo con el motor de JavaScript de Mozilla y he implementado varias partes de modo estricto, y lo estamos implementando de esta manera como una regla general, aunque probablemente podría pensar en una excepción o dos si lo intentara).

¿Ejecutar javascript dentro de un navegador en ''modo estricto'' lo hace más eficaz, en general? ¿Alguno de los principales navegadores realiza optimización adicional o utiliza alguna otra técnica que mejore el rendimiento en modo estricto?

Para reformular un poco, ¿se pretende que el modo estricto, entre sus otros objetivos, permita a los navegadores introducir optimizaciones adicionales u otras mejoras de rendimiento?


El modo estricto no es realmente acerca del rendimiento, es una variante estricta del lenguaje, su objetivo principal es evitar lo que se considera que son características propensas a errores .

Básicamente, su objetivo es hacer que el lenguaje sea más seguro , introduciendo muchos cambios semánticos, también se realizan comprobaciones de errores adicionales, y los errores son ruidosos, en un código no estricto las cosas solo fallan silenciosamente.

En cuanto al rendimiento, creo que los proveedores de navegadores ahora están teniendo dificultades para implementar el modo estricto, el problema es que los motores JS se basan principalmente en ECMAScript 3, y la implementación del modo estricto no es fácil, ya que el alcance del rigor es muy flexible. Puedes mezclar código no estricto y estricto.

Ver también:


En su mayor parte, no . Si examina de cerca el documento de estándares ECMAScript 5, notará que casi todas las apariciones del Modo Estricto en los algoritmos de pseudocódigo son:

if (isStrictMode) { //throw an (early) SyntaxError or TypeError } else { //return }

Hay dos cosas a tener en cuenta sobre esto:

  1. Las comprobaciones en el Modo Estricto no existían en ECMAScript 3. Aunque es relativamente ligero, las implementaciones conformes de JavaScript ahora ejecutan al menos una verificación condicional adicional en comparación con sus contrapartes ECMAScript 3. Sí ... Sé que un solo cheque como este quema muy pocos ciclos de reloj, pero las cosas pequeñas se suman
  2. Debido a que el Modo estricto es principalmente una función de tiempo de análisis de JavaScript, su navegador favorito no mostrará una gran disminución de rendimiento cuando el Modo estricto esté habilitado para algún sitio web (por ejemplo, SunSpider). Es decir, la degradación del rendimiento se produce antes de que se ejecute el código, lo que significa que podría ser perceptible para los usuarios finales, pero en gran medida es inconmensurable utilizando el objeto Date para medir el tiempo de ejecución del bloque

Según esta prueba, el "modo estricto" puede ser aproximadamente un 25% más rápido.

<div id="a"> Q </div> <div id="b"> Q </div> <script> Benchmark.prototype.setup = function() { function d(i) { var x = ''999''; y = eval("y = 8;"); var z = x + y + i; document.getElementById(''a'').innerHTML = z; } function c(i) { ''use strict'' var x = ''999''; var y = eval("y = 8;"); var z = x + y + i; document.getElementById(''b'').innerHTML = z; } }; </script>

Esto se puede probar aquí: http://jsperf.com/strict-mode

Curiosamente, la manipulación de la matriz de argumentos puede ser aproximadamente 6 veces más rápida en "modo estricto".

<script> Benchmark.prototype.setup = function() { var nonstrict = (function() { return function (arg1) { var index; for (index = 1; index < arguments.length; ++index) { arguments[0] += arguments[index]; } return arguments[0] - arg1; }; }()); var strict = (function() { "use strict"; return function (arg1) { var index; for (index = 1; index < arguments.length; ++index) { arguments[0] += arguments[index]; } return arguments[0] - arg1; }; }()); var result; }; </script>

Aquí está la prueba de jsPerf: http://jsperf.com/strict-mode-arguments