Chargement dynamique des fonctions JS
Généralement, lorsque nous aurons besoin de charger des fichiers js, nous utiliserons des balises de script, similaires au code suivant :
1. Ordre de lecture strict. Étant donné que le navigateur lit les fichiers Javascript dans l'ordre dans lequel <script> apparaît dans la page Web, puis les exécute immédiatement, lorsque plusieurs fichiers dépendent les uns des autres, le fichier avec le moins de dépendance doit être placé en premier et celui avec la plus grande dépendance doit être placée en premier. Le fichier doit être placé à la fin, sinon le code signalera une erreur. </p>
<p>2. Problèmes de performances. Le navigateur utilise le "mode synchrone" pour charger la balise <script>, ce qui signifie que la page sera "bloquée", en attendant que le fichier JavaScript soit chargé avant d'exécuter le code HTML suivant. Lorsqu'il y a plusieurs balises <script>, le navigateur ne peut pas les lire en même temps. Il doit lire l'une avant de lire l'autre, ce qui entraîne un allongement considérable du temps de lecture et un ralentissement de la réponse de la page. </p>
<p>À ce stade, nous penserons au chargement dynamique de JS. La méthode d'implémentation de chargement dynamique de JS est similaire au code suivant</p>
<p></p>
<div class="codetitle">
<span><a style="CURSOR: pointer" data="44841" class="copybut" id="copybut44841" onclick="doCopy('code44841')"><u>Copier le code</u></a></span> Le code est le suivant :</div>
<div class="codebody" id="code44841">
<br>
/*<br>
*@desc : Ajouter dynamiquement un script<br>
*@param src : L'adresse du fichier js chargé <br>
*@param callback : La fonction de rappel qui doit être appelée après le chargement du fichier js<br>
*@démo :<br>
addDynamicStyle('http://webresource.c-ctrip.com/code/cquery/LABjs/LAB.js', function() {<br>
alert('lab.js sur le serveur Ctrip est chargé')<br>
});<br>
*/<br>
fonction addDynamicJS(src, rappel) {<br>
var script = document.createElement("script");<br>
script.setAttribute("type", "text/javascript");<br>
script.src = src[i];<br>
Script.charset = 'gb2312';<br>
Document.body.appendChild(script);<br>
Si (rappel != non défini) {<br>
script.onload = function () {<br>
rappel();<br>
><br>
><br>
><br>
</div>
<p>Cela ne provoquera pas de blocage de page, mais cela posera un autre problème : le fichier Javascript chargé de cette manière n'est pas dans la structure DOM d'origine, donc les fonctions de rappel spécifiées dans l'événement DOM-ready (DOMContentLoaded) et window.onload événement N'a aucun effet sur lui. </p>
<p>À ce stade, nous penserons à utiliser certaines bibliothèques de fonctions externes pour gérer efficacement les problèmes de chargement JS. </p>
<p><strong>Entrons dans le vif du sujet et parlons de LAB.js</strong></p>
<p>LAB.js</p>
<p>Si nous utilisons la méthode traditionnelle pour charger js, le code écrit sera généralement celui indiqué dans le code ci-dessous. <br>
</p>
<div class="codetitle">
<span><a style="CURSOR: pointer" data="22815" class="copybut" id="copybut22815" onclick="doCopy('code22815')"><u>Copier le code</u></a></span> Le code est le suivant :</div>
<div class="codebody" id="code22815">
<br>
<script src="aaa.js"></script>
Si nous utilisons LAB.js, pour implémenter la fonction de code ci-dessus, utilisez la méthode suivante
Plusieurs chaînes $LAB peuvent être exécutées en même temps, mais elles sont complètement indépendantes et il n'y a pas de relation d'ordre. Si vous souhaitez vous assurer qu'un fichier JavaScript s'exécute après l'autre, vous ne pouvez les écrire que dans la même opération en chaîne. Ce n'est que lorsque certains scripts ne sont absolument pas liés que vous devriez envisager de les diviser en différentes chaînes $LAB, indiquant qu'il n'y a aucune corrélation entre eux.
Exemples d'utilisation générale
Afficher les informations de chargement de LAB.js dans la console
Si vous souhaitez déboguer ou voir les informations de chargement de chaque js sur la console, vous pouvez utiliser la méthode $LAB.setGlobalDefaults. Veuillez consulter l'exemple de code pour une utilisation spécifique.
$LAB.setGlobalDefaults({ Debug : true }) //Activer le débogage
$LAB
//La première chaîne d'exécution
.script('http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js')
.script('http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js')
//Deuxième chaîne d'exécution
.wait(function () {
//console.log(window.$)
//console.log(window._)
})
//La troisième chaîne d'exécution
.script('http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.1.1/js/bootstrap.min.js')
.script('http://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.pack.js')
//La quatrième chaîne d'exécution
.wait(function () {
// console.log(plugin1Function)
// console.log(plugin2Function)
})
//La cinquième chaîne d'exécution
.script('js/aaa.js')
.script('js/bbb.js')
//La sixième chaîne d'exécution
.wait(function () {
// console.log(module1Function)
// console.log(module2Function)
})
À ce moment, ouvrez la console et consultez les informations, comme indiqué ci-dessous :
Je pense que vous serez étonné par la fonction de débogage de Lab.js lorsque vous verrez cela. En fait, Lab.js est effectivement assez puissant, et je ne comprends que certaines de ses fonctions superficielles. Écrivez-le d’abord et partagez-le pour votre propre commodité à l’avenir.