Maison > Article > interface Web > tutoriel nodejs I/O_node.js asynchrone
Avant-propos
À mon image, l'asynchronie est apparue pour la première fois avec ajax. Je travaillais encore sur .net à cette époque, puis .net est en fait sorti avec un contrôle asynchrone...
Même si j'ai finalement découvert qu'il n'est pas asynchrone... Ensuite, le front-end est beaucoup utilisé en asynchrone. Si ce n'est pas un programme asynchrone, vous seriez gêné de dire que le NodeJ que vous avez écrit a été créé. par JavaScript
La fonctionnalité du modèle de programmation asynchrone a également été introduite. L'asynchrone présente de nombreux avantages, mais c'est un cauchemar pour la conception. L'asynchrone perturbera le timing, ce qui augmente la difficulté de conception,
Mais l'asynchronie a révolutionné l'amélioration des performances et l'expérience utilisateur, les fonctionnalités asynchrones de NodeJS sont donc assez évidentes. Aujourd'hui, nous allons apprendre brièvement
.E/S asynchrones
En fait, au niveau du système d'exploitation, il n'existe que deux méthodes d'E/S, bloquantes et non bloquantes
Dans le modèle de blocage, l'application doit attendre que les E/S soient terminées avant de renvoyer le résultat. Sa caractéristique est qu'elle appelle le backend et attend que le système termine toutes les opérations. attendez, tandis que les appels non bloquants reviendront immédiatement
.J'ai lu un livre pour la première fois, mais j'ai l'impression que la description ici n'est pas claire, et le modèle asynchrone est en fait très gros, juste une amélioration du niveau de perception
J'ai maintenant deux vues d'application d'une seule page, une page de recherche et une page de liste. Lorsque j'effectue une recherche, je dois effectuer une recherche via différents canaux. Shenzhen doit appeler un tiers, et le tiers obtient des données à partir de canaux spécifiques.
Bien sûr, c'est très lent en ce moment. Si je passe directement de A à B et que je crée ensuite une boîte de chargement ou quelque chose pour charger des données dans B, il n'y aura pas de problème maintenant, c'est que j'ai besoin d'une animation. effets pour passer de A à B
Cela nécessite que le rendu Bview soit terminé lors du changement, au moins il n'obtiendra pas de données dans le processus et ne démarrera pas le rendu, donc l'asynchrone n'est peut-être pas si facile à utiliser pour le moment. Même s'il demande des données de manière asynchrone, cela nécessite également. acquisition de données pour charger la page
.Cela bloque toujours le chargement, et il n'y a aucun moyen de le faire en termes de business
Aucune technologie n'est parfaite. Le blocage entraîne un gaspillage d'attente du processeur. Non seulement le non-blocage perturbe la logique, mais il peut également nécessiter une interrogation pour confirmer si le chargement est terminé (j'ai déjà utilisé l'interrogation pour détecter si un DOM a été généré).
NodeJs utilise un mécanisme de boucle d'événements. Lorsque le processus démarre, Node crée une boucle infinie à chaque fois que le corps de la boucle est exécuté, le processus est un Tick. Le processus de chaque Tick consiste à voir s'il y a des événements qui en ont besoin. à traiter
S'il y en a, supprimez l'événement concerné, exécutez-le, puis entrez la logique suivante. Sinon, quittez la boucle
.Dans chaque processus Tick, il y a un ou plusieurs observateurs dans chaque boucle d'événement. Le processus permettant de déterminer s'il y a un événement à traiter consiste à demander à ces observateurs si l'événement doit être traité
Prenons notre modèle d'événement HTML comme exemple
Pour HTML, en fait, chacun de ses DOM est un observateur. Le DOM de la page observe les changements de notre page Web. Après avoir fourni un addEventListener à un DOM, nous enregistrerons une fonction de rappel pour celui-ci. nous nous inscrivons seront placés dans un objet "conteneur". Pour le moment, il s'agit simplement d'un enregistrement. Ces fonctions seront déclenchées une fois les conditions remplies (lorsque la page change), et les événements pertinents seront retirés du conteneur et. exécuté
On clique maintenant une fois sur un point de la page, puis on va sortir la collection d'évènements de clic du conteneur, on va trouver le DOM concerné, puis déclencher les fonctions de rappel de ces DOM
Les événements peuvent provenir de clics d'utilisateur ou de modifications de données. Dans Node, les événements proviennent principalement de requêtes réseau et d'E/S de fichiers. Ces événements auront des observateurs correspondants, tels que des observateurs de fichiers et des observateurs de réseau
.Il s'agit également d'un modèle de production/consommation typique, des E/S asynchrones, les requêtes réseau assurent la production d'événements, les événements sont transmis à divers observateurs, les observateurs enregistrent les événements et la boucle d'événements est responsable de la suppression des événements puis de leur exécution
PS : en prenant le clic comme exemple, chaque observateur DOM enregistre d'abord l'événement, le processus de page surveille en permanence la page, l'utilisateur clique sur la page pour générer des événements, puis l'événement de clic enregistré est retiré du conteneur et exécuté. ,
La logique générale des fonctions est contrôlée par nos soins :
Dans le cas d'un fonctionnement asynchrone, la fonction de rappel n'est pas contrôlée par le développeur. Chaque fois que js est appelé, un objet de demande de produit de transition sera généré
.fs.open ouvre un fichier basé sur le chemin et les paramètres pour obtenir les données pertinentes. Il appelle l'interface associée à c en interne, et un objet intermédiaire sera généré dans le processus, dans lequel tous nos états seront...
PS : je me sens mal après l'avoir regardé si longtemps
Conclusion
Ce qui précède concerne les E/S asynchrones dans nodejs. Résumé personnel S'il y a des omissions ou des erreurs, veuillez les signaler.