¿Qué tipo de código es probable que elimine un motor de JavaScript?

(Este es un pequeño problema XY, pero decidí hacer la pregunta que me interesa, en lugar de la que necesito estrictamente en este momento). Sé que los diversos motores modernos de JavaScript tienen eliminadores de código muerto y otros medios para deshacerse de código que no tiene ningún efecto o efecto secundario, pero ¿cómo identificar y / o componer dicho código?

El artículo de Wikipedia sobre la eliminación del código muerto ofrece un ejemplo sencillo de código inalcanzable, es decir, código que ocurre después de la statement de return incondicional en una function. ¿Pero puedo contar con los motores modernos y principales de JavaScript para eliminar dicho código? Por ejemplo, ¿Rhino o V8 eliminarán este código?

 function (foo) { return; return foo; } function (foo) { foo = foo; } 

y ¿qué hay de las funciones op?

 (function () {}(foo)); jQuery.noop(foo); 

Todos estos ejemplos engañan a JSHint, y aunque JSLint capta la extraña asignación foo = foo , todavía puedes engañarla fácilmente con los noops o un par de variables:

 function (foo) { var bar = foo; } 

Si pueden engañar a los analizadores de códigos estáticos, ¿engañarán a los motores ellos mismos?

Si no se examina detenidamente la fuente de todos los diferentes motores de JavaScript, ¿hay alguna manera de identificar y / o build el tipo de código que seguramente se eliminará antes de que se ejecute el progtwig, y ​​debería considerarse un error si dicho código es no se ha eliminado, ¿o es simplemente una elección de layout?

Encontrar un código muerto en JavaScript es una bestia diferente de encontrar un código muerto en otros lenguajes como C ++. Por ejemplo, puede comstackr C ++ para detectar código inalcanzable, pero obviamente eso no es posible con JavaScript.

El ejemplo de código muerto que le ha asignado a function () { return; var foo = 1; } function () { return; var foo = 1; } function () { return; var foo = 1; } es mucho less probable que ocurra que un controller de events asignado a un elemento HTML que ya no existe en la página. Ningún analizador de código muerto automático podría detectar este último.

Lo que puede hacer es usar una herramienta de cobertura de código durante las ejecuciones de testing y search las líneas no utilizadas. Solo tienes que asegurarte de que tus scripts de testing sean muy minuciosos.

Intereting Posts