node.js:クライアントを使用してバッテリーvizを作成します
キーテイクアウト
- この記事では、ページをリロードせずに定期的にバッテリーステータスを更新するnode.jsを使用して、バッテリー視覚化サービスのクライアントパーツを構築する方法について説明します。クライアントは、情報が不要になったときにシステムの過負荷を避けるために、更新を一時停止または再開できます。 リアクティブな設計と宣言的なフレームワークは、データの変更に応じてドキュメントオブジェクトモデル(DOM)を自動的かつ効率的に更新するために使用されます。これは、データが変更されるたびにデータをDOM要素にバインドし、DOMを更新するライブラリであるRactive.jsを使用して達成されます。
- 著者は、Ractive.jsを使用してバッテリーの視覚化を作成する方法を示しています。これには、更新を一時停止/再開するメカニズムの設定や、RESTサービスからのデータの非同期的な取得などがあります。 この記事は、node.jsを使用してHTTPサーバーのセットアップ、RESTFUL APIS、node.jsサーバーでOS端末コマンドの実行、宣言的なフレームワークの基本など、説明したツールと概念をさらに調査するための呼び出しで終了します。およびractive.js。
- このミニシリーズの最初の部分では、私たちが構築しているサービスの詳細とあなたが学ぶことについて説明しました。次に、サーバーが必要な理由と、Restfulサービスを作成することを選択した理由について説明しました。サーバーの開発方法を議論している間、私はあなたが現在のオペレーティングシステムをどのように識別できるか、またnode.jsを使用してコマンドを実行する方法について話し合う機会を得ました。 このシリーズのこの2番目の最後の部分では、クライアントパーツを構築して情報をユーザーに提示する方法を見つけます。この目標を達成するには、ページをリロードせずに、x分(または秒)ごとにバッテリーのステータスを更新する必要があります。さらに、情報が不要な場合、またはページを見ていない場合でも、システムがあふれないように、更新を一時停止/再開することができるはずです。それをするために、私たちは次のようにします
- スケジュールAJAXは、通常の時間間隔でバックエンドサービスに電話をかけます;
- データの変更に応じてDOMを自動的かつ効率的に更新する宣言的なフレームワークを使用します;
- jQueryユーティリティ機能を使用して、私たちの生活を楽にします;
- いくつかの素敵な画像とCSSを使用して、ダッシュボードを視覚的に魅力的にします(ボーナスとして!)。
リアクティブな設計
Ajaxと非同期呼び出しについて議論することは、確かにこの記事の範囲外です(投稿の最後にいくつかの有用なリンクを提供します)。私たちの目的のために、それらをブラックボックスとして扱うこともできます。ブラックボックスは、サーバーに何らかのデータを尋ねたり、データが送信されたらアクションを実行したりすることもできます。 代わりに、リアクティブな設計と宣言的なフレームワークについて話し合うために、ちょっと時間を取りましょう。 HTMLページは、デフォルトで静的エンティティです。つまり、純粋なHTMLページの場合、ページに表示されるコンテンツは、ブラウザでレンダリングされるたびに同じままです。ただし、JavaScriptとMoustacheなどのテンプレートライブラリを使用することで、動的に更新できることがわかっています。 開発者がデータをDOMノードに結合するのに役立つ多くのライブラリがあります。それらのほとんどはJavaScriptを使用して、データを翻訳する必要があるDOM要素を記述し、ページの更新を手動でトリガーする必要があります(JavaScriptを介して)。したがって、視覚化を更新する時期とデータの変更に応じてどのような変更を行うべきかを決定するためのアプリケーションのロジックに依存することになります。 宣言的なフレームワークは、データを変更するたびにデータをDOM要素にバインドし、DOMを自動的に更新します。このバインディングは、JavaScriptではなくプレゼンテーション(HTMLマークアップ)のテンプレートを使用して提供されます。 これらのフレームワークの付加値は、いくつかの重要なポイントで識別できます。- コンテンツとプレゼンテーションの間のより大きな分離を実施します。これは、データ、イベントハンドラー、さらにはビューの構造のためのプレゼンテーションレイヤーバインディングで定義できるようにすることで実現されます(例えば、テーブルなどの反復オブジェクトや複合オブジェクトなど);
- データモデルとプレゼンテーションを同期させる簡単な方法を提供します;
- 彼らは通常、非常に効率的な方法でそれを行い、DOMツリーの最小可能なサブセットのみを反映するようにします。その点に関しては、クライアント側のブラウザアプリケーションのリフルティングと再塗装は通常、ボトルネックであることに留意してください。
ractive.js
ractive.jsの場合、使用するライブラリの場合、データとDOMの間の同期は、コンテナオブジェクトを介して取得されます。ライブラリは、データをラップするオブジェクトを作成します。これらのオブジェクトはデータにアクセスできるため、プロパティを設定または取得するたびに、ライブラリはアクションをキャプチャし、すべてのサブスクライバーに内部的にブロードキャストできます。ハンズオン
ractive.jsが役立つものを見たので、今度は最初のRactiveテンプレートをページに追加する時が来ました。そのために、内部のどこにでも選択したIDを使用してスクリプトタグを追加できます。後で必要なので、IDを賢く選択することをお勧めします。また、type = 'text/ractive'属性を追加する必要があります。<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>
- 変数:{{batterystate}}
- 条件:{{#batterystate}}
- 関数の呼び出し:{{batteryStateClass(BatteryState)}}
<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>
非同期にデータを取得
約束どおり、ここでは、RESTサービスからデータの取得を処理する関数です。 jQuery Deferredオブジェクトを使用することにより、サーバーから一部のデータが受信されるとすぐに呼び出されるコールバックを設定します。また、このコールバック内でRactive.jsを使用しているため、プレゼンテーションレイヤーの更新方法のロジックを実行する必要はありません。実際、テンプレートスクリプトで使用されている変数の値を更新するだけで、Ractive.jsはすべてを処理します。 私が今説明したことは、以下に報告されたコードによって実装されています。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>
すべてをまとめる
もちろん、これらすべてを一緒に機能させるために、さらに配線するためのいくつかの配線があります。ダッシュボードUXのデザインを完全にスキップしました。最終的には、テンプレートシステムで動作させる方法を手に入れたら、それはあなた次第です!たとえば、画像とアニメーションを使用して、クールなパワーインジケーターでテキストとして、視覚的に視覚的に表示されるかどうかは、どれほどクールでしょうか? Ractive.jsでは、それほど難しくありません!最終結果を見てください:
結論
マルチプラットフォームのバッテリーダッシュボードは今すぐ準備ができているはずです。しかし、これは最終的な結果ではなく出発点であるべきであり、私があなたが学んだことを願っている重要な点は次のとおりです。- node.js を使用してHTTPサーバーを設定する方法
- RESTFUL APIS
- node.jsサーバーでOSターミナルコマンドを実行する方法
- 宣言的なフレームワークとractive.jsの基本
- アーキテクチャスタイルとネットワークベースのソフトウェアアーキテクチャの設計 RESTFUL APIを作成するためのガイドライン
- ガイドライン
- ネイティブライブラリでREST APIを使用することの利点/短所は何ですか?
- テンプレートメソッドパターン JavaScript
- での非同期リクエスト JavaScriptのCrockford - エピソードIV:Ajaxの変態 - いつものように偉大な洞察に加えて、ボーナスとしてAjaxという用語の起源に関する非常に面白い物語! jQuery $ .getJsonメソッド
- ractivejsチュートリアル
- Node.jsクライアントを使用したバッテリーの視覚化の作成に関するよくある質問(FAQ)
});
このコードは、現在のバッテリーレベルをコンソールにログに記録します。navigator.getBatteryメソッドは、バッテリーステータスAPIの一部です。システムのバッテリー充電レベルに関する情報を提供し、バッテリーレベルまたは充電ステータスが変更されたときに送信されるイベントによって通知できるようにするバッテリーマネージャーオブジェクトに解決する約束を返します。バッテリーステータスデータ?
バッテリーステータスデータを視覚化するには、chart.jsやd3.jsなどのJavaScriptチャートライブラリを使用できます。これらのライブラリを使用すると、データからさまざまな種類のチャートとグラフを作成できます。また、HTMLとCSSを使用して、シンプルなバーまたはパイチャートを作成することもできます。
すべてのデバイスでバッテリーステータスを取得できますか?すべてではありません。また、デスクトップコンピューターなどの一部のデバイスが正確な状態またはバッテリーステータス情報を提供しない場合があることも注目に値します。
バッテリーのステータスの変更を処理するにはどうすればよいですか?
バッテリーマネージャーオブジェクトにイベントリスナーを追加することで、バッテリーステータスの変更を処理できます。バッテリーステータスAPIは、「chargingchange」、「levelchange」、「chargingtimechange」、「dischingtimechange」など、いくつかのイベントを提供します。これらのイベントの使用方法の例は次のとおりです。 log( "バッテリーレベル:" Battery.Level*100 "%");
}バッテリーレベルが変更されるたびにコンソールに。 。ただし、子のプロセスを使用して、バッテリーステータスを取得するシステムコマンドを実行してから、出力を解析できます。特定のコマンドはオペレーティングシステムに依存します。
ユーザーの許可なしにバッテリーのステータスを取得できますか?
はい、バッテリーステータスAPIはユーザーの許可を使用する必要はありません。ただし、システムに関するデータを収集している場合は、ユーザーに通知することをお勧めします。バッテリーステータスのAPIは0.0〜1.0の数であり、現在のバッテリーレベルをフル充電の一部として表しています。この値の精度は、デバイスとそのバッテリーに依存します。
Webワーカーでバッテリーステータスを取得できますか?ただし、すべてのブラウザがWebワーカーをサポートしているわけではなく、WebワーカーをサポートするすべてのブラウザがWebワーカーのバッテリーステータスAPIをサポートしているわけではないことに注意してください。
バッテリーステータスAPIがサポートされていない場合、バッテリーステータスを取得するためにできることはあまりありません。機能検出を使用して、APIがサポートされているかどうかを確認し、代替機能またはメッセージをユーザーに提供できない場合は、ユーザーにメッセージを提供できます。
以上がnode.js:クライアントを使用してバッテリーvizを作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...
