Pure関数のコール数に気をつけよう
実行ノードを繋げなくてもよく、見た目もスッキリするPure関数ですが気がついたら気がついたら負荷がかかる原因になっていた…という事も。
今回はPure関数使用時の注意点をまとめました。
Pure関数とは?
関数を作成した際に、詳細の「純粋」にチェックを入れた関数の事です。
逆にチェックを入れていない場合はNonPure関数と呼ばれます。
Pure関数には実行ノードがなく、アウトプットノードを繋げば関数を実行されますが、NonPure関数は実行ノードを繋がないと関数が実行されません。
Pure関数が実行されるタイミング
例えば下記の画像の場合だと関数自体は一つですが、アウトプットノードを繋いでいるSetが呼ばれる度に関数が実行されています。
結構落とし穴なのがSelectノードを使用した場合です。
パッと見はTrueの時にCalcFunctionを実行しようとしていますが、この場合TrueでもFalseでもSelectノードに繋いだPure関数は実行されています。
ループ内で呼ばれていたりなんかしたら、ループ回数分実行されます。
コール回数を抑える方法
NonPure関数を使う
NonPure関数で下記のように繋いだ場合、関数は一度しか実行されません。
一度キャッシュしておく
ローカル変数等に一時的に保存しておいて使い回す。
まとめ
Pure関数を何も考えずに繋ぎまくっていると意図していないコール数になっている事がある。
複雑な関数であれば処理負荷にも繋がってしまう為、状況に応じて処理の最適化の必要があります。
コール数の確認はプロファイラツールが便利なので活用していきましょう。