Erstellen einer Batterie nämlich mit node.js: client
Key Takeaways
- Der Artikel beschreibt, wie ein Client -Teil für einen Batterie -Visualisierungsdienst mit node.js erstellt wird, wodurch der Batteriestatus in regelmäßigen Abständen aktualisiert wird, ohne die Seite neu zu laden. Der Client kann innehalten oder fortfahren Aktualisierungen, um das Überladen des Systems zu vermeiden, wenn die Informationen nicht benötigt werden.
- reaktives Design und deklarative Frameworks werden verwendet, um das DOMR -Modell (DOM) (DOM) als Reaktion auf Änderungen der Daten automatisch und effizient zu aktualisieren. Dies wird mit Ractive.js erreicht, einer Bibliothek, die Daten an DOM -Elemente bindet und das DOM jedes Mal aktualisiert, wenn sich die Daten ändert.
- Der Autor zeigt, wie man Ractive.js verwendet, um eine Batterievisualisierung zu erstellen, einschließlich der Einrichtung eines Mechanismus zum Pause/wieder aufgenommene Updates und asynchrones Abrufen von Daten aus einem REST -Dienst.
- Der Artikel endet mit einem Anruf, um die besprochenen Tools und Konzepte weiter zu untersuchen, z. und ractive.js.
- Zeitplan AJAX -Anrufe an unseren Backend -Service über regelmäßige Zeitabschnitte;
- Verwenden Sie ein deklaratives Framework, das das DOM automatisch und effizient als Reaktion auf Änderungen an den Daten aktualisiert.
- Verwenden Sie eine JQuery -Dienstprogrammfunktion, um unser Leben zu erleichtern;
- Verwenden Sie einige schöne Bilder und CSS, um das Dashboard visuell ansprechend zu machen (als Bonus!).
reaktives Design
Die Diskussion von Ajax und asynchronen Aufrufen ist sicherlich nicht in diesem Artikel hinaus (ich werde am Ende des Beitrags einige nützliche Links anbieten). Zu unserem Zweck können wir sie sogar als schwarze Kästchen behandeln, mit denen wir den Server nach Daten fragen und nach dem Rücksenden der Daten eine Aktion ausführen können. Nehmen wir uns stattdessen eine Minute Zeit, um reaktives Design und deklarative Rahmenbedingungen zu diskutieren. Eine HTML -Seite ist standardmäßig eine statische Entität. Das bedeutet, dass für eine reine HTML -Seite der auf der Seite angezeigte Inhalt jedes Mal gleich bleibt, wenn sie in einem Browser gerendert wird. Wir wissen jedoch, dass wir mit JavaScript und möglicherweise einigen Vorlagenbibliotheken wie Schnurrbart sie dynamisch aktualisieren können. Es gibt viele Bibliotheken, die Entwicklern helfen, Daten an Dom -Knoten zu binden. Die meisten von ihnen verwenden JavaScript, um die DOM -Elemente zu beschreiben, auf die die Daten übersetzt werden sollten, und müssen Aktualisierungen der Seite manuell ausgelöst werden (über JavaScript). Wir verlassen uns also auf die Logik der Anwendung, um zu entscheiden, wann die Visualisierung aktualisiert werden soll und welche Änderungen als Reaktion auf Datenänderungen vorgenommen werden sollten. Deklarative Frameworks binden die Daten an DOM -Elemente und aktualisieren die DOM jedes Mal automatisch, wenn sich die Daten ändert. Diese Bindung wird auch unter Verwendung von Vorlagen in der Präsentation (HTML -Markup) und nicht unter JavaScript bereitgestellt. Der Mehrwert dieser Frameworks kann in wenigen wichtigen Punkten identifiziert werden:- Sie erzwingen einen größeren Grad an Trennung zwischen Inhalt und Präsentation. Dies wird erreicht, indem Sie in der Präsentationsschichtbindung für Daten, Ereignishandler und sogar die Struktur der Ansichten definieren können (wie für iterative und zusammengesetzte Objekte, z. B. Tabellen);
- Sie bieten eine einfache Möglichkeit, Ihr Datenmodell und Ihre Präsentation synchronisiert zu halten.
- Sie tun dies im Allgemeinen äußerst effizient und stellen sicher, dass Sie nur die minimal mögliche Untergruppe Ihres DOM -Baums neu überfließen lassen. Beachten Sie in dieser Hinsicht, dass Reflowing und Neulackierung normalerweise Engpässe für clientseitige Browseranwendungen sind.
ractive.js
Für Ractive.js, die Bibliothek, die wir verwenden werden, wird die Synchronisation zwischen Daten und DOM über Containerobjekte erhalten. Die Bibliothek erstellt Objekte, die die Daten umwickeln. Diese Objekte haben Zugriff auf die Daten. Jedes Mal, wenn Sie eine Eigenschaft festlegen oder erhalten, kann die Bibliothek Ihre Aktion erfassen und sie intern an alle Abonnenten senden.praktisch
Nachdem wir gesehen haben, wofür Ractive.js nützlich ist, ist es Zeit, unserer Seite unsere erste rive Vorlage hinzuzufügen. Dazu können Sie ein Skript -Tag mit einer ID Ihrer Wahl überall im hinzufügen. Ich empfehle Ihnen, die ID mit Bedacht zu wählen, da wir sie später brauchen werden. Wir müssen auch ein Attribut type = 'Text/Ractive' hinzufügen:<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>
- Variablen: {{Batteriestate}}
- Bedingungen: {{#Batterystate}}
- Funktionsanrufe: {{batteriestateClass (batteriestate)}}}
<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>
asynchrones Abrufen von Daten
Wie versprochen ist es hier eine Funktion, die sich um das Abrufen von Daten aus unserem REST -Service kümmert. Durch die Verwendung des JQuery Deferred -Objekts haben wir einen Rückruf eingerichtet, der aufgerufen werden soll, sobald einige Daten vom Server empfangen werden. Da wir auch Ractive.js in diesem Rückruf verwenden, müssen wir nicht die Logik der Aktualisierung der Präsentationsschicht durchlaufen. Tatsächlich aktualisieren wir nur den Wert der im Vorlagenskript verwendeten Variablen, und Ractive.js kümmert sich um alles. Was ich gerade beschrieben habe, wird durch den unten angegebenen Code implementiert: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>
alles zusammenfügen
Natürlich gibt es noch etwas mehr Verkabelung, um all diese zusammenarbeiten zu lassen. Wir haben das Design des Dashboard UX insgesamt übersprungen. Das liegt letztendlich bei Ihnen, sobald Sie so erhalten haben, wie es mit dem Vorlagensystem funktioniert! Wie cool wäre es beispielsweise, wenn wir den Ladungsprozentsatz sowohl als Text als auch visuell mit einem coolen Power -Indikator unter Verwendung von Bildern und Animationen ausführen lassen könnten? Mit Ractive.js ist es nicht so schwer! Schauen Sie sich das Endergebnis an:
Schlussfolgerungen
Unser Multi-Plattform-Batterie-Armaturenbrett sollte jetzt bereit sein. Dies sollte jedoch eher ein Ausgangspunkt als ein Endergebnis sein, und die wichtigen Punkte, von denen Sie hoffen, dass Sie auf dem Weg gelernt haben, sind:- So richten Sie einen HTTP -Server mit node.js ein
- RESTFOR APIS
- So führen Sie OS -Terminalbefehle auf einem node.js server aus
- Grundlagen deklarativer Frameworks und Ractive.js insbesondere
- Architekturstile und das Design von netzwerkbasierten Softwarearchitekturen
- Richtlinien für die Erstellung einer erholsamen API
- Was sind die Vor-/Nachteile der Verwendung von REST -API gegenüber nativen Bibliotheken?
- Template -Methodenmuster
- asynchrone Anfragen in JavaScript
- Crockford über JavaScript - Episode IV: Die Metamorphose von Ajax - Großartiger Einblick, wie üblich, sowie eine super lustige Geschichte über die Ursprünge des Begriffs Ajax, als Bonus!
- jQuery $ .getJson -Methode
- RactiveJS Tutorial
häufig gestellte Fragen (FAQs) zum Erstellen einer Batterievisualisierung mit Node.js Client
Wie kann ich den Batteriestatus mit JavaScript? Diese API enthält Informationen über die Batterieladung des Systems und ermöglicht es Ihnen, durch Ereignisse benachrichtigt zu werden, die bei der Batteriespiegel oder des Ladezustands zugesandt werden. Hier ist ein einfaches Beispiel für die Verwendung:
navigator.getBattery (). Dann (Funktion (Batterie) {
console.log ("Batteriespiegel:" Battery.level*100 "%" );
Die Methode der Navigator.getBattery ist Teil der Batteriestatus -API. Es wird ein Versprechen zurückgegeben, das sich in ein BatteryManager -Objekt auflöst, das Informationen über die Batterieladung des Systems enthält und Sie durch Ereignisse benachrichtigt werden Daten zur Batteriestatus? Mit diesen Bibliotheken können Sie verschiedene Arten von Diagrammen und Grafiken aus Ihren Daten erstellen. Sie können auch HTML und CSS verwenden, um ein einfaches Balken- oder Kreisdiagramm zu erstellen.
Kann ich den Batteriestatus auf allen Geräten erhalten? Nicht alle. Es ist auch erwähnenswert, dass einige Geräte, wie z.
Wie kann ich den Batteriestatus ändert? Die Batterie -Status -API bietet mehrere Ereignisse wie „LadingChange“, „LevelChange“, „LadingTimechange“ und „DecadingTimechange“. Hier ist ein Beispiel für die Verwendung der folgenden Ereignisse:
navigator.getbattery (). Dann (Funktion (batterie) {
batterie.adDeVent -Veristener ('LevelChange', function () {
Konsole. log ("Batteriepegel:" Batterie.Level*100 "%");
});
}); Die Konsole, wenn sich der Akkuspiegel ändert. Sie können jedoch einen untergeordneten Prozess verwenden, um einen Systembefehl auszuführen, der den Batteriestatus erhält, und dann die Ausgabe analysieren. Der spezifische Befehl hängt von Ihrem Betriebssystem ab. Es ist jedoch immer eine gute Praxis, Ihre Benutzer zu informieren, wenn Sie Daten zu ihrem System sammeln. Bei der Batteriestatus -API liegt eine Zahl zwischen 0,0 und 1,0, was den aktuellen Batteriepegel als Bruchteil der vollständigen Ladung darstellt. Die Genauigkeit dieses Wertes hängt vom Gerät und seiner Batterie ab. Beachten Sie jedoch, dass nicht alle Browser Web -Mitarbeiter unterstützen und nicht alle Browser, die Webarbeiter unterstützen, die Batterie -Status -API in einem Webarbeiter unterstützen.
Wenn die Batterie -Status -API nicht unterstützt wird, können Sie nicht viel tun, um den Batteriestatus zu erhalten. Sie können die Funktionserkennung verwenden, um zu überprüfen, ob die API unterstützt wird, und dem Benutzer eine alternative Funktionalität oder eine Nachricht bereitzustellen, wenn dies nicht der Fall ist.
Das obige ist der detaillierte Inhalt vonErstellen einer Batterie nämlich mit node.js: client. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen
