Foros del Web » Programando para Internet » PHP »

duda de eficiencia

Estas en el tema de duda de eficiencia en el foro de PHP en Foros del Web. Hola a todos. Alguien me podría explicar por qué esta implementación: Código PHP: $array [ 'a' ][ 'b' ] = array(); $ref  = $array [ 'a' ][ ...
  #1 (permalink)  
Antiguo 23/01/2009, 09:54
 
Fecha de Ingreso: septiembre-2008
Mensajes: 36
Antigüedad: 15 años, 7 meses
Puntos: 0
duda de eficiencia

Hola a todos.
Alguien me podría explicar por qué esta implementación:

Código PHP:
$array['a']['b'] = array();
$ref =$array['a']['b'];
$ref['c']=1;
$ref['d']=2;
$ref['e']=3
es más eficiente que esta:

Código PHP:
$array['a']['b'] = array();
$array['a']['b']['c']=1;
$array['a']['b']['d']=2;
$array['a']['b']['e']=3
Gracias de antemano.
Saludos
  #2 (permalink)  
Antiguo 23/01/2009, 11:34
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: duda de eficiencia

No hacen lo mismo. En el primer caso tienes un array $array['a']['b'] vacío, y aparte tienes un array $ref que contiene los índices c, d y e. Tienes en total 2 arrays.

En el segundo caso tienes un sólo array $array['a']['b'] con los tres índices mencionados.

Tal vez lo que deseas saber es sobre las referencias?

  #3 (permalink)  
Antiguo 26/01/2009, 05:04
 
Fecha de Ingreso: septiembre-2008
Mensajes: 36
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: duda de eficiencia

Hola Okram. Gracias por tu aclaración. Pero en el caso que fuese la implementación así:

Código PHP:
$array['a']['b'] = array();
$ref =&$array['a']['b'];
$ref['c']=1;
$ref['d']=2;
$ref['e']=3
¿Por qué es más eficiente que esta?:

Código PHP:
$array['a']['b'] = array();
$array['a']['b']['c']=1;
$array['a']['b']['d']=2;
$array['a']['b']['e']=3
Gracias.
Saludos.
  #4 (permalink)  
Antiguo 26/01/2009, 05:12
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Respuesta: duda de eficiencia

¿Cual es tu definicion de eficiencia y en que contexto? Si es por velocidad de ejecucion, olvidate de estas optimizaciones.

El uso de referencias como alias a elementos de un array puede ayudar a que el codigo sea mas facil de mantener, sobre todo a la hora de leer.
  #5 (permalink)  
Antiguo 27/01/2009, 03:33
 
Fecha de Ingreso: septiembre-2008
Mensajes: 36
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: duda de eficiencia

Hola de nuevo.
DarkJ, iterando esos dos scripts un número elevado de veces, hay diferencias significativas en cuanto al tiempo de ejecución (estoy realizando un trabajo de optimización en php). Por eso preguntaba si alguien sabía una posible razón de ésto.
Gracias.
Saludos.
  #6 (permalink)  
Antiguo 27/01/2009, 03:44
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Respuesta: duda de eficiencia

Cita:
Iniciado por WadE87 Ver Mensaje
Hola de nuevo.
DarkJ, iterando esos dos scripts un número elevado de veces, hay diferencias significativas en cuanto al tiempo de ejecución (estoy realizando un trabajo de optimización en php). Por eso preguntaba si alguien sabía una posible razón de ésto.
Gracias.
Saludos.
Dudo que pueda llegar a ser un cuello de botella en una aplicacione real.

¿Posible razon? Pues que usando la referencia solo tienes que hacer 2 localizaciones de memoria por asignacion (una para averiguar la localizacion de $ref y otra para el indice a asignar), mientras que de la otra forma tienes que hacer 4 (para el array, para el primer indice, para el segundo y para el tercero).
  #7 (permalink)  
Antiguo 27/01/2009, 03:49
 
Fecha de Ingreso: septiembre-2008
Mensajes: 36
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: duda de eficiencia

Hola DarkJ.
Yo tampoco creo que fuese un cuello de botella, pero si que existe una diferencia más o menos significativa, lo que conllevaría un ahorro de consumo energético.
Te agradezco la posible razón que me has expuesto. ¿Pero en la primera implementación no habría que hacer 5 asignaciones, puesto que tambíen hay 3 índices, a parte de ref y el array?
Gracias.
  #8 (permalink)  
Antiguo 27/01/2009, 04:01
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Respuesta: duda de eficiencia

Cita:
pero si que existe una diferencia más o menos significativa, lo que conllevaría un ahorro de consumo energético.
La optimizacion a nivel de codigo deberia ser lo ultimo. Con un cambio de algoritmo puedes hacer que se ejecute menos codigo. O usar correctamente los recursos disponibles.

Es mejor usar un cache, que ponerte a rebuscar optimizaciones minimas en codigo.
Cita:
¿Pero en la primera implementación no habría que hacer 5 asignaciones, puesto que tambíen hay 3 índices, a parte de ref y el array?
A lo que me refiero es a comparar
Código PHP:
$ref['c']=1
con
Código PHP:
$array['a']['b']['c']=1
Claro que con el metodo de la referencia debes incializar la referencia, pero es el coste de setup. Ese coste va perdiendo peso segun vas añadiendo mas asignaciones seguidas. Si solo añadieses 1 o 2 indices, estarian casi a la par. Si añades 1000 indices seguidos, se nota la ventaja de la referencia.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:19.