357 votes

Est-ce que "display:none" empêche le chargement d'une image ?

Tous les didacticiels sur le développement de sites Web réactifs recommandent l'utilisation de l'option display:none Propriété CSS permettant de masquer le chargement du contenu sur les navigateurs mobiles afin que le site Web se charge plus rapidement. Est-ce vrai ? Est-ce que display:none ne charge pas les images ou charge-t-il toujours le contenu sur le navigateur mobile ? Existe-t-il un moyen d'empêcher le chargement de contenu inutile sur les navigateurs mobiles ?

6 votes

Il semble qu'il existe des moyens d'empêcher le téléchargement avec display:none, mais pas la méthode classique : timkadlec.com/2012/04/media-query-asset-downloading-results

1 votes

Le W3C le teste activement : w3.org/2009/03/image-display-none/test.php

202voto

dystroy Points 145126

Les navigateurs deviennent de plus en plus intelligents. Aujourd'hui, votre navigateur (selon la version) peut ignorer le chargement de l'image s'il peut déterminer qu'elle n'est pas utile.

L'image a un display:none mais sa taille peut être lue par le script. Chrome v68.0 ne charge pas les images si le parent est caché.

Vous pouvez le vérifier là-bas : http://jsfiddle.net/tnk3j08s/

Vous auriez également pu le vérifier en consultant l'onglet "réseau" des outils de développement de votre navigateur.

Notez que si le navigateur se trouve sur un ordinateur doté d'un petit processeur, le fait de ne pas avoir à rendre l'image (et à mettre en page) rendra l'ensemble de l'opération de rendu plus rapide, mais je doute que ce soit quelque chose qui ait vraiment un sens aujourd'hui.

Si vous voulez empêcher le chargement de l'image, vous pouvez simplement ne pas ajouter l'élément IMG à votre document (ou définir l'élément IMG src à l'attribut "data:" ou "about:blank" ).

1 votes

Probablement oui. Et aussi la possibilité que l'image soit affichée plus tard. Et peut-être sur le principe général qu'un moteur d'exécution ne devrait pas essayer d'être trop intelligent et de réparer toutes les erreurs des développeurs.

52 votes

Une image src vide est dangereuse. Il envoie une requête supplémentaire au serveur. Une bonne lecture sur ce sujet nczonline.net/blog/2009/11/30/

2 votes

@SrinivasYedhuri Oui, vous avez raison. J'ai édité avec une meilleure solution.

134voto

Brent Points 370

Si vous faites de l'image l'image d'arrière-plan d'un div en CSS, lorsque ce div est défini sur "display : none", l'image ne se charge pas. Lorsque le CSS est désactivé, l'image ne se charge toujours pas, car le CSS est désactivé.

18 votes

Il s'agit en fait d'un conseil très utile pour le responsive design, à mon avis.

3 votes

Cela fonctionne dans FF, Chrome, Safari, Opera, Maxthon. Je n'ai pas essayé IE.

14 votes

Une nouveauté à l'avant ! <div hidden style="display:none;width:0;height:0;visibility:hidden;backg‌​round:url('test.jpg'‌​)"></div> . Résultats : Firefox 29 et Opera 12 ne se chargent pas. IE 11 et Chrome 34 se chargent.

59voto

DMTintner Points 2396

La réponse n'est pas aussi simple qu'un simple oui ou non. Consultez les résultats d'un test que j'ai récemment effectué :

  • Dans Chrome : Les 8 images de capture d'écran-* sont chargées (img 1)
  • Dans Firefox : Seule l'image de la capture d'écran* actuellement affichée (img 2) est chargée.

Donc, après avoir creusé davantage, j'ai trouvé ce qui explique comment chaque navigateur gère le chargement des ressources img en fonction de css display : none ;

Extrait de l'article de blog :

  • Chrome et Safari (WebKit) :
    WebKit télécharge le fichier à chaque fois, sauf lorsqu'un arrière-plan est appliqué par l'intermédiaire d'une requête requête média.
  • Firefox :
    Firefox ne téléchargera pas l'image appelée avec l'image d'arrière-plan si les styles sont masqués, mais il téléchargera toujours les actifs à partir des balises img.
  • Opéra :
    Comme le fait Firefox, Opera ne chargera pas d'images d'arrière-plan inutiles.
  • Internet Explorer :
    IE, comme WebKit, téléchargera les images d'arrière-plan même si elles ont display : none ; Quelque chose d'étrange apparaît avec IE6 : Les éléments avec une image d'arrière-plan et display : none en ligne ne seront pas téléchargés... Mais ils le seront si ces styles ne sont pas appliqués en ligne.

Chrome- All 8 screenshot-* images loaded

Firefox- Only the 1 screenshot-* image loaded that is currently being displayed

1 votes

Tant que ces résultats ne font pas partie des normes, ils sont tout à fait inutiles. Chrome change de moteur de rendu, Opera change aussi, et IE sera remplacé par autre chose. Vous ne pouvez pas compter sur la mise en œuvre de fonctionnalités marginales comme celle-ci pour rester stable dans le temps. La solution sera un moyen d'indiquer au navigateur quand une ressource doit être chargée de manière paresseuse, voire pas du tout.

6 votes

@MarkKaplun Je ne suggérais pas que ces résultats de test devaient vous montrer exactement ce que vous pouvez vous attendre à voir se produire toujours avec chaque navigateur, tout le temps. Je voulais seulement démontrer que la réponse n'est pas aussi simple que "oui ou non". Chaque navigateur met actuellement en œuvre cette fonctionnalité de manière différente et cela continuera probablement à être le cas pendant un certain temps.

0 votes

@DMTintner tout à fait exact. et depuis aujourd'hui je peux confirmer qu'iOS safari a chargé les images d'arrière-plan des div's qui étaient `display : none'. la meilleure approche est de ne rien supposer et si vous ne voulez pas qu'une image soit chargée, ne la référencez pas dans une balise html.

10voto

XToro Points 354

Oui, le rendu sera plus rapide, légèrement, seulement parce qu'il n'y a pas besoin de rendre l'image et que c'est un élément de moins à trier sur l'écran.

Si vous ne voulez pas qu'il soit chargé, laissez un DIV vide dans lequel vous pourrez charger du html plus tard, contenant une balise <img> étiquette.

Essayez d'utiliser firebug ou wireshark comme je l'ai déjà mentionné et vous verrez que les fichiers sont effectivement transférés même si display:none est présent.

Opera est le seul navigateur qui ne charge pas l'image si l'affichage est défini sur none. Opera est maintenant passé à webkit et rendra toutes les images même si leur affichage est réglé sur none.

Voici une page de test qui le prouve :

http://www.quirksmode.org/css/displayimg.html

8voto

onlyurei Points 136

Quirks Mode : images et affichage : none

Lorsque l'image a display: none ou se trouve à l'intérieur d'un élément avec display:none le navigateur peut choisir de ne pas télécharger l'image jusqu'à ce que l'utilisateur ait reçu l'information. display est fixé à une autre valeur.

Seul Opera télécharge l'image lorsque vous basculez l'option display à block . Tous les autres navigateurs le téléchargent immédiatement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X