5

MooseX::Declare を使用した場合のパフォーマンス ヒットは、主に最初の処理 (つまり、定義を標準の Perl 構文に「変換」する処理) を行うときに発生しますか? つまり、コンパイルとランタイムの初期設定が完了したら、MooseX::Declare メソッドと従来の宣言で定義されたメソッドの呼び出しでパフォーマンスに違いはありますか?

4

2 に答える 2

8

答えはイエスとノーです。MooseX::Declare はMooseX::Method::Signaturesを使用してパラメーターのアンパックと検証を行うため、パラメーターをまったく検証しない場合と比較して、実行時のオーバーヘッドがあります。

しかし、「伝統的な宣言」のアイデアにパラメーターの数と型の検証が含まれている場合 (堅牢なコードが必要な場合はそうすべきです)、MXD/MXMS の検証が検証よりも遅くなると考える理由はありません。自分で行います。

于 2010-03-30T07:55:15.933 に答える
2

MooseX::Declare は、宣言構文を「真の」Perl コードにコンパイル時に変換するものです。そのオーバーヘッドはすべてコンパイル時に発生します。

あなたが話す実行時のオーバーヘッドは、Moose 型の検証と強制です。これらはどちらもオプションです。型修飾子を指定する必要はなく、 を指定する必要もありませんis coerce。どちらも使用しない場合、実行時のパフォーマンスは、MooseX::Declare の魔法を使用しない場合のパフォーマンスに非常に近くなるはずです。

したがって、ランタイムの観点からは、win/win です。使用した機能に対してのみお支払いいただきます。型の検証はいずれにせよ手動で行う必要があるものであり、強制は、パフォーマンスに影響を与えることは間違いありませんが、引数ごとに有効になっています。

于 2010-03-30T23:08:35.737 に答える