LoginSignup
0
0

More than 5 years have passed since last update.

フォームの入力に対して高コストな関数を遅延実行させる

Last updated at Posted at 2017-01-29

問題

ユーザーのフォーム入力に対してそこそこ高コストな処理(ファイルを読み込んでcanvasに描画,結果をimageとしてプレイビュー表示)を行う必要があった
フォームの変更(inputイベント)に対して即座に描画関数を呼び出すと高負荷でフォームの変更を妨げてしまった

対処

フォームの変更から一定時間後に高コストな関数を実行させるようスケジュールし,ディレイ中にフォームが更新され再度イベントが起きたらスケジュールをキャンセルし再度スケジュールし直す.
これで短時間に何度もフォームが更新されても一度しか関数は実行されない.

コード

setTimeoutとclearTimeoutでスケジューリングを行う.
promiseを使ったコードは勉強不足ですぐに書けなかったので調べておきたい.

// フォームの入力が変わると呼ばれる関数.
function (val, old) {
  if (val === old) {
    return
  }
  const highCostFunc = (val) => {
    // 新しい値を受け取って処理を行う高コストな関数.
  }
  if (this._timeout) {
    clearTimeout(this._timeout)
  }
  const delay = 200
  this._timeout = setTimeout(highCostFunc(val), delay)
}

書いてみるとなんともないコードだったのですがすぐに書くことが出来なかったので備忘録がてら記載させて頂きます.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0