Maison interface Web tutoriel CSS Explication détaillée indiquant si le chargement CSS entraînera le blocage_CSS tutoriel_CSS_Web production de pages

Explication détaillée indiquant si le chargement CSS entraînera le blocage_CSS tutoriel_CSS_Web production de pages

Mar 21, 2018 pm 02:47 PM
css Tutoriel

Cette fois, je vais vous donner une explication détaillée pour savoir si le chargement de CSS provoquera un blocage. Quelles sont les précautions qui provoquent le blocage du chargement de CSS.

L'examen est enfin terminé. Aujourd'hui, je me suis soudain rappelé que alors que je cherchais un stage il y a quelque temps, l'intervieweur de Toutiao m'a demandé que l'exécution de js bloquerait l'analyse et le rendu du DOM. arborescence, donc le chargement CSS bloquera l'arborescence DOM. Donc, je ferai ensuite un test sur l'analyse et le rendu de l'arborescence DOM par chargement CSS.

Afin de terminer ce test, apprenons d'abord comment utiliser Chrome pour définir la vitesse de téléchargement

1 Ouvrez la console Chrome (appuyez sur F12), vous pouvez voir l'image ci-dessous, le focus est L'endroit où j'ai dessiné le cercle rouge

2. Cliquez sur l'endroit où j'ai dessiné le cercle rouge (Pas de limitation), vous verrez l'image ci-dessous, nous choisissons l'option GPRS

3. De cette façon, la limite supérieure de la vitesse de téléchargement de nos ressources sera limitée à 20kb/s. Bon, venons-en à notre. sujet principal

Le chargement CSS bloquera-t-il l'analyse et le rendu de l'arborescence DOM ?

Parlez en code :

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>css阻塞</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
      h1 {
        color: red !important
      }
    </style>
    <script>
      function h () {
        console.log(document.querySelectorAll(&#39;h1&#39;))
      }
      setTimeout(h, 0)
    </script>
    <link href="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.6/css/bootstrap.css" rel="stylesheet">
  </head>
  <body>
    <h1>这是红色的</h1>
  </body>
</html>

Hypothèse : le chargement CSS bloquera l'analyse de l'arborescence DOM et Rendu

Résultat de l'hypothèse : avant le chargement de bootstrap.css, le contenu suivant ne sera pas analysé ni rendu, donc ce que nous voyons au début devrait être un écran blanc et h1 ne sera pas affiché. Et le résultat de console.log devrait être un tableau vide pour le moment.

Résultat réel : comme indiqué ci-dessous

Le CSS bloquera-t-il l'analyse de l'arborescence DOM ?

Comme nous pouvons le voir sur l'image ci-dessus, lorsque le CSS n'a pas été chargé, h1 ne s'affiche pas, mais la sortie de la console est la suivante

On peut savoir que l'arborescence DOM a au moins été analysée en h1 à ce moment-là, mais le CSS n'a pas encore été chargé, ce qui signifie que le CSS ne bloquera pas l'analyse de l'arborescence DOM.

Le chargement CSS bloquera-t-il le rendu de l'arborescence DOM ?

D'après l'image ci-dessus, on peut également voir que lorsque le css n'a pas été chargé, la page affiche un écran blanc. Ce n'est que lorsque le css est chargé que la police rouge est. affiché, c'est-à-dire que bien que le contenu suivant ait été analysé, il n'a pas été rendu. Par conséquent, le chargement CSS bloquera le rendu de l’arborescence DOM.

Évaluation personnelle de ce mécanisme

En fait, je pense que cela peut aussi être un mécanisme d'optimisation du navigateur. Parce que lorsque vous chargez du CSS, vous pouvez modifier le style du nœud DOM suivant. Si le chargement du CSS ne bloque pas le rendu de l'arborescence DOM, alors une fois le CSS chargé, l'arborescence DOM devra peut-être être redessiné ou refondu, ce qui a causé des pertes inutiles. J'analyse donc simplement d'abord la structure de l'arborescence DOM, termine le travail qui peut être fait, puis attends que votre CSS soit chargé, puis restitue l'arborescence DOM selon le style final. Cette approche sera en effet meilleure en termes. de performances.

Le chargement de CSS bloquera-t-il l'exécution de js ?

De l'inférence ci-dessus, nous pouvons conclure que le chargement CSS ne bloquera pas l'analyse de l'arborescence DOM, mais il bloquera le rendu de l'arborescence DOM. Alors, le chargement CSS bloquera-t-il l'exécution de js ?

De même, vérifiez via le code.

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>css阻塞</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script>
      console.log(&#39;before css&#39;)
      var startDate = new Date()
    </script>
    <link href="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.6/css/bootstrap.css" rel="stylesheet">
  </head>
  <body>
    <h1>这是红色的</h1>
    <script>
      var endDate = new Date()
      console.log(&#39;after css&#39;)
      console.log(&#39;经过了&#39; + (endDate -startDate) + &#39;ms&#39;)
    </script>
  </body>
</html>

Hypothèse : le chargement CSS sera bloquer l'exécution des js suivants

Résultat attendu : le code js derrière le lien ne doit pas être exécuté tant que le chargement du CSS n'est pas terminé

Résultat réel :

Nous pouvons voir sur l'image ci-dessus que le code js situé avant l'instruction de chargement CSS est exécuté en premier, mais le code situé après l'instruction de chargement CSS n'est exécuté que lorsque le chargement CSS est terminé. Cela montre également que le chargement CSS bloquera l'exécution des instructions js suivantes. Voir l'image ci-dessous pour les résultats détaillés (le chargement CSS a pris plus de 5600 ms) :

Conclusion

À partir de ce qui précède, nous pouvons Les conclusions suivantes sont tirées :

Le chargement 1.css ne bloquera pas l'analyse de l'arborescence DOM
Le chargement 2.css bloquera le rendu de l'arborescence DOM
Le chargement 3.css bloquera le exécution des instructions js suivantes

Par conséquent, afin d'éviter que les utilisateurs voient un long temps d'écran blanc, nous devons améliorer autant que possible la vitesse de chargement des CSS. Par exemple, nous pouvons utiliser les méthodes suivantes :

1. (car CDN, selon les conditions de votre réseau, sélectionnera le nœud le plus proche avec du contenu mis en cache pour vous fournir des ressources, réduisant ainsi le temps de chargement)
2. Compressez le CSS (vous pouvez utiliser de nombreux outils d'empaquetage, tels que webpack, gulp, etc., vous pouvez également activer la compression gzip)
3. Utilisez le cache de manière raisonnable (les paramètres de contrôle du cache, d'expiration et de balise électronique sont tous bons, mais une chose à laquelle il faut faire attention est qu'une fois le fichier mis à jour, vous devez éviter la mise en cache et l'apport. L'une des solutions et prévention consiste à ajouter un numéro de version après le nom du fichier)
4. Réduisez le nombre de requêtes http, fusionnez plusieurs fichiers CSS ou écrivez-le simplement directement dans un style en ligne (une lacune du style en ligne) Il ne peut tout simplement pas être mis en cache)

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur. le site php chinois !
Lecture recommandée :

Comment créer une ligne de 0,5 pixel en CSS

Implémentation de la barre de menu de transition en douceur de la transition CSS3

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser PHP pour créer des fonctions de partage social PHP Partage d'interface Pratique Comment utiliser PHP pour créer des fonctions de partage social PHP Partage d'interface Pratique Jul 25, 2025 pm 08:51 PM

La méthode principale de création de fonctions de partage social dans PHP est de générer dynamiquement des liens de partage qui répondent aux exigences de chaque plate-forme. 1. Obtenez d'abord la page actuelle ou les informations d'URL et d'article spécifiées; 2. Utilisez UrLencode pour coder les paramètres; 3. Épisser et générer des liens de partage en fonction des protocoles de chaque plate-forme; 4. Afficher les liens sur l'avant pour que les utilisateurs puissent cliquer et partager; 5. Générez dynamiquement des balises OG sur la page pour optimiser l'affichage du contenu du partage; 6. Assurez-vous d'échapper à la saisie des utilisateurs pour empêcher les attaques XSS. Cette méthode ne nécessite pas d'authentification complexe, a de faibles coûts de maintenance et convient à la plupart des besoins de partage de contenu.

PHP crée un système de commentaires de blog pour monétiser la revue des commentaires PHP et la stratégie anti-brosse PHP crée un système de commentaires de blog pour monétiser la revue des commentaires PHP et la stratégie anti-brosse Jul 25, 2025 pm 08:27 PM

1. La maximisation de la valeur commerciale du système de commentaires nécessite de combiner la livraison précise de la publicité native, les services à valeur ajoutée par l'utilisateur (tels que le téléchargement d'images, les commentaires de recharge), d'influencer le mécanisme d'incitation basé sur la qualité des commentaires et la conformité de la monétisation anonyme des données de données; 2. La stratégie d'audit doit adopter une combinaison de mécanismes de filtrage des mots clés dynamiques pré-audit et de signalement des utilisateurs, complétés par une note de qualité des commentaires pour réaliser une exposition hiérarchique de contenu; 3. Anti-brosses nécessite la construction d'une défense multicouche: la vérification sans capteur RecaptChav3, le robot de reconnaissance de champ de miel, IP et la limite de fréquence d'horodatage empêchent l'arrosage, et la reconnaissance du modèle de contenu marque les commentaires suspects et itéra en continu pour traiter les attaques.

Comment utiliser PHP pour développer une plate-forme communautaire Q&A explication détaillée du modèle de monétisation communautaire interactive PHP Comment utiliser PHP pour développer une plate-forme communautaire Q&A explication détaillée du modèle de monétisation communautaire interactive PHP Jul 23, 2025 pm 07:21 PM

1. Le premier choix pour la combinaison Laravel Mysql Vue / React dans la communauté de questions et réponses de développement PHP est le premier choix pour la combinaison Laravel Mysql Vue / React, en raison de sa maturité dans l'écosystème et de l'efficacité de développement élevée; 2. Les performances élevées nécessitent une dépendance à la cache (redis), une optimisation de la base de données, des files d'attente CDN et asynchrones; 3. La sécurité doit être effectuée avec le filtrage d'entrée, la protection CSRF, les HTTP, le cryptage de mot de passe et le contrôle d'autorisation; 4. Publicité facultative, abonnement aux membres, récompenses, commissions, paiement des connaissances et autres modèles, le noyau est de faire correspondre le ton communautaire et les besoins des utilisateurs.

Comment créer un environnement PHP Nginx avec MacOS pour configurer la combinaison des services Nginx et PHP Comment créer un environnement PHP Nginx avec MacOS pour configurer la combinaison des services Nginx et PHP Jul 25, 2025 pm 08:24 PM

Le rôle principal de Homebrew dans la construction de l'environnement Mac est de simplifier l'installation et la gestion des logiciels. 1. Homebrew gère automatiquement les dépendances et encapsule les processus de compilation et d'installation complexes en commandes simples; 2. Fournit un écosystème de package logiciel unifié pour assurer la normalisation de l'emplacement et de la configuration de l'installation logicielle; 3. Intègre les fonctions de gestion des services et peut facilement démarrer et arrêter les services via BrewServices; 4. Mise à niveau et maintenance des logiciels pratiques et améliore la sécurité et les fonctionnalités du système.

Quelles sont les incohérences courantes du navigateur CSS? Quelles sont les incohérences courantes du navigateur CSS? Jul 26, 2025 am 07:04 AM

Différents navigateurs ont des différences dans l'analyse CSS, ce qui entraîne des effets d'affichage incohérents, y compris principalement la différence de style par défaut, la méthode de calcul du modèle de boîte, le niveau de support Flexbox et la disposition de la grille et le comportement incohérent de certains attributs CSS. 1. Le traitement de style par défaut est incohérent. La solution consiste à utiliser cssreset ou normaliser.css pour unifier le style initial; 2. La méthode de calcul du modèle de boîte de l'ancienne version de IE est différente. Il est recommandé d'utiliser la taille d'une boîte: Border-Box de manière unifiée; 3. Flexbox et Grid fonctionnent différemment dans les cas de bord ou dans les anciennes versions. Plus de tests et utilisent Autoprefixer; 4. Certains comportements d'attribut CSS sont incohérents. Caniuse doit être consulté et rétrogradé.

Quel est l'objectif de la propriété CSS «Will-Change»? Quel est l'objectif de la propriété CSS «Will-Change»? Jul 23, 2025 am 03:47 AM

Will-Change est une propriété CSS qui est utilisée pour informer les éléments du navigateur avant les modifications possibles pour optimiser les performances. Sa fonction principale est de permettre au navigateur de créer des couches à l'avance pour améliorer l'efficacité du rendu. Les valeurs communes incluent la transformation, l'opacité, etc., et peuvent également être séparées par plusieurs virgules d'attribut; Il convient aux animations d'attribut non standard, aux transitions de composants complexes et aux animations déclenchées par l'interaction utilisateur; Mais il doit être évité de maltraitance, sinon cela entraînera une utilisation excessive de la mémoire ou une charge de GPU accrue; La meilleure pratique consiste à postuler avant que le changement ne se produise et de le supprimer une fois sa fin.

Entrée gratuite sur le site Web des ressources du produit fini de Vue. Le produit fini complet est consulté en permanence en ligne Entrée gratuite sur le site Web des ressources du produit fini de Vue. Le produit fini complet est consulté en permanence en ligne Jul 23, 2025 pm 12:39 PM

Cet article a sélectionné une série de sites Web de ressources de produits finis de haut niveau pour les développeurs et les apprenants VUE. Grâce à ces plateformes, vous pouvez parcourir, apprendre et même réutiliser des projets complets massifs de haute qualité en ligne gratuitement, améliorant ainsi rapidement vos compétences en développement et vos capacités de pratique de projet.

Comment utiliser les sélecteurs d'attribut dans CSS? Comment utiliser les sélecteurs d'attribut dans CSS? Jul 23, 2025 am 03:50 AM

Dans CSS, le sélecteur d'attributs peut définir des styles en fonction des attributs et des valeurs de l'élément, offrant un contrôle de style plus flexible. ① Utilisation basique: sélectionnez des éléments avec des attributs spécifiques, tels que l'entrée [Type] pour correspondre à toutes les entrées contenant des attributs de type; ②Exact Match: use = pour faire correspondre les valeurs d'attribut spécifiques, telles que l'entrée [type = "texte"] pour ne correspondre que dans la zone d'entrée de texte; ③ Match partiel: use = (inclure), ^ = (start) et $ = (fin), pour faire correspondre une partie des valeurs d'attribut, telles qu'un [href = "example.com"] pour faire correspondre les ancres contenant des liens spécifiques; Match de combinaison: correspond à plusieurs attributs en même temps, comme InputType = & Qu

See all articles