procedimiento - retornar valor de una funcion javascript
¿Qué tan caras son las llamadas de función JS(en comparación con la asignación de memoria para una variable)? (8)
Dado un código JS como ese aquí:
for (var i = 0; i < document.getElementsByName(''scale_select'').length; i++) {
document.getElementsByName(''scale_select'')[i].onclick = vSetScale;
}
¿Sería el código más rápido si ponemos el resultado de getElementsByName en una variable antes del bucle y luego usamos la variable después de eso?
No estoy seguro de cuán grande es el efecto en la vida real, con el resultado de que getElementsByName
tenga <10 elementos. Me gustaría entender la mecánica subyacente de todos modos.
Además, si hay algo más digno de mención sobre las dos opciones, por favor dígame.
En principio, ¿sería el código más rápido si ponemos el resultado de getElementsByName en una variable antes del bucle y luego usamos la variable después de eso?
sí.
Creo que si. Cada vez que se repite, el motor debe volver a evaluar la instrucción document.getElementsByName.
Por otro lado, si el valor se guarda en una variable, entonces ya tiene el valor.
El almacenamiento en caché de la búsqueda de propiedades puede ayudar a algunos, pero al tratar de alargar la longitud del conjunto antes de comenzar el ciclo ha demostrado ser más rápido.
Entonces, declarar una variable en el bucle que retiene el valor de scale_select.length aceleraría un poco todo el bucle.
var scale_select = document.getElementsByName(''scale_select'');
for (var i = 0, al=scale_select.length; i < al; i++)
scale_select[i].onclick = vSetScale;
Seguro. La memoria requerida para almacenar eso solo sería un puntero a un objeto DOM y eso es significativamente menos doloroso que hacer una búsqueda DOM cada vez que necesita usar algo.
Código Idealish:
var scale_select = document.getElementsByName(''scale_select'');
for (var i = 0; i < scale_select.length; i++)
scale_select[i].onclick = vSetScale;
Una implementación inteligente de DOM haría su propio almacenamiento en caché, invalidando el caché cuando algo cambia. Pero no se puede contar con que todos los DOMs de hoy en día sean tan inteligentes ( tos toser ), así que es mejor si lo hace usted mismo.
Usa variables No son muy caros en JavaScript y las llamadas a funciones son definitivamente más lentas. Si hace un bucle al menos 5 veces sobre document.getElementById () use una variable. La idea aquí no es solo que la función de llamada es lenta, sino que esta función específica es muy lenta ya que trata de localizar el elemento con la identificación dada en el DOM.
@ Oli
También es una buena idea almacenar en caché la propiedad de longitud de los elementos recuperados en una variable:
var scaleSelect = document.getElementsByName(''scale_select'');
var scaleSelectLength = scaleSelect.length;
for (var i = 0; i < scaleSelectLength; i += 1)
{
// scaleSelect[i]
}
No tiene sentido almacenar la scaleSelect.length en una variable separada; en realidad ya está en uno: scaleSelect.length es solo un atributo de la matriz scaleSelect, y como tal es tan rápido de acceder como cualquier otra variable estática.