2010-08-30 2 views
1

Je me demandais, quelle façon de gérer les images miniatures ont moins d'impact sur les performances du serveur Web.Générer des images miniatures au moment de l'exécution, sur demande, ou pré-générer des vignettes sur le disque dur?

C'est le scénario:

1) chaque commande peut avoir un maximum de 10 images. 2) les images n'ont pas besoin de stocker une fois la commande terminée (la période maximale est de 2 semaines). 3) potentiellement, il peut y avoir quelques milliers de commandes actives à tout moment. 4) les commandes avec des images seront fréquemment visitées par les clients. IMO, pré-générer une vignette dans le disque dur est une meilleure solution que le disque dur sont moins cher, même avec RAID. Mais qu'en est-il de la vitesse d'E/S du disque et des ressources dont il a besoin pour charger les images? cela prendra-t-il plus de ressources que de générer des vignettes en temps réel?

Nous vous serions reconnaissants de partager votre opinion.

Répondre

1

Si les commandes sont fréquemment visitées par les clients, il est préférable de créer les miniatures et de les stocker sur disque. De cette façon, le serveur Web n'a pas besoin de traiter la page aussi longtemps. Cela accélérera le temps de chargement de vos pages Web.

1

Cela dépend de votre charge. Si la ressource est demandée plusieurs fois, il est logique de la mettre en cache.

Y aura-t-il toujours une image? Si ce n'est pas le cas, vous pouvez le créer à la première demande, puis le mettre en mémoire cache, ou plus probablement une base de données, pour les demandes suivantes. Cependant, si vous avez toujours besoin des n images pour chaque commande et/ou si vous avez créé plusieurs commandes régulièrement, il est préférable de passer la création de vignettes à un thread de travail ou à une sorte de page asynchrone. De cette façon, plusieurs requêtes peuvent être empilées, réduisant ainsi la charge sur le serveur.

+0

En mettant en cache des images de plusieurs ordres, va-t-il potentiellement consommer beaucoup de souvenirs? –

+0

En mémoire? Cela dépend de la taille de l'image et de la quantité de mémoire disponible. Sauf si l'image est demandée des centaines de fois par heure, il serait préférable de stocker les images sur le disque. Très bon marché. Le coût d'IO de la lecture d'une image est normalement assez faible et les HHD sont peu coûteux à acheter. Vous pouvez même créer des tâches planifiées pour supprimer des images après qu'un ensemble de critères d'expiration a été atteint, c'est-à-dire 2 semaines se sont écoulées. –

1

Je suggère une combinaison de deux - génération dynamique avec la mise en cache de disque. Cela évite de gaspiller de l'espace à partir d'images inutilisées, mais n'ajoute absolument aucune surcharge pour les images demandées à plusieurs reprises. SQL et la mémoire cache ne sont pas de bons choix, les deux nécessitent trop de RAM. IIS peut servir de grandes images à partir du disque en n'utilisant que 100 000 de RAM. Pendant la création http://imageresizing.net, j'ai découvert 29 image resizing pitfalls, et peu d'entre eux sont évidents. Je suggère fortement de lire la liste, même si c'est un peu ennuyeux. Vous aurez besoin d'un HttpModule pour pouvoir passer les requêtes en cache à IIS.

Bien - pourquoi réinventer la roue? La bibliothèque ImageResizer est largement utilisée et bien testée.

Questions connexes