"No menos que" versus la velocidad "mayor o igual a"
-
28-10-2019 - |
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.
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 "> ="