loading...........
No se ustedes... pero para mi es mejor hacerlo así
Código PHP:
Array.prototype.valid=function(valid)
{
valid = valid || false;
for(var i=0;i<this.length;i++)
{
if(this[i]!==valid){return false;}
}
return true;
}
//llenamos el array
var a=[];
for(var i=0;i<59999;i++)
{
a.push(true);
}
//hasta aca tenemos un Array de validos, osea todos true
a.push(false); //ponemos un ultimo valor false, debemos llegar hasta ahi en el recorrido
//ya que si usamos un valor random, puede darnos false en el primer valor de la matriz y suelta 0
//asi que.. como digo, dejes todo en true y al final false. Esto se tomaria como CASO EXTREMO
var ini = new Date().getTime(); //iniciamos test
var g = a.valid(true); //validamos que si todos son true, devuelva true en g y si alguno difiere,,, pues devuelve false.
var tardanza = (new Date().getTime())-ini; //prueba final
alert(tardanza)
El test no pasa de 50 ms. se mantiene entre 48 y 50.
La forma de hacerlo en cadena (indexOf) ... consume mucha memoria, asi que la descartamos
Cita: Según Con bucle y haciendo valorAcumulado = valorAcumulado && actual el resultado es false y ha tardado en sacarlo 0 ms.
<-- es igual que hacerlo con bucle ya que SE ACCEDE AL VALOR DEL ARRAY.
Entonces la solucion que mejoraría esto, sería el tener que comprobar(todos los elementos del array) si alguno de los valores es diferente a true. Asi que .. no hay forma de hacer esto y terminamos siempre leyendo el valor siguiente del array.
Talvez ya dijeron esta idea... pero algo que tambien ayudaría muchisimo es hacer comprobaciones por ambos lados, principio y final.
Código PHP:
Array.prototype.valid=function(valid)
{
valid = valid || false;
for(var i=0,j=1;i<this.length;i++)
{
var o = this.length-j;
//console.info("i="+i+":"+this[i]);
//console.info("o="+o+":"+this[o]);
if(this[i]!=valid || this[o]!=valid)
{
return false;
}
else if(i>o)
{
return true;
}
j+=1;
}
return true;
};
var a=[];
for(var i=0;i<60000;i++)
{
a.push(true);
}
//ponemos un valor false en el punto 50000
a[50000]=false;
var ini = new Date().getTime();
var g = a.valid(true);
var tardanza = (new Date().getTime())-ini;
alert(tardanza)
Con este script el retardo hasta llegar a comprobar la posición 50000 (ahi pusimos el false) se reduce a
17ms, mientras que con la forma de avanzar elemento tras elemento tarda
37ms
Ahora bien, otro método sería hacer búsquedas en la matriz a partir de un valor random saltando por la matriz pero que NO DEBE SALTAR EN EL MISMO valor 2 veces.
Ahora bien tambien sería bueno separar la busqueda en la matriz en diferentes procesos, pero la cantidad de procesos no debe superar el 1/4 del total de los elementos.
Y como ven.. se pueden hacer muchas cosas mas :D
connection closed.