La question porte sur l'utilisation uniquement HTML et JavaScript . Le problème est qu'une deuxième demande au serveur par votre JavaScript (demandant le fichier header.html
"plus tard") est :
Lentement !
C'est donc inacceptable dans un environnement de production. La solution est d'importer un seul .js
et servir votre modèle HTML en utilisant uniquement ce fichier .js . Ainsi, dans votre HTML, vous pouvez avoir :
<script defer src="header.js"></script>
<header id="app-header"></header>
Et ensuite, dans votre header.js
mettez votre modèle. Utilisez des backticks pour cette chaîne HTML :
let appHeader = `
<nav>
/*navigation or other html content here*/
</nav>
`;
document.getElementById("app-header").innerHTML = appHeader;
Cela présente également l'avantage de pouvoir modifier le contenu de votre modèle. dynamiquement si vous en avez besoin ! (Si vous voulez que votre code soit propre, je vous recommande de ne pas inclure d'autre code dans ce code. header.js
fichier.)
Explication sur la vitesse
Dans le monde HTTP/2, le serveur web "comprend" quels fichiers supplémentaires (.css, .js, etc.) doivent être envoyés avec une requête spécifique. .html
et les envoie tous ensemble dans la réponse initiale. Mais, si dans votre "original" .html
vous n'avez pas cette header.html
importé (parce que vous avez l'intention de l'appeler plus tard avec un script), il ne sera pas envoyé initialement. Ainsi, lorsque votre JavaScript/jQuery le demandera (cela se produira beaucoup plus tard, lorsque le HTML et votre JavaScript seront "interprétés"), votre navigateur enverra une deuxième demande au serveur, attendra la réponse, puis fera son travail... C'est pourquoi c'est lent. Vous pouvez valider cela, en utilisant les outils de développement de n'importe quel navigateur, en observant la fonction header.html
à venir bien plus tard.
Donc, en règle générale (il y a beaucoup d'exceptions bien sûr), importez tous vos fichiers supplémentaires dans votre fichier d'origine. .html
(ou php
) si vous vous souciez de la vitesse. Utilisez defer
si nécessaire. N'importez pas de fichiers plus tard en utilisant JavaScript.