Ver Mensaje Individual
  #21 (permalink)  
Antiguo 21/04/2008, 12:51
Avatar de MaBoRaK
MaBoRaK
 
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 10 meses
Puntos: 35
Re: Me conviene usar eval aca ?

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 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 
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 
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.
__________________

Maborak Technologies

Última edición por MaBoRaK; 21/04/2008 a las 15:50