Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
「実行速度優先」と似た動きで生成するコード自体が変化ことで、パフォーマンス測定を行うようになります。
一応、以前にパフォーマンスモニタの情報が欲しいと言っていた内容と重なります。
(WebWorkerの内容は取れません。メインスレッドとは別にWebWorkerのglobalに保存されるので参照するには転送が必要)
実際、手元ではこの実装であれやこれやしてました。
・「ユーザ関数」「システム関数」「システム関数本体」の3種、
・呼び出し回数、総時間、最小時間、最大時間が取得可能(回数と総時間から平均は算出可能。欲しい気のする中央値等は不可)
システム関数とシステム関数本体の差は、前者は呼び出すための準備しコードを含む時間、後者は__v0"hoge"のみの時間。
・実行速度優先と同様、コンパイル時の記載場所に従い対象が来まる。
・システム関数(本体も)は呼び出し側のコードに測定コードが埋め込まれる(呼び出される側ではない)
・ユーザ関数は呼び出される側のコードに埋め込まれる。
・この命令自体による性能インパクトが激しいので、測定された値を扱いが難儀。回数のみならfunction(),try/finaly不要で軽いかも?
・結果を取り出す命令がない・・・というか、プログラム自身で自分の測定結果を命令で取り出すのは違う気がして未実装。
本来は、IDE側の仕事 と思う。
おそらく、プラットフォーム(nodejsとかブラウザ)の持つ機能に任せるのが1番(収集も表示も)と思うのですが、それにはきっと、本物の仕様に沿ったsourceMapが必要。
なお、chrome系以外では、マイクロ秒単位の高精度タイマが端末識別に利用できてしまう理由で精度がわざと落とされています(数ミリから数十ミリ秒単位のレベルまで)。そのため、よほど時間かかる処理ではいと測定できません(chrome系が仕様に従ってない)
命令を使わない限りは、ほぼ、影響ありません(if文の判定分、コンパイル時の負荷になる程度。実行時は全く影響なし)
以下のようなコードで測定する(結果の取り出しが現状ではちょっとトリッキーです)