表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

153/210

RxJSとはなんぞや?⑨ サイコロ連打と非同期のメリット一例

前回、1秒間にサイコロを1万回約10秒間で10万回振るプログラムを試しました。


0.01秒ごとに、サイコロを100回振る関数を流したわけです。


これくらいなら非同期のメリット判るかなと思ったのですが、ちょっとPCの性能をなめてました。


0.01秒ごとにサイコロを100回振るを10秒間

経過時間:10.23秒


サイコロを(非同期を使わずに)10万回振る

経過時間:0.032秒


そこでプログラムを修正して回数を1000倍にしました。


0.01秒ごとにサイコロを10万回振るを10秒間

経過時間:10.051秒


サイコロを(非同期を使わずに)1億回振る

経過時間:20.572秒


今度は非同期のメリットが判ったのではないでしょうか?


なお、非同期を使わない場合、ブラウザが応答しなくなりStopボタンも押せません。


サーバの応答がいつになるか判らないという消極的な非同期採用の理由以外にも、パフォーマンス上の理由からも非同期プログラムを使う理由はある訳です。


少し説明をしますと、非同期のプログラムでは、複数のサイコロ処理関数が同時に動いています。


より正確に言うと、前のサイコロ処理関数が終わっていても、あるいは終わっていなくても0.01秒後には次のサイコロ処理関数を走らせます。


ですのでPCの性能と関数の処理時間にもよりますが、最終的な処理時間は大きくは異ならない事が期待できます。(最初の例のように非同期を使わない方が早いケースも当然あります)


どういう風に(この場合ですと関数を投げるタイミングとその処理の重さ)非同期を使うかは、プログラムよりも実機の状況を勘案すべき問題になるでしょう。


(多少は参考になるかもしれない)ストレージへの記録については、一旦投稿して、後程、追加したいと思います。



すんなりいくかと思いましたが、少々長引きそうです。


テスト中に多少理解したpromiseから作成するobservableについてのサンプルコード関連について記して次回に回します。


Angular日本語ドキュメンテーション|RxJSライブラリ

https://angular.jp/guide/rx-library


promise から observable を作成する

---------------------------------------------------------------

import { from, Observable } from 'rxjs';


中略


// Create an Observable out of a promise

const data = from(fetch('/api/endpoint'));

// Subscribe to begin listening for async result

data.subscribe({

 next(response) { console.log(response); },

 error(err) { console.error('Error: ' + err); },

 complete() { console.log('Completed'); }

});

---------------------------------------------------------------


上の例ではfromを使い、またwebからのレスポンスをもらって処理しています。


適切な値(型)が返るならば"fetch('/api/endpoint')"の代わりに内部の関数でも構いません。


fromを使用した場合は配列限定で、各要素ごとにnextが実行されます。

ofの場合は、jsonや配列など変える値の融通は効きます。ただし、nextは返り値全体を一回のみ実行です。(判っていれば問題は無いでしょうが)


fromaruihaofの中は、定義した配列の値でも構いませんが、next内でpushで値追加等は実行時エラーになります。


この辺はちゃんと理解はしていないのでご注意を!


今回のサンプルは、LocalStorageを使うのでサーバ側と処理を分けたりはしないし出来ませんが、promiseを使ったObservableの例を考えています。(次回に続く)


追記:

色々出来そうなので頑張っていますが、理解(とテスト)にまだまだ時間かかりそうです。

正直、難しいけれど面白いです。

評価をするにはログインしてください。
この作品をシェア
Twitter LINEで送る
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ