Bien que de plus en plus de sites Web soient développés à l'aide de la technologie AJAX, la création d'une application AJAX complexe reste un problème.
Quelles sont les principales raisons de ces difficultés ? Est-ce un problème de communication asynchrone avec le serveur ? Ou est-ce un problème de programmation de l'interface graphique ? Habituellement, ces deux tâches sont accomplies par des programmes de bureau, alors pourquoi est-il si difficile de développer une application AJAX capable de réaliser la même fonction ?
Tout le monde sait que JavaScript est exécuté dans un seul thread, mais il peut également exécuter une méthode régulièrement via setTimeout ou setInterval, vous pouvez continuer à exécuter la logique principale après avoir envoyé une requête au serveur mais sans recevoir de réponse. . La façon dont cela est fait est discutée ci-dessous.
Regardez d'abord le morceau de code suivant :
<html> <body> <script type="text/javascript"> function printHello() { console.time("hello"); } function printHello1() { console.timeEnd("hello"); } setTimeout(printHello,1000); setTimeout(printHello1,5000); function wait(time) { var now = Date.now(); while(Date.now() - now < time) { } } wait(5000); </script> </body> </html>
Le résultat de l'exécution du code ci-dessus est
hello: 0.124ms
Comme le montre le code, printHello et printHello1 sont exécutés presque simultanément. Pour un modèle multithread, l'intervalle d'exécution doit être de 4 000 ms.
La raison de ce qui précède est que setTimeout ne pousse l'événement dans la file d'attente qu'à ce moment précis, plutôt que de l'exécuter immédiatement. Le moment précis de l'exécution dépend de l'inactivité du navigateur.
En fait, bien que javascript soit monothread, les navigateurs sont multi-thread. Un navigateur typique a les threads suivants :
.thème du moteur javascript
Fil de rendu de l'interface
Fil de déclenchement d'événements du navigateur
Fil de demande HTTP
Le thread unique Javascript fait référence au thread du moteur JavaScript traitant sa file d'attente d'événements dans un seul thread, et le navigateur est piloté par les événements. De nombreux événements sont asynchrones, tels que les événements de clic de souris, setTimeout et les événements de rappel Ajax. se produisent, le navigateur placera ces événements dans la file d'attente d'exécution et attendra qu'ils soient exécutés lorsque le navigateur est inactif.
De plus, il convient de mentionner que l'appel ajax est effectivement asynchrone. Le navigateur démarrera un nouveau thread pour envoyer une requête au serveur si un événement de rappel est défini, l'événement de rappel sera placé dans l'événement en fonction. sur l'état de retour du serveur.
Ce qui précède est ma compréhension du multithreading JavaScript. Ma compréhension personnelle est limitée. J'espère également que tous les héros pourront fournir des opinions précieuses et apprendre ensemble. J'espère que l'introduction ci-dessus sera utile à tout le monde.