2

(何人かがすでに js プロファイルについて質問していることは知っていますが、それらを正しく理解していれば、それは私が必要とするものではありません。)

javascriptの実行をトレースして、1)どの関数が呼び出されたのか、2)関数が呼び出された時刻、3)関数の実行時刻の情報を収集したいと考えています。

情報をオンラインで (デプロイされたコードで) 収集したいが、社内では収集したくない。したがって、トレードオフは軽くなければなりません。また、関数が呼び出される前後に手動で行を追加したくありません。ただし、コードを動的に計測できる方法があれば素晴らしいでしょう。

前もって感謝します!

4

3 に答える 3

3

JavaScript が関数の開始時刻と関数の停止時刻を自動的に追跡するシステムはないと思います。それはおそらくあなたが自分で追加しなければならないものです. これが必要な場合は、PHP を使用して JavaScript を提供し、正規表現を使用して各関数の開始と終了を正規表現などで見つけることを検討してください。

RegExp は次のようになります (完全にテストされていないため、実験する必要があります)。

/function [A-Za-z_$][A-Za-z0-9_$]*{(.*?)}/i

関数の内部にアクセスできるようになったら、その値を関数に置き換えて、元の関数定義にラップされた開始と終了を追跡できます。

これには、js コードがどのように機能するかを変更することを心配することなく、思いどおりに実行できるという利点があります。それは、サーバーが完全に処理するものです。

それか、関数を直接呼び出す代わりに、ラッパー関数を使用します。

function wrapFunction( func, context, argList )
{ 
    // Replace with however you are storing this.
    console.log( new Date().getTime() );
    func.apply( context, argList );
    console.log( new Date().getTime() );
}

これには、サーバーに JS を更新させるよりもはるかにクリーンであるという利点があります。残念ながら、JS を手動で書き直さなければならないことも意味します。

私のお勧めは、単純にロギング構文を適応させて使用することです。ほとんどのロガーは、タイムスタンプ、コンテキスト、レベル、および特定のメッセージを出力します。関数の最初と最後でロガーを呼び出すだけで、探していることを正確に実行できます。さらに、多くは設定可能であるため、Firefox の JS コンソールに表示したり、サーバーに情報を送信したり、必要に応じて完全に無効にしたりできます。

ここに JS ロガーのリストがあります。

JavaScript ロガー

残念ながら、これにはすべてを手動で更新する必要がありますが、探しているものの 90% をすぐに入手できる最も簡単な方法のようです。

于 2009-10-27T05:29:36.727 に答える
1

おそらく、FireBugのプロファイラーは、遅い機能を追跡するのに役立ちます。

これは、プロファイリングオプションの詳細を示すビデオです。(インデックス:3:20)。

于 2009-10-27T09:41:43.353 に答える