L'éditeur suivant vous apportera une brève discussion sur l'exécution asynchrone de js. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur pour y jeter un œil.
1.JavascriptL'environnement d'exécution du langage est "single thread":
Avantages : il est relativement simple à mettre en œuvre et l'environnement d'exécution est relativement simple ;
Inconvénients : tant qu'une tâche prend beaucoup de temps, les tâches suivantes doivent être mises en file d'attente, ce qui retardera l'exécution de l'ensemble du programme. L'absence de réponse courante du navigateur (mort suspendue) est souvent causée par un certain morceau de code Javascript exécuté pendant une longue période (comme une boucle infinie), ce qui bloque la page entière à cet endroit et empêche d'autres tâches d'être effectuées.
Afin de résoudre ce problème, le langage Javascript divise le mode d'exécution des tâches en deux types : synchrone (Synchronous) et asynchrone (Asynchronous).
2. Plusieurs méthodes de programmation en "mode asynchrone" :
(1) fonction de rappel : L'avantage est qu'il est simple, facile à comprendre et à déployer, mais l'inconvénient est qu'il n'est pas propice à la lecture et à la maintenance du code. Les différentes parties sont fortement couplées (Coupling), ce qui rend. la structure du programme est confuse et le processus difficile à suivre (en particulier les fonctions de rappel imbriquées), et une seule fonction de rappel peut être spécifiée pour chaque tâche.
(2) Adopter le mode événementiel (écoute d'événements) : L'avantage est qu'il est plus facile à comprendre, plusieurs événements peuvent être liés et plusieurs événements peut être spécifié pour chaque événement. La fonction de rappel peut être "découplée", ce qui est propice à la réalisation de la modularisation. L'inconvénient est que l'ensemble du programme doit être piloté par des événements et que le processus en cours devient très flou.
(3)Modèle d'observateur (modèle de publication-abonnement) : La nature de cette méthode est similaire à « l'écoute d'événements », mais c'est évidemment mieux que ce dernier. Parce que nous pouvons surveiller le fonctionnement du programme en consultant le « Centre de messages » pour voir combien de signaux existent et combien d'abonnés chaque signal possède.
3. Contrôle des processus des opérations asynchrones.
(1) Exécution en série : Écrivez une fonction de contrôle de processus et laissez-la contrôler les tâches asynchrones. Une fois qu'une tâche est terminée, une autre exécute. un autre.
var items = [ 1, 2, 3, 4, 5, 6 ]; var results = []; function series(item) { if(item) { async( item, function(result) { results.push(result); return series(items.shift()); }); } else { return final(results); } } series(items.shift());
La série de fonctions est une fonction série. Elle exécutera des tâches asynchrones en séquence. La fonction finale ne sera exécutée que lorsque toutes les tâches seront terminées. Le tableau items stocke les paramètres de chaque tâche asynchrone et le tableau results stocke les résultats en cours d'exécution de chaque tâche asynchrone.
(2) Exécution parallèle : Toutes les tâches asynchrones sont exécutées en même temps et la fonction finale n'est exécutée que lorsque toutes sont terminées.
//forEach方法会同时发起6个异步任务,等到它们全部完成以后,才会执行final函数。 var items = [ 1, 2, 3, 4, 5, 6 ]; var results = []; items.forEach(function(item) { async(item, function(result){ results.push(result); if(results.length == items.length) { final(results); } }) });
L'avantage de l'exécution parallèle est qu'elle est plus efficace Par rapport à l'exécution en série, qui ne peut exécuter qu'une seule tâche à la fois, elle permet de gagner du temps. Mais le problème est que s’il existe de nombreuses tâches parallèles, il est facile d’épuiser les ressources du système et de ralentir la vitesse de fonctionnement. Il existe donc une troisième méthode de contrôle des processus.
(3) Combinaison de parallèle et de série : Définissez un seuil, et seules n tâches asynchrones peuvent être exécutées en parallèle au maximum à la fois. Cela évite une utilisation excessive des ressources système.
//变量running记录当前正在运行的任务数,只要低于门槛值,就再启动一个新的任务 //如果等于0,就表示所有任务都执行完了,这时就执行final函数 //最多只能同时运行两个异步任务。 var items = [ 1, 2, 3, 4, 5, 6 ]; var results = []; var running = 0; var limit = 2; function launcher() { while(running < limit && items.length > 0) { var item = items.shift(); async(item, function(result) { results.push(result); running++; if(items.length > 0) { launcher(); } }); running--; if(running == 0) { final(); } } }
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!