web-dev-qa-db-ja.com

最適化をオフにできるので、クロージャーからのスコープ内変数は「最適化されません」。

最近のブラウザーで行われたコード最適化の副産物として、デバッグ中に、「実際に」スコープ内にあるすべての変数を「見る」ことはできません。これはよく知られており、 の前の質問でSO で対処されています。この機能は、本番環境では確かに便利ですが、開発中に私を非常に悩ませますが、遅くなります(それは明らかなはずです。)

今私の質問は、この動作をオフにする方法はありますか?構成ファイルを編集できますか、それともブラウザプラグインがありますか、それともブラウザ実行可能ファイルの「開発者向けの特別なビルドバージョン」がありますか?新しいコードを書いているとき、すぐにコードをコンソールに入力するのが好きなので、これは本当に私を悩ませています。

 visualSummaryIffalseConsoleLog 

UPDATE/EDIT

これは、部分的な解決策です。Paul1365972の功績です。

chromeブラウザをコマンドラインから起動し、次のような特別なオプションを指定する必要があります。

  1. 閉じるChrome完全に
  2. 実行するChromeコンソールから"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax"を使用して実行します。これは、他のWindows OSと同様です。
  3. 開発者コンソールを開き、"%GetHeapUsage()"を実行します。オプションでChrome=を適切に開始した場合、番号がコンソールに記録されます。そうでない場合、構文エラーが発生します。

このコマンドラインフラグを使用すると、単純なJavaScriptの構文エラーである_%_で始まるコマンドを使用して、「V8エンジンと通信する」ことができます。この種の利用可能なV8コマンドのリストは、 Paulの回答で示された でした。

そのリストには%NeverOptimizeFunction()があります。これは、呼び出して実行する必要があるもののように見えました。残念ながら、次のスクリーンショットに示されているように、その関数は私が望んでいたことを行いません。

 lorem still not defined 

(((Paulの回答からの 他のリンク (v8-nativesノードモジュール)は、このコンテキストではここでは重要ではありません。「%」関数呼び出しを1行で囲むので、コードはv8以外のブラウザはクラッシュしません。)))

((これが機能したとき(この最適化がまだ発明/実装されていないとき)を覚えています。どのくらい前のことかわかりません。10年ですか?15年ですか?そのようなものです。最後は何でしたかChromeバージョン(存在する場合)と、Firefoxの最後のバージョン(存在する場合はここで確認できます)はどこでできますか?賞金は獲得できませんが、賛成票が得られます。たまたまそれを知り、回答として投稿してください。)))

ソリューション

ありがとうPETR SRNICEK

 hacky fix 

新しい質問

ペトルのソリューションは多くのことを助けますが、完璧ではありません。この質問は長くなりすぎているので、Petrのソリューションをどのように改善できるかについて、 新しい質問 を投稿しました。 (もちろん、ここでこの質問を編集することもできますが、私が何を意味するのかを知っていれば、それは「非歴史的」に感じるでしょう。)

11

私はこの質問が実際の答えを持っていることを本当に望みます。以下は本当の答えではなく、その場しのぎです。静的分析を使用して、if (false) { console.log(variables, from, closures); }形式の愚かなヘルパーコードを作成できるヘルパーツールを作成しました(問題のスクリーンショットを参照)-コードに貼り付けると、愚かなステートメントが作成され、コピーできます、それからそれをタイプする必要はありません。このすべてのコピーと貼り付けにも時間がかかるので、それが大きな効果があるかどうかはわかりませんが、それは私が得たものです。

screenshot

フィドル

0