tamaño - subir mostrar modificar y eliminar una imagen en mysql desde php
Tamaño de imagen de PHP sobre la marcha vs almacenamiento de imágenes redimensionadas (4)
El cambio de tamaño dinámico puede ser un procedimiento costoso (en el tiempo) dependiendo del tamaño inicial de las imágenes. Lo he hecho en sistemas de producción, pero cuando tengo la opción, prefiero el almacenamiento en caché en el disco. Después de todo, el espacio en disco es barato y el tiempo de carga es todo en la Web. Incluso si simplemente almacena en caché las miniaturas en un tamaño específico y hace un cambio de tamaño dinámico en cualquier otro lugar, puede reducir en gran medida los tiempos de carga para las listas de imágenes de estilo galería.
Estoy creando un sitio para compartir imágenes y me gustaría conocer los pros y los contras de cambiar el tamaño de las imágenes sobre la marcha con PHP y tener las imágenes redimensionadas almacenadas.
¿Cual es mas rápido?
¿Cuál es más confiable?
¿Qué tan grande es la brecha entre los dos métodos en velocidad y rendimiento?
Tenga en cuenta que, de cualquier manera, las imágenes pasan por un script PHP para estadísticas como las vistas o si se permite el enlace activo, etc ... por lo que no será un enlace directo para las imágenes si opto por almacenar el tamaño de las imágenes.
Apreciaré sus comentarios o cualquier enlace útil sobre el tema.
Esto suena como optimización prematura. ¿Sabe cuántos usuarios tendrá su sitio / cuánto gruñido computacional tendrán sus servidores? Vaya con la opción más simple (en cuanto al mantenimiento), es decir, redimensione sobre la marcha, hasta que el rendimiento se convierta en un problema, y luego averigüe qué hacer.
Podría ser una idea implementar algún tipo de almacenamiento en caché en el lado del servidor de sus imágenes reescaladas, si es probable que se vean repetidas veces, pero no creo que esta necesidad se extienda hasta el pre-renderizado explícito.
Le recomiendo encarecidamente que almacene en caché sus imágenes y NO las cambie de tamaño sobre la marcha.
El cambio de tamaño de las imágenes consume mucha CPU y consume mucha memoria para su servidor.
Si tiene una galería de imágenes que se va a escalar sobre la marcha, la página cargará las imágenes lentamente, por ejemplo, entre 3 y 10 segundos, depende del tamaño del archivo original.
Al redimensionarlo, toma aproximadamente 3 bytes por píxel de su memoria. Por lo tanto, si tiene una imagen de 1000x1000 para cambiar de tamaño, tomará aproximadamente 3 MB de memoria. Si su una de sus páginas web tiene muchas de estas imágenes de tamaño sobre la marcha, digamos 20, tomará aproximadamente 60 MB de RAM de su servidor. Tal vez no, ya que la mayoría de los clientes solo solicitan 4 imágenes en ese momento, pero 12MB aún es mucho para una carga de página. Solo escalaría sobre la marcha si la imagen de origen es inferior a 100x100 px.
SUGERENCIA: Una gran biblioteca para escalar y guardar pulgares es PhpThumb
Esto es absolutamente incomparable.
Cambiar el tamaño de las imágenes sobre la marcha, de hecho, es como ejecutar un ataque DoS en su propio servidor. Cambiar el tamaño de una imagen habitual requiere más CPU y RAM que atender una solicitud habitual a un script php. Eso ya es un gran impacto en el rendimiento. Sin embargo, una imagen en miniatura habitual se muestra no solo, sino en números. Entonces, mientras muestra solo una página de la galería, está creando docenas de procesos de carga pesada, aumentando la carga del servidor por un factor de diez o más.
Prueba rápida y sucia para demostrar mis palabras: intentemos redimensionar una imagen relativamente pequeña de 1,3 megapíxeles
$ /usr/bin/time --format="%MK mem %Es CPU time" /usr/bin/convert angry_birds_1280x800.jpg -resize 100x100 thumb.jpg
10324K mem 0:00.10s CPU time
Nos tomó 0,1 s, por lo tanto, mostrar 10 vistas previas de imágenes consumirá una segunda parte de su tiempo de CPU. Mientras que la página de la galería de PHP correctamente escrita tomará alrededor de 0,01s. Por lo tanto, con el cambio de tamaño sobre la marcha, aumentará la carga del servidor en un factor de 100.
Lo mismo con la memoria. Cada proceso de cambio de tamaño consumirá no menos de 10M de memoria (¡para cambiar el tamaño de un archivo de imagen de 100k!) Con una suma total de 100M. Mientras que el límite de memoria habitual para el script PHP es simplemente 8M y rara vez se alcanza.
Esos son los números de la vida real.
Algo gracioso relacionado con este problema:
¡Exactamente el mismo usuario de PHP que fácilmente tira 1000000s de ciclos de CPU al mismo tiempo es increíble envidiando 1 o 2! No es una forma de hablar, aquí hay un ejemplo de lo que estoy hablando:
Una pregunta similar de alguien, cuya gran preocupación al mismo tiempo es tan insignificante como la diferencia de velocidad entre constantes, variables o matrices de variables . Y quien recientemente se encontró con un problema de tamaño de memoria permitido agotado , como si tal desastre no fuera suficiente.
Hay TONELADAS de preguntas y respuestas en este sitio, que debaten la diferencia de velocidad en nanosegundos de cualquier operación, respondieron con una dignidad inagotable, ejecutando pruebas de millones de iteraciones para mostrar una diferencia absolutamente insignificante entre las operaciones de un solo disparo de varios ciclos de CPU cada una.
Y, al mismo tiempo, hay preguntas como esta: con respecto a una diferencia enorme e incomparable en términos de rendimiento entre dos enfoques, que parece simplemente igual al autor.
Ese es el problema con el usuario promedio de PHP y este sitio.
Los primeros no tienen medida para distinguir cosas reales de los microscópicos.
Sin embargo, estos últimos no tienen un mecanismo para verificar la cordura de las preguntas: todas respondieron con igual entusiasmo, incluso si dos preguntas se contradicen entre sí (y ambas con sentido común).