MooseX::Declare を使用した場合のパフォーマンス ヒットは、主に最初の処理 (つまり、定義を標準の Perl 構文に「変換」する処理) を行うときに発生しますか? つまり、コンパイルとランタイムの初期設定が完了したら、MooseX::Declare メソッドと従来の宣言で定義されたメソッドの呼び出しでパフォーマンスに違いはありますか?
2 に答える
答えはイエスとノーです。MooseX::Declare はMooseX::Method::Signaturesを使用してパラメーターのアンパックと検証を行うため、パラメーターをまったく検証しない場合と比較して、実行時のオーバーヘッドがあります。
しかし、「伝統的な宣言」のアイデアにパラメーターの数と型の検証が含まれている場合 (堅牢なコードが必要な場合はそうすべきです)、MXD/MXMS の検証が検証よりも遅くなると考える理由はありません。自分で行います。
MooseX::Declare は、宣言構文を「真の」Perl コードにコンパイル時に変換するものです。そのオーバーヘッドはすべてコンパイル時に発生します。
あなたが話す実行時のオーバーヘッドは、Moose 型の検証と強制です。これらはどちらもオプションです。型修飾子を指定する必要はなく、 を指定する必要もありませんis coerce
。どちらも使用しない場合、実行時のパフォーマンスは、MooseX::Declare の魔法を使用しない場合のパフォーマンスに非常に近くなるはずです。
したがって、ランタイムの観点からは、win/win です。使用した機能に対してのみお支払いいただきます。型の検証はいずれにせよ手動で行う必要があるものであり、強制は、パフォーマンスに影響を与えることは間違いありませんが、引数ごとに有効になっています。