Introduction de base
Commençons par un «modèle» de concept important. D'une manière générale, un modèle dans le Web est une page qui peut générer un fichier après avoir rempli des données. À strictement parler, le moteur de modèle doit utiliser des fichiers dans un format spécifique et les données fournies pour compiler et générer des pages. Les modèles sont à peu près divisés en modèles frontaux (tels que EJS) et des modèles back-end (tels que Freemarker) compilés respectivement du navigateur et du serveur.
Étant donné que certains étudiants sur place ne savaient pas grand-chose sur Node.js, voici quelques-unes des connaissances pertinentes de Node.js. Je ne parlerai pas des définitions des événements, asynchrones et ainsi de suite sur le site officiel. Ici, j'emprunte une image à Pu Lingshu pour expliquer la structure de Node.js. Si vous comprenez Java, vous pouvez le comprendre comme une version JS de JVM. Les navigateurs incluent généralement des rendus et des moteurs de script JS. En prenant le navigateur Chrome à titre d'exemple, ils utilisent le moteur de script du noyau WebKit et le moteur de script V8, tandis que Node.js utilise le moteur V8. En bref, il s'agit d'un environnement JS en cours d'exécution, tout comme l'outil de débogage F12 du navigateur, mais Node.js n'a pas DOM et BOM.
Cette image décrit certaines informations sur Node.js, tels que NPM, l'excellent gestionnaire de packages, la communauté CNODE et GitHub, qui ont promu la prospérité de Node.js dans une certaine mesure et ont fourni des garanties techniques.
Les grandes entreprises sont généralement la gamme météorologique de la technologie. Par exemple, la réaction angulaire et Facebook de Google est maintenant très populaire. Seules 3 grandes entreprises sont répertoriées ici comme exemples. Inutile de dire que l'architecture à mi-chemin de Taobao est, Pu Ling, le pionnier de Node Node.js, vient de Taobao. Qunar a également développé un cadre technique qui devrait être appelé "QTX". L'équipe 75 dirigée par Yueying a lancé un framework de serveur Web basé sur ES6 / ES7 - Thinkjs. À cette époque, notre directeur technique était très optimiste, mais parce que je n'avais pas le temps d'apprendre ES6 et que les plug-ins n'étaient pas assez riches, j'ai quand même choisi un express plus mature.
De retour au sujet, ce tableau répertorie trois méthodes de développement pour la séparation des extrémités avant et arrière auxquelles j'ai été exposé. Le premier est les modèles de langage backend les plus courants qui utilisent Java, qui sont conviviaux pour le référencement, et sont meilleurs pour l'utilisation du cache et la réduction du fardeau de rendu du navigateur. Le plus gros problème est que le degré de couplage de fichiers de modèle est trop élevé. Personne ne veut résoudre le problème. Le personnel frontal ne peut pas voir les données, le personnel back-end ne comprend pas la page et les fichiers de modèle sont comme une pomme de terre chaude. La seconde est la solution de mise en œuvre actuelle du terminal mobile de notre projet, qui utilise le cadre de l'angulaire (les instructions angulaires peuvent être considérées comme des modèles frontaux) et le serveur proxy inversé de Nginx pour découpler complètement le frontal et le back-end, et n'interagir qu'avec les données via AJAX. Cette solution est exactement l'opposé des avantages et des inconvénients de la première. Les performances des modèles frontaux sont toujours un problème, en particulier sur les appareils mobiles, et plus particulièrement sur les appareils mobiles bas de gamme. Le dernier est le nouveau projet qui utilise Node.js comme serveur frontal, qui divise les responsabilités frontales du navigateur au niveau du modèle, résolvant tous les problèmes ci-dessus, mais il y a en effet de nouveaux problèmes, et ce problème sera analysé plus tard.
Bien sûr, le développement complet est également très adapté aux petits projets. Pour le développement traditionnel JSP / PHP, le coût de communication du développement complet est inférieur, et les développeurs peuvent facilement comprendre l'ensemble du module fonctionnel, mieux restaurer la conception du produit. Surtout le développement complet basé sur le langage JS: les météores et les technologies moyennes qui émergent désormais le développement frontal et back-end géré directement dans une langue. Avec MongoDB, les données du navigateur à la base de données sont directement utilisées sans s'échapper, et il n'est pas nécessaire d'écrire SQL, ce qui réduit considérablement le coût de développement.
Certains plugins ont utilisé pour construire le serveur Node.js cette fois. Il n'est pas nécessaire d'introduire le célèbre express, le framework de serveur Web léger. C'est également une coïncidence d'utiliser le moteur de modèle de guidon, car Express4 est le guidon par défaut, il vaut le métier d'être le moteur de modèle de "logique faible". Il préconise de réduire la logique du modèle et d'essayer d'utiliser uniquement les variables et la pagination. Sur la base de son concept de conception, je n'ai élargi que deux aides. Article spécifique: https://yalishizhude.github.io/2016/01/22/handlebars/superagent est toujours utilisé à cause de Express4. Parce que son code de test utilise SuperTest, SuperTest est basé sur SuperAgent, donc SuperAgent est utilisé pour transmettre et initier les demandes. SuperAgent est encore trop faible et ne peut pas être établi pour de longues connexions. Je recommande toujours le plugin de demande. Il n'y a rien à présenter à RestulEapi. Le serveur frontal et le navigateur, le serveur frontal et le serveur back-end utilisent tous cet ensemble de spécifications. Fondamentalement, l'URL pointe vers les ressources, ajoute, supprime, modifie et vérifie, et la méthode de demande spécifique est exprimée, les codes d'état représentent les résultats, etc. ~ L'outil d'emballage Gulp, WebPack, étudie depuis longtemps et a constaté que chaque page ajoutée nécessite une modification du fichier de configuration. C'est trop douloureux, alors j'ai abandonné.
Processus de développement
Si ce partage explique principalement sur la façon d'utiliser Node.js comme serveur frontal pour réaliser la séparation frontale, il n'y a rien à dire, regardez simplement l'article sur Taobao UED. Le plus gros problème avec la séparation des extrémités avant et arrière est qu'elle augmente les coûts de communication, en particulier la définition et le débogage des interfaces. Dans le processus de développement traditionnel dans la figure ci-dessus, la définition de l'interface sera placée dans le serveur d'interface, puis les extrémités avant et arrière effectueront un débogage local en fonction des données de fraude de document d'interface, puis effectueront un débogage conjoint. Ce lien est lorsque les fins avant et arrière commencent à se battre. Ce paramètre est mauvais et la valeur de retour est erronée. Bref, c'est une perte de temps. Ensuite, voyons comment ce problème est résolu dans notre projet ~
Le problème de l'interface effilochée à l'avant et à l'arrière a toujours existé. En tant que conservateur, je crois au développement itératif, donc la première étape consiste à ajouter un serveur simulé. La magie de ce serveur est qu'elle génère automatiquement de fausses données en fonction du document d'interface, implémentant l'interface, à savoir l'API et les étudiants frontaux n'ont plus à écrire les données à mort pour les tests. Il n'y a aucun moyen, qui a dit que je suis un développeur frontal? Tout d'abord, je pense à mon propre peuple. Hehe ~ Bien sûr, cela n'est que bénéfique pour le développement frontal dans une certaine mesure. Il y aura également des problèmes lorsque les interfaces et les documents du back-end sont incohérents et sont connectés. ce qu'il faut faire?
J'ai accidentellement vu un article de Lao Ma sur le blog du Blade Master, qui parle spécifiquement de la séparation des annuels avant et arrière. L'un des concepts importants est les tests de contrat, également appelés tests bilatéraux. Le concept principal est de résoudre le problème du débogage conjoint à distance. Vérifiez les paramètres des extrémités avant et arrière et nécessitez que tout le monde se développe selon le document d'interface. Inspiré par celui-ci, la règle JSON-Schema a été ajoutée pour réaliser la vérification des paramètres des demandes HTTP, et quiconque ne suit pas les règles le changera.
Ce Redmin est notre premier gestionnaire de documents d'interface et n'a d'autre fonction que des fonctions d'enregistrement et de visualisation.
Swagger est connu comme le serveur de documents d'interface le plus populaire au monde. Il a une belle interface et de nombreux plug-ins. Il peut générer directement du code de test pour les langues arrière. Cependant, je ne l'ai jamais compris lors du déploiement, et le format Yaml n'est pas aussi bon que JSON, alors je l'ai abandonné.
Il s'agit du serveur de documents et du serveur simulé utilisé dans notre projet, le serveur implémenté en fonction de la technologie moyenne et des fonctions de base:
En utilisant le plug-in MockJS, des données aléatoires peuvent être générées dynamiquement pour effectuer des tests d'interface de somme de contrôle sur les paramètres d'interface basés sur JSON-Schema, et le temps de réponse de l'état du test et de l'interface peut être enregistré. L'éditeur JSON simple a une fonction de vérification de connexion, et le débogage de l'interface peut être effectué après la connexion. Le serveur simulé répond à la demande en fonction du serveur API, et il sera mis à jour automatiquement lorsque l'interface est mise à jour.
Quelques questions
Node.js est les ailes des ingénieurs frontaux, et devrais-je devenir un ange ou un démon avec des ailes? Cela dépend si les problèmes causés par l'utilisation peuvent être résolus.
Tout d'abord, la charge de travail sur le frontal augmentera sans aucun doute, mais le coût de communication sera réduit. La stabilité du serveur du thread unique Node.js n'est en effet pas suffisant, mais la robustesse du code et le journal parfait peuvent être effectivement évités. Rappel. Il y a trop de solutions à ce problème, notamment le module Q / Async de Node.js et ES6 / ES7. Node.js Débogage. Bien que j'aie toujours rejeté IDE, je dois admettre que Webstorm est en effet très pratique pour le débogage. L'inspecteur de nœud que j'utilise est également assez bon, l'interface est similaire à l'outil de développeur Chrome, et il semble assez familier.
Si vous êtes un programmeur backend, vous devriez être plus susceptible d'être accommodant Node.js. Le travail d'intégration d'interface est remis au serveur frontal pour le traitement, et le degré de couplage avec le frontal est considérablement réduit et la charge de travail et l'efficacité de travail sont réduites.
Il y a deux points à expérimenter
Bien que l'utilisation de Node.js ait un certain coût d'apprentissage, elle est toujours très amicale pour les développeurs frontaux. De plus, si Node.js est utilisé dans l'avant, le contenu technique et la charge de travail seront améliorés, améliorant ainsi l'importance du travail. Ce n'est que lorsque les développeurs actuels peuvent créer plus de valeur sont éligibles pour exiger des salaires plus élevés. Il est recommandé de faire moins de suggestions et de donner plus de plans de faisabilité au travail, et d'effectuer une pré-recherche technique au lieu d'écrire un simple Helloworld.
Résumer
Certaines personnes peuvent dire que l'ensemble des choses que vous avez introduit est si compliquée et qu'il est trop gênant à utiliser, il vaut donc mieux communiquer face à face. Pour de tels doutes, je ne peux utiliser qu'un exemple mentionné par Tencent Senior Ui Engineer Yu Guo dans "Auto-culture des ingénieurs de pile complète". Une fois, lorsque la personne frontale en charge d'une petite entreprise de téléphone lui a demandé comment gérer le code, l'autre partie a déclaré qu'il utiliserait FTP pour le télécharger directement et s'est plaint que ses subordonnés ont toujours mis à jour le mauvais code. Il lui a également demandé pourquoi il n'avait pas utilisé SVN ou GIT, et il a dit qu'il serait plus facile de mettre à jour manuellement. La vérité de cette histoire est ma réponse à la question ~
Adresse de téléchargement PPT