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> id<span >='meterVizTemplate'</script></span> type<span>='text/ractive'</span>></span><span><span></span>></span></span>type = 'text/ractive' ' Würde für Ihren Browser tatsächlich keinen Sinn ergeben, da es das Skript ignoriert, es sei denn, Sie fügen Ihrer Seite auch das Skript von Ractive hinzu:
<span><span><span><script> src<span >='http://cdn.ractivejs.org/latest/ractive.js'</script></span>></span><span><span></span>></span></span>Innerhalb des raktiven Skripts können Sie nun HTML -Tags und Vorlagenvariablen und Bedingungen/Schleifen hinzufügen. Ractive.js kümmert sich um die Bewertung von allem in den {{}} -Gruppen.
<span><span><span><script> id<span >='meterVizTemplate'</script></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><div class="battery-shell"> <span><span> <span><div class="battery-percent-text">{{batteryPercent.toFixed(1) + '%'}}</div> </span></span></span><span><span> <span></span></span></span> </div> </span></span></span><span><span> <span><div class="battery-level"> <span><span> <span><div class="battery-mask" style="width:{{(100 - batteryPercent) + '%'}};"> <span><span> <span></span></span></span> </div> </span></span></span><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 </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></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></span>></span></span>Im obigen Beispiel können Sie sehen:
- Variablen: {{Batteriestate}}
- Bedingungen: {{#Batterystate}}
- Funktionsanrufe: {{batteriestateClass (batteriestate)}}}
<span><span><span><script> id<span >='meterVizTemplate'</script></span> type<span>='text/ractive'</span>></span><span><span></span>></span></span>Die Optionen, die wir an den Konstruktor übergeben, sind sehr wichtig. Erstens muss El die ID eines DOM -Elements innerhalb des Ractive.js übereinstimmen, das die Vorlage rendert. In diesem Fall müssen wir eine DIV zur HTML -Seite hinzufügen:
<span><span><span><script> src<span >='http://cdn.ractivejs.org/latest/ractive.js'</script></span>></span><span><span></span>></span></span>Der Punkt, an dem Sie dieses Tag einfügen. Es wird das übergeordnete Element für alle Elemente von Ractive.js Templating -System sein. Der zweite wichtige Parameter, auf den Sie vorsichtig sein müssen, ist die Vorlage. Der Wert muss mit der ID des Text-/Raktiv -Skripts auf Ihrer Seite übereinstimmen. Schließlich weisen wir Daten ein Objekt zu, dessen Schlüssel Variablennamen sind, auf die wir in unserer Vorlage verweisen, oder Funktionen, die wir aufrufen. Mit Ractive.js können wir sogar benutzerdefinierte Ereignisse definieren, auf die die Bibliothek antwortet:
<span><span><span><script> id<span >='meterVizTemplate'</script></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><div class="battery-shell"> <span><span> <span><div class="battery-percent-text">{{batteryPercent.toFixed(1) + '%'}}</div> </span></span></span><span><span> <span></span></span></span> </div> </span></span></span><span><span> <span><div class="battery-level"> <span><span> <span><div class="battery-mask" style="width:{{(100 - batteryPercent) + '%'}};"> <span><span> <span></span></span></span> </div> </span></span></span><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 </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></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></span>></span></span>In einigen Zeilen haben wir einen Mechanismus eingerichtet, um unsere Updates zu pausieren/wieder aufzunehmen. Wir müssen jedoch immer noch den UpdateBatterystatus definieren () Funktion.
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 <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!

JavaScriptisnotbuiltoncorc; Es ist angehört, dass sich JavaScriptWasdedeSthatrunsonGineoFtencninc.

JavaScript kann für die Entwicklung von Front-End- und Back-End-Entwicklung verwendet werden. Das Front-End verbessert die Benutzererfahrung durch DOM-Operationen, und die Back-End-Serveraufgaben über node.js. 1. Beispiel für Front-End: Ändern Sie den Inhalt des Webseitentextes. 2. Backend Beispiel: Erstellen Sie einen Node.js -Server.

Die Auswahl von Python oder JavaScript sollte auf Karriereentwicklung, Lernkurve und Ökosystem beruhen: 1) Karriereentwicklung: Python ist für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet, während JavaScript für die Entwicklung von Front-End- und Full-Stack-Entwicklung geeignet ist. 2) Lernkurve: Die Python -Syntax ist prägnant und für Anfänger geeignet; Die JavaScript -Syntax ist flexibel. 3) Ökosystem: Python hat reichhaltige wissenschaftliche Computerbibliotheken und JavaScript hat ein leistungsstarkes Front-End-Framework.

Die Kraft des JavaScript -Frameworks liegt in der Vereinfachung der Entwicklung, der Verbesserung der Benutzererfahrung und der Anwendungsleistung. Betrachten Sie bei der Auswahl eines Frameworks: 1. Projektgröße und Komplexität, 2. Teamerfahrung, 3. Ökosystem und Community -Unterstützung.

Einführung Ich weiß, dass Sie es vielleicht seltsam finden. Was genau muss JavaScript, C und Browser tun? Sie scheinen nicht miteinander verbunden zu sein, aber tatsächlich spielen sie eine sehr wichtige Rolle in der modernen Webentwicklung. Heute werden wir die enge Verbindung zwischen diesen drei diskutieren. In diesem Artikel erfahren Sie, wie JavaScript im Browser ausgeführt wird, die Rolle von C in der Browser -Engine und wie sie zusammenarbeiten, um das Rendern und die Interaktion von Webseiten voranzutreiben. Wir alle kennen die Beziehung zwischen JavaScript und Browser. JavaScript ist die Kernsprache der Front-End-Entwicklung. Es läuft direkt im Browser und macht Webseiten lebhaft und interessant. Haben Sie sich jemals gefragt, warum Javascr

Node.js zeichnet sich bei effizienten E/A aus, vor allem bei Streams. Streams verarbeiten Daten inkrementell und vermeiden Speicherüberladung-ideal für große Dateien, Netzwerkaufgaben und Echtzeitanwendungen. Die Kombination von Streams mit der TypeScript -Sicherheit erzeugt eine POWE

Die Unterschiede in der Leistung und der Effizienz zwischen Python und JavaScript spiegeln sich hauptsächlich in: 1 wider: 1) Als interpretierter Sprache läuft Python langsam, weist jedoch eine hohe Entwicklungseffizienz auf und ist für eine schnelle Prototypentwicklung geeignet. 2) JavaScript ist auf einen einzelnen Thread im Browser beschränkt, aber Multi-Threading- und Asynchronen-E/A können verwendet werden, um die Leistung in Node.js zu verbessern, und beide haben Vorteile in tatsächlichen Projekten.

JavaScript stammt aus dem Jahr 1995 und wurde von Brandon Ike erstellt und realisierte die Sprache in C. 1.C-Sprache bietet Programmierfunktionen auf hoher Leistung und Systemebene für JavaScript. 2. Die Speicherverwaltung und die Leistungsoptimierung von JavaScript basieren auf C -Sprache. 3. Die plattformübergreifende Funktion der C-Sprache hilft JavaScript, auf verschiedenen Betriebssystemen effizient zu laufen.


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

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

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

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software
