2009-10-13 10 views
0

Je développe actuellement un site web avec PHP + MySQL et jQuery. Jusqu'à présent, je l'ai fait dans ma machine locale. Je remarque que lorsque je vois la page, les images prennent du temps à charger (peu de temps mais c'est visible). Toutes les images sont petites (PNG avec moins de 3 Ko). Maintenant, quand je charge la page, il y a quelques connexions de base de données se produisant afin d'obtenir des données que je montrerai.Comment puis-je accélérer le temps de chargement de l'image sur mon site Web?

Je ne sais pas si ce problème de temps de chargement a quelque chose à voir avec la quantité d'images, ou avec le temps que le script PHP + les connexions DB prennent à exécuter. (J'ai très peu de données dans ma base de données, donc je ne satisferaient pas ce cas.)

Ma question est: Est-ce une bonne approche de pré-charger toutes les images au début de chaque page? Je l'ai essayé avec jQuery et ça marche bien. Je ne suis pas sûr des inconvénients que je peux avoir avec ça. Par exemple, pour ce faire, j'ai besoin d'inclure la bibliothèque jQuery au début de la page. Je pensais que c'était une mauvaise pratique.

Répondre

1

Vous devriez utiliser le plugin de vitesse de page de google pour vérifier quelles données prennent le plus de temps à charger. Il montrera également des temps de chargement séparés pour les images. Si vous utilisez beaucoup de petits pngs, je vous suggère de les combiner en une seule image et de manipuler l'affichage via la propriété css background puisqu'ils font partie du style et non de l'information. Dans ce cas, au lieu de quelques images, une seule sera chargée et réutilisée dans tous les éléments. Dans ce cas, même le préchargement d'une image est vraiment facile.

+0

Merci, je vais essayer cette approche! –

1

Avez-vous pensé à utiliser CSS Sprites de combiner toutes vos images en un seul téléchargement? Il y a un certain nombre de pour vous aider à le faire, et cela réduira considérablement le nombre de requêtes HTTP requises par votre page.

Assurez-vous que vous avez set the correct Expires header sur vos images pour leur permettre d'être mises en cache.

Enfin, jetez un oeil à YSlow qui peut vous fournir des conseils d'optimisation futher.

2

Si ces fichiers PNG sont stockés dans la base de données en tant que BLOBs — pas clair à partir de votre question — ne le faites pas. Le traitement d'images à partir d'une base de données via PHP n'est pas aussi efficace que de laisser le serveur Web les servir directement depuis le système de fichiers. Si les images sont liées à des enregistrements particuliers, nommez simplement le PNG après l'ID de ligne, afin de pouvoir le trouver dans un répertoire dédié au stockage de ces images. Le code PHP génère ensuite simplement l'URL qui pointe vers le fichier PNG sur le disque, de sorte que le serveur Web peut les envoyer statiquement.

Je ne pense pas que le préchargement des images dans la même page va vous acheter quelque chose. Si quelque chose, il peut ralentir le apparente temps de chargement global de la page parce que le navigateur peut uniquement récupérer un nombre fixe de ressources simultanément, généralement 2-4. Le chargement des images en haut du <body> signifie qu'il y a d'autres choses en haut de la page "au-dessus du pli" qui doivent attendre que des slots de connexion HTTP soient libérés. Mieux vaut laisser les images se charger dans leur ordre naturel.

préchargement est logique dans deux situations:

  • L'image est non représentée par défaut, mais devrait être nécessaire que l'utilisateur interagit avec la page. De bons exemples de ceci sont les images de survol et de clic pour les survols.

  • L'image est utilisée sur cette page, mais seront nécessaires sur le prochain.De bons exemples de ceci sont les sites où il y a une nette progression d'une page à l'autre, comme dans un panier.

De toute façon, faire la pré-charge au très bas du <body>, donc tout d'abord une autre charge.

Après avoir corrigé ces deux problèmes, exécutez YSlow sur votre site. Il a commencé comme un plugin pour Firebug, qui est à son tour un plugin pour Firefox, mais il a depuis été porté sur tous les principaux navigateurs sauf IE.

La beauté de YSlow est qu'il détecte automatiquement les ralentissements courants, en chargeant simplement la page lorsque l'extension est active. Il vous donne ensuite une note claire pour la page, de sorte que vous pouvez juger lorsque vous avez terminé votre optimisation. Si vous êtes en dessous de A, vous n'avez pas encore terminé. :) Il n'est pas rare de voir des sites notant un D ou pire, parce que la configuration par défaut des serveurs Web est conservatrice pour éviter de causer des problèmes. La correction des alertes YSlow est généralement assez facile, mais vous devez faire attention à ne pas créer de cache et d'autres problèmes, c'est pourquoi la configuration du serveur par défaut ne fait pas ces choses.

Une autre réponse a recommandé l'offre Google PageSpeed. Il est disponible en tant que plugin pour Chrome et Firefox, en tant que module Apache côté serveur et en tant que service hébergé par Google. Je n'ai aucune idée de comment il se compare à YSlow, mais il semble intéressant.

Pensez également à utiliser le débogueur de navigateur pour obtenir un graphique cascade de temps de chargement des ressources:

  • Dans Firebug vous obtenez ceci dans l'onglet Net.

  • Dans Safari, vous y accédez via le menu Développer, qui est normalement désactivé dans les Préférences. Activez-le si nécessaire, puis dites Développer> Démarrer l'enregistrement de la timeline. Cela vous met dans l'instrument Network Requests. Vous pouvez également y accéder via Développer> Afficher l'inspecteur Web.

  • Dans Chrome, dites Affichage> Développeur> Outils de développement, puis accédez à l'onglet Réseau.

  • IE a une forme très faible de ceci, via Outils> Developer Tools> Profiler. Il donne simplement un tableau de nombres, plutôt qu'un graphique en cascade, donc l'information est là, mais vous ne pouvez pas simplement scanner visuellement de longues barres pour trouver les ressources les plus lentes.

Questions connexes