Regenerar información o bien capacidad de $_COOKIES o similar

Tengo una web de fotografía, estoy depurándola y haciéndo una nueva versión ... Bien ... En la pantalla A, aparecen todas las fotos en miniatura, al hacer click encima de una de ellas se abre una nueva ventana y la visualiza en tamaño grande y permite avanzar/retroceder para ver otras fotos.

El tema, es que al cargar la pantalla A, evidentemente al ser la primera vez, tarda un tiempo, pongamos que carga unas 200 fotos en miniatura, al hacer click, claro, al acceder a otra ventana, vuelve a cargarlo todo de nuevo, es aquí en esta segunda opción donde quisiera reducir el tiempo de carga, ya que tanto en la pantalla A, como en la B, la carga se realiza buscando en el disco duro ..., carga las fotos en un multi_array y a raiz de ahí trabaja. Mi duda, es si mediante una variable tipo $_COOKIE, u otra, podría pasar ese multiarray desde la pantalla A a la pantalla B de alguna manera, no sé si realizando un serialize u otro sistema y de esa manera ahorrarme el acceso y carga de las fotografías en la pantalla B.

Respuesta
1

¿Por qué no usas una base de datos en vez de recorrer directorios que es bastante más lento?, imagina que si son 100 fotos en 30 carpetas, no vas a notar diferencia, pero si son 10.000 fotos en 3.000 directorios tendrás un problema.

Para ver que más esta fallando habría que ver el código fuente

No me estás planteando ninguna solución, no lo hice en una base de datos porque precisamente quería hacerlo directamente sobre carpetas de disco, ya que de esta manera me ahorro tener que introducir información en la bbdd, subo la carpeta con las fotos y la misma aplicación la detecta y la visualiza.

Ahora, centrémonos en mi duda ... ¿cómo puedo pasar la información de una ventana a otra, sin que tenga que volver a "escanear" las carpetas? ¿se puede emplear $_COOKIE, o similar? ¿qué cantidad de información se puede almacenar en una variable $_COOKIE o similar (teniendo en cuenta como tu dices que pueden haber unas 600 fotos en un solo álbum, y de cada una de esas fotos, se guardan algunos datos internos)? ... De tener otra alternativa, comentamela, no lo de la base de datos, ya que la web la tengo en un host gratuito y el espacio ocupado por la base de datos tambien "penaliza".

Gracias.

La mejor manera de tener datos en todas las ventanas como tu dices es usar la sesión. En la cockie también puedes usarla, pero claro, la cockie se envía en cada petición, así que nadie lo hace de esa manera. Por el contrario la sesión se guarda en el servidor, es más seguro, y más eficiente.

Pero yo creo que te esta tardando por otra razón. ¿En la segunda pantalla solo muestras la foto en grande o muestras más cosas?, no debería tardar mucho sino. De echo, debería ser casi inmediato, pues si en la ventana de las miniaturas sabes que una foto esta en "vacaciones/verano/003.png" pasando eso a la segunda ventana en la cabecera GET, ya no tienes que recorrer ningún directorio más. Claro que desde el punto de la seguridad no es muy buena solución, pero funcionar, funciona.

2 respuestas más de otros expertos

Respuesta
1

Bien, con las respuestas dadas y lo que he leído, me he decidido por hacerlo con variables $_SESSION, la diferencia entre una variable cookie y una session, por lo que he leído es que una se guarda en el navegador (en cliente) y la otra en el servidor, de esta manera no tengo que cargar de nuevo la información ¡, mejorando por ello la velocidad.

Respuesta
1

¿Y no te conviene omitir la carga de imágenes cuando haces click en una foto? Si se carga en una ventana, ¿por qué necesitas que se recarguen las imágenes?
La misma caché del navegador guarda la información para no tener que cargar de cero las imágenes, por lo que el problema no creo que esté en las cookies...

Vamos a ver ... primero se cargan unas miniaturas, a modo de visionado general, al hacer click en una de ellas, se pasa a ver la lista que se veía antes pero en grande, con detalle, en esta segunda pantalla, además se visualizan los datos internos de cada una de las fotos y/o los comentarios que pueda tener ...

La aplicación tiene tres pantallas, cada una de ellas diferente en diseño, y en cada una de ellas se visualizan cosas diferentes o de diferente manera. Por eso decía de pasarlo de alguna manera a la tercera pantalla, una vez se ha cargado una vez la información en la segunda, ya que si pudiera pasarlo de alguna manera reduciría el tiempo de espera para la visualización de las fotos en grande.

Lo de la caché no sé si me serviría, además supongo que la caché se activa automáticamente, al cargar la misma página, pero no es el caso, ya que los parametros que se pasan de la segunda a la tercra son diferentes.

Entiendo. Entonces en lugar de usar Cookies, ¿por qué no usas la Session? Está basada en cookies de todos modos, pero te permite cargar datos en varias ventanas y mantenerlos. Si abres una sesión en la que introduzcas los datos que necesites mantener en una misma cookie, entiendo que tu problema se solucionaría, ¿no? Si te he entendido bien, claro =)

Vamos por el buen camino.

Si, me serviría, tengo una duda, otra, por lo que me comentas utilizar $_SESSION, es parecido a pasar dichos datos mediante parámetros $_POST ¿no? ... los parámetros mediante $_POST, no se visualizan, pero las variables $_SESSION si que se pueden ver mediante las opciones del navegador ... debería encriptarlas ¿no? ...

Como el asunto, es para pasar matrices, arrays de varias dimensiones, tengo dudas sobre la capacidad tanto de las variables $_SESSION como de los parámetros $_POST ... ¿existe alguna limitación?.

Gracias.

En principio el límite lo pone el propio navegador. Cada uno tiene una configuración para el tamaño de sus archivos de cookies. Sin embargo el tamaño estándar suele ser suficiente, aunque metas arrays multidimensionales. No obstante intenta optimizarlo al máximo, así además acortas el tiempo de ejecución.

Por cierto, efectivamente te conviene encriptar el contenido de la sesión, ya que si alguien intenta husmear en las cookies del cliente, podría tener datos privados significativos, como lo es (si te he entendido bien) una ruta completa en su PC, que le permite al atacante conocer la estructura de sus archivos guardados. Por ejemplo si guarda las imágenes en sus documentos, obtendrá el nombre del PC porque los documentos se guardan dentro de la carpeta de su usuario.

Me alegra que tengas las cosas bastante claras, en realidad sólo te están haciendo falta ideas, porque lo que quieres hacer lo sabes hacer ;)

Bueno, el tema es que al ser autodidacta, terminas haciendo lo que realmente quieres hacer, lo haces de una u otra manera, pero no por ello te has de conformar con lo realizado y tratar de mejorar.

Me da algo de "miedo" porque el tamaño pueda ser excesivo y entonces tener que tirar para atrás la nueva implementación.

No sé, lo probaré, si para guardarlo en $_SESSION, supongo que debería utilizar serialize y posteriormente utilizar unserialize, no sé si realizar ambas acciones tardará mucho tiempo, aunque supongo que tardará menos que en volver a cargar toda la información de nuevo ... Todo ello implica además, modificar una seríe de filtros para visualizar fotografías que tengo ahora montado, que evidentemente cada vez que se modifica el filtro vueeeeeeeeeeelve a cargar de nuevo la información pero solo con las fotografías filtradas, de esta manera podría realizarlo directmente sobre la misma tabla, indicandolo con un  "check" validando o no una foto ...

Lo probaré.

Gracias.

Te recomiendo que siempre hagas pruebas antes de implementarlo, para evitar modificar todo tu proyecto para nada. Prueba a implementar la sesión con varias imágenes pesadas, o filtros, de manera que puedas sobrecargar el archivo y encontrar si el límite es apropiado para ti o necesitas más capacidad.

Otra idea es que puedas precargar los contenidos en el lado del servidor, no del cliente. Pero quizás eso no se adapta a tu idea

La pregunta no admite más respuestas

Más respuestas relacionadas