2011-05-15 24 views
11
función

Inlining llamadas JavaScript acelera la ejecución y también reduce el tamaño del código después de gzipping, tal como se describe en este artículo:¿Herramienta para alinear automáticamente llamadas de funciones de JavaScript?

http://blog.calyptus.eu/seb/2011/01/javascript-call-performance-just-inline-it/

Sin embargo, no puedo encontrar una herramienta que procesa automáticamente un archivo de origen JS e incluye todas las llamadas a funciones inlinables (o mejores, seleccionadas). El compilador de cierres de Google realiza algunos cálculos, pero no siempre, y tampoco es configurable.

¡Gracias de antemano!

+2

No necesita alinear todo, y hará que reutilizar el código sea mucho más difícil. Le sugiero que use algo como el compilador de cierres de Google, que realiza varias optimizaciones (incluida la inserción) y reduce el código. –

+3

Esta es una gran pregunta que merece mejores respuestas. Cuando se trabaja con tareas repetitivas, la alineación a menudo hace una gran diferencia. Tales como el procesamiento continuo de píxeles o el cálculo del ruido. – bennedich

Respuesta

1

Deje que el JIT calcule cosas como sugerirle a usted. Inlinear puede empeorar fácilmente el rendimiento al matar el rendimiento de la memoria caché.

Además, a menos que haya identificado los cuellos de botella reales, hacer una optimización prematura como esta difícilmente valdrá la pena.

+2

-1 Esto realmente no responde la pregunta. Inlinear puede ser beneficioso en algunas situaciones, como dentro de una iteración en un ciclo principal. – Petah

+4

Lo mismo. Pregunta: * ¿Cómo resuelvo X *? Respuesta: * no resuelve X *. StackOverflow: * brillante *! De Verdad? No eres OP para conocer sus motivos. O los motivos de alguien que busca en Google esa pregunta, que realmente necesita la respuesta. -1 – MaiaVictor

+0

Las personas que vienen de Facebook, no voten negativamente @Ivo Wetzel. Eso se llama brigading de votos y no es algo bueno. – MaiaVictor

2

No creo que esta "técnica" acelere el tiempo de ejecución. Al menos no en un escenario del mundo real. El blog puede tener razón sobre el tamaño del código & Gzipping tho.

De todos modos, no creo que ninguna minificación/compresor de Javascript haga esto mucho. La razón es simple y muy obvia en el ejemplo proporcionado. Al reemplazar la llamada de función con el código de función real, está configurando las cosas en otro contexto. Esto podría terminar muy malvado. ¿Qué pasa si la función padre (-context) ya declara y utiliza una variable llamada foo. Si se usa la misma variable dentro de la otra función, es posible que la sobrescriba y cause errores.

Peor aún si hay algún uso de bloques try/catch o eval que crea un contexto adicional con un "alcance dinámico" cuidadosamente expresado (que en realidad no está disponible en ecma-script). Sin embargo, en este escenario, es prácticamente imposible que un JIT o cualquier implementación de Javascript optimice algo.

+0

Los motores JIT y las herramientas de análisis estático (como el compilador de cierre) tienen en cuenta los impactos de cambio de alcance cuando se decide alinear una función. –

+0

Claro, pero la "solución" para todas las decisiones si 'try/catch' o' eval' está involucrado dentro de un contexto se reduce a "no hacer nada" afaik. – jAndy

Cuestiones relacionadas