イベントドリブン
Event driven
イベント駆動
イベントが発生した時にそれを受け取って処理を行う方法
基本的に受動的な動作になる。
イベントを受け取るまで何もしないのでポーリングに対して負荷が小さい。 イベント発生直後に処理ができるので不感帯(イベント発行が無視される期間)が生じにくい
イベントが短期間に連続して発生する場合がある。この時どう動くべきかは要件による。
イベントの処理中には同イベントを無視する。
イベントの処理中にはそのイベントを待ち状態にして、処理が終わってから待ちになっているイベントを処理する。
待ち可能な回数をいくつまでにするか?
イベントが大量に発生すると、処理が間に合わなくなることがある。
イベント処理が、自分自身を呼び出すようなイベントを引き起こすことがある。無限ループになるので、これを避けるための方法が必要となる。プログラムの無限ループとは異なり、プログラム外部が影響してくるのでコードだけ見ても気が付きにくい。また、自分が引き起こしたイベントなのかどうなのかの区別が付かないので対策が難しい。
単純コールバック方式
複数のコールバックの登録方式
JavaScript(Node.js)
EventEmitter クラスがイベント管理を行う。
ブラウザには EventEmitter がないため、そのままでは動かない。
JavaScript(ブラウザ)
Node.js の EventEmitter 相当のクラスが存在しない。
あらかじめ用意されている EventTarget インターフェースを持つ
EventTarget.addEventListener でイベントリスナー追加
EventTarget.removeEventListener でイベントリスナー削除
EventTarget.dispatchEvent でイベント発火