Création d'une batterie à savoir en utilisant Node.js: Client
Les plats clés
- L'article décrit comment construire une pièce client pour un service de visualisation de la batterie à l'aide de Node.js, qui met à jour l'état de la batterie à intervalles réguliers sans recharger la page. Le client peut faire une pause ou reprendre les mises à jour pour éviter de surcharger le système lorsque les informations ne sont pas nécessaires.
- Les cadres de conception et de déclaratifs réactifs sont utilisés pour mettre à jour automatiquement et efficacement le modèle d'objet de document (DOM) en réponse aux modifications des données. Ceci est réalisé à l'aide de Racactive.js, une bibliothèque qui lie les données aux éléments DOM et met à jour le DOM chaque fois que les données changent.
- L'auteur montre comment utiliser Racactive.js pour créer une visualisation de la batterie, y compris la mise en place d'un mécanisme pour faire une pause / reprendre les mises à jour, et la récupération de données de manière asynchrone à partir d'un service de repos.
- L'article se termine par un appel pour explorer davantage les outils et les concepts discutés, tels que la configuration d'un serveur HTTP à l'aide de Node.js, des API RESTFul, des commandes de terminal OS exécutées sur un serveur Node.js et les bases des frameworks déclaratifs et racactive.js.
- Planifiez les appels Ajax à notre service backend sur des intervalles de temps réguliers;
- Utilisez un cadre déclaratif qui met à jour le DOM automatiquement et efficacement en réponse aux modifications apportées aux données;
- Utilisez une fonction d'utilité jQuery pour nous faciliter la vie;
- Utilisez de belles images et CSS pour rendre le tableau de bord visuel attrayant (en bonus!).
Design réactif
Discuter des appels de l'Ajax et des asynchrones est certainement hors de portée de cet article (je fournirai quelques liens utiles à la fin de la publication). Pour notre objectif, nous pouvons même les traiter comme des boîtes noires qui nous permettent de demander au serveur des données et d'exécuter une action une fois les données renvoyées. Prenons plutôt une minute pour discuter de la conception réactive et des cadres déclaratifs. Une page HTML est par défaut une entité statique. Cela signifie que pour une page HTML pure, le contenu indiqué sur la page reste le même à chaque fois qu'il est rendu dans un navigateur. Cependant, nous savons qu'avec l'utilisation de JavaScript et peut-être des bibliothèques de modèles comme Mustache, nous pouvons les mettre à jour dynamiquement. Il existe de nombreuses bibliothèques qui aident les développeurs à lier des données aux nœuds DOM. La plupart d'entre eux utilisent JavaScript pour décrire les éléments DOM auxquels les données doivent être traduites et nécessitent des mises à jour de la page à déclencher manuellement (via JavaScript). Ainsi, nous finissons par compter sur la logique de l'application pour décider quand la visualisation doit être mise à jour et les modifications doivent être apportées en réponse aux modifications de données. Les cadres déclaratifs lient les données aux éléments DOM et mettent automatiquement à mettre à jour le DOM, chaque fois que les données changent. Cette liaison est également fournie à l'aide de modèles dans la présentation (le balisage HTML) plutôt que dans JavaScript. La valeur ajoutée de ces cadres peut être identifiée en quelques points clés:- Ils appliquent un plus grand degré de séparation entre le contenu et la présentation. Ceci est réalisé en vous permettant de définir dans la liaison de la couche de présentation pour les données, les gestionnaires d'événements et même la structure des vues (comme pour les objets itératifs et composites, par exemple des tables);
- Ils fournissent un moyen facile de conserver votre modèle de données et votre présentation en synchronisation;
- Ils le font généralement de manière extrêmement efficace, en s'assurant de reflux uniquement le sous-ensemble minimum possible de votre arbre Dom. À cet égard, gardez à l'esprit que le refus et la repeinture sont généralement des goulots d'étranglement pour les applications de navigateur côté client.
racactive.js
Pour Racactive.js, la bibliothèque que nous allons utiliser, la synchronisation entre les données et DOM est obtenue via objets de conteneur . La bibliothèque crée des objets qui s'enroulent autour des données. Ces objets ont accès aux données, donc chaque fois que vous définissez ou obtenez une propriété, la bibliothèque peut capturer votre action et la diffuser en interne à tous les abonnés.pratique
Maintenant que nous avons vu à quoi RACVAC.JS est utile, il est temps d'ajouter notre premier modèle de ratification à notre page. Pour ce faire, vous pouvez ajouter une balise de script avec un ID de votre choix n'importe où dans le . Je vous suggère de choisir sagement l'identification car nous en aurons besoin plus tard. Nous devrons également ajouter un attribut type = 'text / racactive':<span><span><span><script</span> id<span>='meterVizTemplate'</span> type<span>='text/ractive'</span>></span><span><span></script</span>></span></span>
<span><span><span><script</span> src<span>='http://cdn.ractivejs.org/latest/ractive.js'</span>></span><span><span></script</span>></span></span>
<span><span><span><script</span> id<span>='meterVizTemplate'</span> type<span>='text/ractive'</span>></span><span> </span></span><span><span> <span>{{#batteryState}} </span></span></span><span><span> <span><br> </span></span></span><span><span> <span><div class='battery-div'> </span></span></span><span><span> <span><div class='battery-shell'> </span></span></span><span><span> <span><div class='battery-percent-text'>{{batteryPercent.toFixed(1) + '%'}}</div> </span></span></span><span><span> <span></div> </span></span></span><span><span> <span><div class='battery-level'> </span></span></span><span><span> <span><div class='battery-mask' style="width:{{(100 - batteryPercent) + '%'}};"> </span></span></span><span><span> <span></div> </span></span></span><span><span> <span></div> </span></span></span><span><span> <span>{{#batteryCharging}} </span></span></span><span><span> <span><div class='battery-plug' intro-outro='fade:1000'></div> </span></span></span><span><span> <span>{{/batteryCharging}} </span></span></span><span><span> <span>{{#batteryPercent <= batteryRedThreshold}} </span></span></span><span><span> <span><div class='battery-warning' intro-outro='fade:1000'></div> </span></span></span><span><span> <span>{{/batteryLife}} </span></span></span><span><span> <span></div> </span></span></span><span><span> <span><br> </span></span></span><span><span> <span><br> </span></span></span><span><span> <span><span class='key'>Battery state:</span> <span class='value {{batteryStateClass(batteryState)}}'>{{batteryState}}</span> </span></span></span><span><span> <span><br> </span></span></span><span><span> <span>{{#batteryLife}} </span></span></span><span><span> <span><span class='key'>Time to empty:</span> <span class='value {{batteryLifeClass(batteryPercent)}}'>{{batteryLife}}</span> </span></span></span><span><span> <span>{{/batteryLife}} </span></span></span><span><span> <span>{{/batteryState}} </span></span></span><span><span> <span>{{^batteryState}} </span></span></span><span><span> <span><br> </span></span></span><span><span> <span>LOADING... </span></span></span><span><span> <span>{{/batteryState}} </span></span></span><span><span></span><span><span></script</span>></span></span>
- Variables: {{Batterystate}}
- conditionnels: {{#batterystate}}
- Invocations de la fonction: {{BatterystateClass (batterie)}}
<span><span><span><script</span> id<span>='meterVizTemplate'</span> type<span>='text/ractive'</span>></span><span><span></script</span>></span></span>
<span><span><span><script</span> src<span>='http://cdn.ractivejs.org/latest/ractive.js'</span>></span><span><span></script</span>></span></span>
<span><span><span><script</span> id<span>='meterVizTemplate'</span> type<span>='text/ractive'</span>></span><span> </span></span><span><span> <span>{{#batteryState}} </span></span></span><span><span> <span><br> </span></span></span><span><span> <span><div class='battery-div'> </span></span></span><span><span> <span><div class='battery-shell'> </span></span></span><span><span> <span><div class='battery-percent-text'>{{batteryPercent.toFixed(1) + '%'}}</div> </span></span></span><span><span> <span></div> </span></span></span><span><span> <span><div class='battery-level'> </span></span></span><span><span> <span><div class='battery-mask' style="width:{{(100 - batteryPercent) + '%'}};"> </span></span></span><span><span> <span></div> </span></span></span><span><span> <span></div> </span></span></span><span><span> <span>{{#batteryCharging}} </span></span></span><span><span> <span><div class='battery-plug' intro-outro='fade:1000'></div> </span></span></span><span><span> <span>{{/batteryCharging}} </span></span></span><span><span> <span>{{#batteryPercent <= batteryRedThreshold}} </span></span></span><span><span> <span><div class='battery-warning' intro-outro='fade:1000'></div> </span></span></span><span><span> <span>{{/batteryLife}} </span></span></span><span><span> <span></div> </span></span></span><span><span> <span><br> </span></span></span><span><span> <span><br> </span></span></span><span><span> <span><span class='key'>Battery state:</span> <span class='value {{batteryStateClass(batteryState)}}'>{{batteryState}}</span> </span></span></span><span><span> <span><br> </span></span></span><span><span> <span>{{#batteryLife}} </span></span></span><span><span> <span><span class='key'>Time to empty:</span> <span class='value {{batteryLifeClass(batteryPercent)}}'>{{batteryLife}}</span> </span></span></span><span><span> <span>{{/batteryLife}} </span></span></span><span><span> <span>{{/batteryState}} </span></span></span><span><span> <span>{{^batteryState}} </span></span></span><span><span> <span><br> </span></span></span><span><span> <span>LOADING... </span></span></span><span><span> <span>{{/batteryState}} </span></span></span><span><span></span><span><span></script</span>></span></span>
récupérer de manière asynchrone les données
Comme promis, c'est ici une fonction qui s'occupe de récupérer les données de notre service de repos. En utilisant l'objet différé jQuery, nous avons configuré un rappel pour être invoqué dès que certaines données sont reçues du serveur. Étant donné que nous utilisons également Racactive.js à l'intérieur de ce rappel, nous n'aurons pas à passer par la logique de la façon dont nous avons mis à jour la couche de présentation. En fait, nous mettons simplement à jour la valeur des variables utilisées dans le script de modèle, et Racactive.js s'occupera de tout. Ce que je viens de décrire est mis en œuvre par le code indiqué ci-dessous:ractive <span>= new Ractive({ </span> <span>el: 'panels', </span> <span>template: '#meterVizTemplate', </span> <span>data: { </span> <span>// Percentage at which the battery goes to 'red' zone (export for Ractive templates) </span> <span>batteryRedThreshold: BATTERY_RED_THRESHOLD, </span> <span>// Percentage at which the battery enters 'yellow' zone (export for Ractive templates) </span> <span>batteryYellowThreshold: BATTERY_YELLOW_THRESHOLD, </span> <span>// The capacity of the battery, in percentage. Initially empty </span> <span>batteryPercent: NaN, </span> <span>// How much more time can the battery last? </span> <span>batteryLife: "", </span> <span>// True <=> the update daemon for the battery has been paused </span> <span>batteryPaused: false, </span> <span>// True <=> the update daemon for the battery has reported an error at its last try </span> <span>batteryUpdateError: false, </span> <span>// Is the battery connected to power? </span> <span>batteryCharging: false, </span> <span>batteryStateClass: function (state) { </span> <span>return state === 'discharging' ? BATTERY_RED_CLASS : BATTERY_GREEN_CLASS; </span> <span>}, </span> <span>batteryLifeClass: function (percent) { </span> <span>return percent <= BATTERY_RED_THRESHOLD ? BATTERY_RED_CLASS : (percent <= BATTERY_YELLOW_THRESHOLD ? BATTERY_YELLOW_CLASS : BATTERY_GREEN_CLASS); </span> <span>} </span> <span>} </span><span>});</span>
Mettre tout cela ensemble
Il y a, bien sûr, un câblage supplémentaire à mettre en place pour que tout cela fonctionne ensemble. Nous avons complètement sauté la conception du tableau de bord UX. Cela dépend en fin de compte de vous, une fois que vous obtenez comment le faire fonctionner avec le système de modèles! Par exemple, à quel point serait-il cool si nous pouvions avoir le pourcentage de charge affiché à la fois en texte et visuellement avec un indicateur de puissance cool, en utilisant des images et des animations? Avec Racactive.js, ce n'est pas si difficile! Jetez un œil au résultat final:
Conclusions
Notre tableau de bord de batterie multiplateforme devrait être prêt à partir maintenant. Mais cela devrait être un point de départ plutôt qu'un résultat final, et les points importants que j'espère que vous avez appris en cours de route sont:- Comment configurer un serveur HTTP à l'aide de node.js
- API RESTFul
- Comment exécuter les commandes de terminal OS sur un serveur Node.js
- Bases des cadres déclaratifs et ratic.js en particulier
- Styles architecturaux et conception d'architectures logicielles basées sur le réseau
- Lignes directrices pour créer une API RESTful
- Quels sont les avantages / inconvénients de l'utilisation de l'API REST sur les bibliothèques natives?
- Modèle du modèle Modèle
- Demandes asynchrones en javascript
- Crockford sur Javascript - Episode IV: La métamorphose de l'Ajax - Great Insight, comme d'habitude, plus une histoire super drôle sur les origines du terme Ajax, en bonus!
- jQuery $ .getjson Méthode
- Tutoriel RacactiveJS
Questions fréquemment posées (FAQ) sur la création d'une visualisation de la batterie à l'aide du client Node.js
Comment puis-je obtenir l'état de la batterie à l'aide de JavaScript?
Pour obtenir l'état de la batterie à l'aide de JavaScript, vous pouvez utiliser l'API d'état de la batterie. Cette API fournit des informations sur le niveau de charge de la batterie du système et vous permet d'être informé par des événements qui sont envoyés lorsque le niveau de la batterie ou l'état de charge change. Voici un exemple simple de la façon de l'utiliser:
Navigator.getBattery (). Puis (fonction (batterie) {
console.log ("Niveau de la batterie:" Battery.Level * 100 "%" );
});
Ce code enregistrera le niveau actuel de la batterie à la console.
Quelle est la méthode Navigator.getBattery?
La méthode Navigator.getBattery fait partie de l'API d'état de la batterie. Il renvoie une promesse qui se résout à un objet BatteryManager, qui fournit des informations sur le niveau de charge de la batterie du système et vous permet d'être notifié par des événements qui sont envoyés lorsque le niveau de la batterie ou l'état de charge change.
Comment puis-je visualiser le Données d'état de la batterie?
Pour visualiser les données d'état de la batterie, vous pouvez utiliser n'importe quelle bibliothèque de cartes JavaScript, telles que chart.js ou d3.js. Ces bibliothèques vous permettent de créer différents types de graphiques et de graphiques à partir de vos données. Vous pouvez également utiliser HTML et CSS pour créer une barre ou un graphique à tarte simple.
Puis-je obtenir l'état de la batterie sur tous les appareils?
L'API d'état de la batterie est prise en charge par la plupart des navigateurs modernes, mais pas tous. Il convient également de noter que certains appareils, tels que les ordinateurs de bureau, peuvent ne pas fournir d'informations précises ou aucune information d'état de la batterie.
Comment puis-je gérer les modifications de l'état de la batterie?
Vous pouvez gérer les modifications d'état de la batterie en ajoutant des auditeurs d'événements à l'objet BatteryManager. L'API d'état de la batterie propose plusieurs événements, tels que «Chargingchange», «Levelchange», «ChargingtimeChange» et «DischargingtimeChange». Voici un exemple de la façon d'utiliser ces événements:
Navigator.getBattery (). Puis (fonction (batterie) {
batterie.addeventListener ('NIVLEACHANGE', function () {
console. Log ("Niveau de la batterie:" Battery.level * 100 "%");
});
});
Ce code enregistrera le nouveau niveau de batterie au Console chaque fois que le niveau de la batterie change.
Comment puis-je utiliser Node.js pour obtenir l'état de la batterie?
Node.js n'a pas de moyen intégré d'obtenir l'état de la batterie. Cependant, vous pouvez utiliser un processus enfant pour exécuter une commande système qui obtient l'état de la batterie, puis analyser la sortie. La commande spécifique dépend de votre système d'exploitation.
Puis-je obtenir l'état de la batterie sans autorisation de l'utilisateur?
Oui, l'API d'état de la batterie ne nécessite aucune autorisation de l'utilisateur à utiliser. Cependant, c'est toujours une bonne pratique pour informer vos utilisateurs si vous collectez des données sur leur système.
Quelle est la précision du niveau de batterie fourni par l'API d'état de la batterie?
Le niveau de batterie fourni par l'API d'état de la batterie est un nombre entre 0,0 et 1,0, représentant le niveau de batterie actuel comme une fraction de la charge complète. La précision de cette valeur dépend de l'appareil et de sa batterie.
Puis-je obtenir l'état de la batterie chez un travailleur Web?
Oui, l'API d'état de la batterie peut être utilisé dans un travailleur Web. Cependant, gardez à l'esprit que tous les navigateurs ne prennent pas en charge les travailleurs Web, et tous les navigateurs qui prennent en charge les travailleurs Web ne prennent pas en charge l'API d'état de la batterie dans un travailleur Web.
Que puis-je faire si l'API d'état de la batterie n'est pas pris en charge?
Si l'API d'état de la batterie n'est pas prise en charge, vous ne pouvez pas faire grand-chose pour obtenir l'état de la batterie. Vous pouvez utiliser la détection des fonctionnalités pour vérifier si l'API est prise en charge et fournir une fonctionnalité alternative ou un message à l'utilisateur si ce n'est pas le cas.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











Python convient plus aux débutants, avec une courbe d'apprentissage en douceur et une syntaxe concise; JavaScript convient au développement frontal, avec une courbe d'apprentissage abrupte et une syntaxe flexible. 1. La syntaxe Python est intuitive et adaptée à la science des données et au développement back-end. 2. JavaScript est flexible et largement utilisé dans la programmation frontale et côté serveur.

Les principales utilisations de JavaScript dans le développement Web incluent l'interaction client, la vérification du formulaire et la communication asynchrone. 1) Mise à jour du contenu dynamique et interaction utilisateur via les opérations DOM; 2) La vérification du client est effectuée avant que l'utilisateur ne soumette les données pour améliorer l'expérience utilisateur; 3) La communication de rafraîchissement avec le serveur est réalisée via la technologie AJAX.

L'application de JavaScript dans le monde réel comprend un développement frontal et back-end. 1) Afficher les applications frontales en créant une application de liste TODO, impliquant les opérations DOM et le traitement des événements. 2) Construisez RestulAPI via Node.js et Express pour démontrer les applications back-end.

Comprendre le fonctionnement du moteur JavaScript en interne est important pour les développeurs car il aide à écrire du code plus efficace et à comprendre les goulots d'étranglement des performances et les stratégies d'optimisation. 1) Le flux de travail du moteur comprend trois étapes: analyse, compilation et exécution; 2) Pendant le processus d'exécution, le moteur effectuera une optimisation dynamique, comme le cache en ligne et les classes cachées; 3) Les meilleures pratiques comprennent l'évitement des variables globales, l'optimisation des boucles, l'utilisation de const et de locations et d'éviter une utilisation excessive des fermetures.

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Les choix de Python et JavaScript dans les environnements de développement sont importants. 1) L'environnement de développement de Python comprend Pycharm, Jupyternotebook et Anaconda, qui conviennent à la science des données et au prototypage rapide. 2) L'environnement de développement de JavaScript comprend Node.js, VScode et WebPack, qui conviennent au développement frontal et back-end. Le choix des bons outils en fonction des besoins du projet peut améliorer l'efficacité du développement et le taux de réussite du projet.

C et C jouent un rôle essentiel dans le moteur JavaScript, principalement utilisé pour implémenter des interprètes et des compilateurs JIT. 1) C est utilisé pour analyser le code source JavaScript et générer une arborescence de syntaxe abstraite. 2) C est responsable de la génération et de l'exécution de bytecode. 3) C met en œuvre le compilateur JIT, optimise et compile le code de point chaud à l'exécution et améliore considérablement l'efficacité d'exécution de JavaScript.

Python est plus adapté à la science et à l'automatisation des données, tandis que JavaScript est plus adapté au développement frontal et complet. 1. Python fonctionne bien dans la science des données et l'apprentissage automatique, en utilisant des bibliothèques telles que Numpy et Pandas pour le traitement et la modélisation des données. 2. Python est concis et efficace dans l'automatisation et les scripts. 3. JavaScript est indispensable dans le développement frontal et est utilisé pour créer des pages Web dynamiques et des applications à une seule page. 4. JavaScript joue un rôle dans le développement back-end via Node.js et prend en charge le développement complet de la pile.
