Pregunta

Me preguntaba si alguien sabía o si una de esas pruebas de velocidad precisas podría probar "no menos que" versus "mayor o igual a la velocidad en ActionScript 3 (aire 2.5 si eso marca la diferencia)?

Tengo máquinas virtuales que se ejecutan en esta computadora y obtengo resultados muy inexactos.

Usándolo como tal

if ( !(__index < _vector.length) ) return;

o

if ( __index >= _vector.length ) return;

Hubiera pensado el primero, ya que todo lo que hace es 1 prueba y luego la invirtió, pero ActionScript 3 tiene algunas de esas peculiaridades donde nunca puedes estar seguro.

¿Fue útil?

Solución

No debería haber una diferencia en la velocidad, en teoría. ActionScript utiliza la Biblioteca Nanojit JIT para compilar el código, y sé de hecho (después de haber trabajado en ese código antes en el motor JavaScript de Mozilla, que comparte Nanojit con Adobe's ActionScript) que el código para implementar comparaciones transformará conversiones simples como la inversión de una comparación en la comparación inversa. Entonces, en teoría, la única diferencia es otro ciclo o dos gastados para compilar el código. No vale la pena preocuparse.

Por otro lado, las CPU modernas son bestias complejas, y las perturbaciones infinitesimales pueden hacer diferencias notables. Entonces, si bien tenía fuertes probabilidades de que no hubo diferencia entre los dos, no apostaría a la granja.

Otros consejos

Su pregunta se refiere más a la informática de la informática que a Action Script específicamente, ya que la mayoría de los idiomas intentarán compilar el código de máquina más óptimo posible.

Entonces, usaré un ejemplo de C ++ para responder a su pregunta.

int j = 16;
if (!(j < 10))
{
    int l = 3;
}

if (j >= 10)
{
    int l = 3;
}

Esto produce la siguiente sección clave en el ensamblaje:

00231375  cmp         dword ptr [j],0Ah  
00231379  jl          wmain+32h (231382h)  
0023137B  mov         dword ptr [l],3  
00231382  cmp         dword ptr [j],0Ah  
00231386  jl          wmain+3Fh (23138Fh)  
00231388  mov         dword ptr [l],3  
0023138F  xor         eax,eax  

Las líneas 00231375 y 00231382 son sus pruebas reales contenidas en la instrucción IF. Como puede ver, tanto mis pruebas <y> = se compilaron como el mismo código idéntico en el ensamblaje (al comparar dos enteros). Por lo tanto, cualquiera de las pruebas tomará la misma cantidad de tiempo en la CPU, ya que ambas dan como resultado la misma prueba (si es izquierda <a la derecha, omita si el bloque). Lo más probable es que sea el caso con el compilador de script de acción.

Sin embargo, una pregunta podría ser si el compilador JIT tarda más en compilar! ([Int] <[int]) o [int]> = [int]. Supongo que la diferencia probablemente no sea suficiente para importar.

Haga un bucle y use getTimer () para descubrir. Prueba algo como esto:

var startTime:int = getTimer()
var count:int = 1000000
for (var i:int = 0;i<count;i++) {

    if ( !(__index < _vector.length) ){

    }
}
trace("The first script took "+String(getTimer()-startTime) + "ms to run")



startTime = getTimer()
for (i = 0;i<count;i++) {

    if ( __index <= _vector.length ){

    }
}
trace("The second script took "+String(getTimer()-startTime) + "ms to run")

Además, si obtiene resultados innacuros con esta Tecnique, intente hacer que la variable de conteo sea más grande. Eliminar la verificación "_vector.lenght" del bucle puede ser útil si solo necesita verificar el rendimiento ">" y "> ="

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top