【解決済み】プラグイン内のコード処理時間について

そみや
記事: 60
登録日時: 2021年1月25日(月) 01:34

【解決済み】プラグイン内のコード処理時間について

投稿記事by そみや » 2022年9月29日(木) 06:51

コード流れについて分からないことがあります。相談させて下さい。

データを読み込む為にプラグインを自作しているのですが、
同一のプラグイン内にフォルダ分けのつもりでif文を使っています。
この時のプラグインコマンドを実行した時の処理時間はどうなるのか教えて頂きたいです。

質問内容は...
・プラグインコマンド「①」で実行した場合と、プラグインコマンド「②」で実行した場合で処理時間は、
 「①」=「②」なのか「①」<「②」なのか?

(プラグインコマンド「①」を実行したところで、結局プラグイン内の全てのコードを通過する為、実行はしないものの「②」100000000行を通過するため処理時間は変わらない? ⇒ プラグインを別々のファイルに分けた方が良い?)

同一プラグイン内に
「①」は3行
「②」は100000000行から対象データを探し出す。


コード: 全て選択


(function() {
   var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
   Game_Interpreter.prototype.pluginCommand = function(command, args) {
      _Game_Interpreter_pluginCommand.call(this, command, args);

if (command === '①') {
   var A = "①データ";
   if( args[0] ==         1 ){ A = "①データ1" };
   if( args[0] ==         2 ){ A = "①データ2" };
   if( args[0] ==         3 ){ A = "①データ3" };
   $gameVariables.setValue(1 ,A );
};

if (command === '②') {
   var A = "②データ0";
   if( args[0] ==         1 ){ A = "②データ1" };
   if( args[0] ==         2 ){ A = "②データ2" };
   if( args[0] ==         3 ){ A = "②データ3" };
   if( args[0] ==         4 ){ A = "②データ4" };
   if( args[0] ==         5 ){ A = "②データ5" };
   ~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~
   if( args[0] ==    99999998 ){ A = "②データ 99999998" };
   if( args[0] ==    99999999 ){ A = "②データ 99999999" };
   if( args[0] == 100000000 ){ A = "②データ100000000" };

   $gameVariables.setValue(2 ,A );
};

};
})();



以上、よろしくお願い致します。
最後に編集したユーザー そみや on 2022年9月30日(金) 07:07 [ 編集 1 回目 ]

アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: プラグイン内のコード処理時間について

投稿記事by Plasma Dark » 2022年9月29日(木) 12:46

単純に質問にだけ答えると、コマンド①を実行した場合、 command === '②' の分岐の中は処理されません。
コマンド②のほうが処理時間は長くなりそうな気はしますが、正確なところは実測しないとわかりません。

到達する命令の多さだけで言えばコマンド2のほうが明らかに多いのですが、コードに規則性があるのでもしかしたら処理系が気を利かせて最適化してくれるかもしれません。


100000000行の分岐を手で書くのが現実的ではないし、機械的に出力してまでやるならもっと別の良いコードが書けそうな気もします。
(forなどのループで100000000回の分岐を行うのと、100000000行の分岐を書くのでは、実行速度という観点では意味が変わってきます)

単に例示として極端に大きな数値を出されているだけかもしれませんが、100000000行という巨大なデータを取り扱う必要があるのでしょうか。
例えば、機械学習などで巨大なデータを扱うにしても、単純に分岐を並べるよりはもっと良いやり方があるように思います。

プラグインを分けるかどうかは、個人の好みにもよりますが、コマンドの意味が違うかどうか次第だと思います。
私なら、同様のデータをロード・検索してゲーム内変数で扱えるようにする、という意味であれば同じプラグインになっていてほしいですね。

例示のコードのコマンド実装部分だけを見れば、

コード: 全て選択

if (command === '①' || command === '②') {
  const variableId = command === '①' ? 1 : 2;
  $gameVariables.setValue(variableId, `${command}データ${args[0]}`);
}


これだけで済んでしまいますが、実際に代入する値はもっと複雑で、どこか別の大量のデータを格納したファイルから何かをロードする想定なのでしょうか。
100000000行のファイルをロードしてメモリ上に展開するとなると、分岐の処理時間よりもそちらのほうが支配的になりそうな気がします。
そみや
記事: 60
登録日時: 2021年1月25日(月) 01:34

Re: プラグイン内のコード処理時間について

投稿記事by そみや » 2022年9月29日(木) 22:05

Plasma Dark 様

ありがとうございます。
100000000行は、極端な例として記載させて頂きました。
誤解を招き申し訳ありません。

台詞や単語のテキストをif内に用意しておき、環境条件によって複数のテキストを結合させ出力する。
またキャラクタ動作、ピクチャ名など、登録情報を持ってくる。
などがあり、規則性がある部分もありますが、forで処理するのことは難しいかと思います。

知りたいことは、「処理されない」という部分の処理がどう実行されているか。という点です。
100行なら然程影響はないと思いますが、それが1000、10000・・・と増えて行った場合に影響があるのか、
それを知った上で、ifを使ってフォルダ分けの様に分岐させたいと考えています。

コマンド①を実行した場合、 command === '②' の分岐の中は処理されません。

仮にコマンド②を実行した時、処理時間が2[秒]だったとして、
この「処理されない」というのは、処理時間が0[秒]になるのか、それとも処理はされないものの結局100000000行分は通過するので2[秒]掛かってしまうのでしょうか?

よろしくお願い致します。
アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: プラグイン内のコード処理時間について

投稿記事by Plasma Dark » 2022年9月30日(金) 02:58

知りたいことは、「処理されない」という部分の処理がどう実行されているか。という点です。


実行されません。通らない分岐の処理時間を気にする必要はありません。

100通りもの分岐を仮に書いたとして、心配すべきはパフォーマンスよりもメンテナンス性であるように思います。
そみや
記事: 60
登録日時: 2021年1月25日(月) 01:34

Re: プラグイン内のコード処理時間について

投稿記事by そみや » 2022年9月30日(金) 07:05

Plasma Dark 様

実行されません。通らない分岐の処理時間を気にする必要はありません。


処理されないif内は処理時間はかからないのであれば安心しました。

確かに「プラグイン内のコード」のメンテナンス性は悪いのですが、
現在、Excelを使ってコードを出力しているので、プラグイン内にifが乱立しても直接いじることがないので影響はない状況です。

Excelに台詞と条件を登録 ⇒ Excelが登録情報を元に仕分けしifなど含めたコードに変換 ⇒ プラグインに書き込み
という流れで制作しています。
なので台詞の制作のし易さを重視しすると、どうしてもifが乱立してしまいます。
そこで、処理時間について不安があったため質問させて頂きました。
一連の流れを説明すると分かりづらくなると思い、極端な例を出して質問してしまいました。
誤解を招き申し訳ありませんでした。

ただ、ご指摘頂いた通りメンテンナス性も重要だと思うので、修正したいと思います。
ご教授ありがとうございました。
アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: 【解決済み】プラグイン内のコード処理時間について

投稿記事by Plasma Dark » 2022年9月30日(金) 11:58

Excelに台詞と条件を登録 ⇒ Excelが登録情報を元に仕分けしifなど含めたコードに変換 ⇒ プラグインに書き込み


元となる.xls(x)から機械的にコードを出力していたのですね。
それであれば、成果物の可読性はある程度無視しても良いのかなとも思います。
そみや
記事: 60
登録日時: 2021年1月25日(月) 01:34

Re: 【解決済み】プラグイン内のコード処理時間について

投稿記事by そみや » 2022年9月30日(金) 18:43

色々とアドバイスをして頂き感謝しております。
このまま進めてみてトラブルが発生したら、改めて相談させて下さい。
よろしくお願い致します。

“MV:質問” へ戻る