Als Nebenprodukt der Codeoptimierung, die von modernen Browsern beim Debuggen durchgeführt wird, können Sie nicht alle Variablen "sehen", die "sachlich" im Geltungsbereich liegen. Dies ist bekannt und wurde in einer früheren Frage hier auf SO angesprochen . Diese Funktion ist zwar in der Produktion sehr nützlich, nervt mich aber während der Entwicklung sehr, verlangsamt mich jedoch (das sollte offensichtlich sein).
Meine Frage ist nun, gibt es eine Möglichkeit, dieses Verhalten auszuschalten? Kann ich eine Konfigurationsdatei bearbeiten oder gibt es ein Browser-Plugin oder eine "spezielle Build-Version für Entwickler" der ausführbaren Browser-Datei? Ich liebe es, meinen Code sofort in die Konsole einzugeben, wenn ich neuen Code schreibe, also nervt mich das wirklich.
UPDATE / EDIT
Hier ist eine Teillösung, die Paul1365972 zu verdanken ist.
Sie müssen den Chrome-Browser über die Befehlszeile mit speziellen Optionen wie den folgenden starten:
- Schließen Sie Chrome vollständig
- Führen Sie Chrome von der Konsole aus, wobei
"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax"
für Windows andere Betriebssysteme ähnlich sind. - Öffnen Sie die Entwicklerkonsole und führen Sie sie aus
"%GetHeapUsage()"
. Wenn Sie Chrome mit dieser Option ordnungsgemäß gestartet haben, wird eine Nummer in der Konsole protokolliert. Andernfalls wird ein Syntaxfehler angezeigt.
Mit diesem Befehlszeilenflag können Sie mit Befehlen %
, die mit Syntaxfehlern in einfachem JavaScript beginnen, mit der V8-Engine kommunizieren. Eine Liste der verfügbaren V8-Befehle dieser Art wurde in Pauls Antwort gegeben .
Es gibt %NeverOptimizeFunction()
auf dieser Liste etwas, das so aussah, als müsste ich einfach anrufen und damit fertig sein. Leider macht diese Funktion nicht das, was ich mir erhofft hatte, wie im nächsten Screenshot gezeigt.
(((Der andere Link aus Pauls Antwort (v8-natives-Knotenmodul) ist für uns hier in diesem Zusammenhang nicht wichtig. Alles, was er tut, ist, Einzeiler um die Funktionsaufrufe "%" zu wickeln, damit der Code nicht abstürzt Browser, die nicht v8 sind.)))
(((Ich erinnere mich an eine Zeit, als dies funktionierte (als diese Optimierung noch nicht erfunden / implementiert wurde). Ich weiß nicht, wie lange es her ist. Zehn Jahre? 15 Jahre? So ähnlich. Was war die letzte Chrome-Version (wenn any) und was war die letzte Firefox-Version (hier sicherer, dass sie existiert), in der Sie etwas tun konnten? Sie erhalten nicht das Kopfgeld, aber Sie erhalten eine positive Bewertung, wenn Sie es zufällig wissen und als Antwort veröffentlichen .)))
DIE LÖSUNG
DANKE PETR SRNICEK
NEUE FRAGE
Petrs Lösung hilft zwar viel, ist aber nicht perfekt. Diese Frage wird zu lang, daher habe ich eine neue Frage gestellt, wie die Lösung von Petr verbessert werden kann. (Ich könnte diese Frage natürlich hier bearbeiten, aber das würde sich "unhistorisch" anfühlen, wenn Sie wissen, was ich meine.)
v8-natives
Bibliothek packt nur die wichtigen% -Aufrufe in Code in eine einfache Bibliothek, die sich noops
in einem Browser oder Knoten befinden sollte, der nicht im speziellen Flag --allow-natives-syntax gestartet wurde.
%NeverOptimizeFunction(foo)
ich es gerade auch für bodyOnload genannt habe, "nur weil" und dachte "gut, es wird nicht weh tun". Das Problem ist, dass foo
es NICHT so deoptimiert wird, wie ich es mir erhofft hatte. Variable lorem
ist unsichtbar. Nehmen wir an, ich möchte einen Code schreiben, der in die Funktion foo gehen soll. Anstatt es in meinen Texteditor einzugeben, tippe ich es in die Entwicklungskonsole (während der Debugger bei foo sitzt), überprüfe, ob es das tut, was ich will, und kopiere es dann von der Konsole in meinen Texteditor. So liebe ich es zu arbeiten. Und kann nicht. Wegen der Optimierung. Kapiert?
--js-flags
(einschließlich mehrerer TurboFan-bezogener ) sowie mit mehreren nativen V8-Befehlen durchgeführt, bevor Paul1365972 seine Antwort veröffentlichte, aber ich konnte das gewünschte Verhalten nicht erreichen. Ich glaube, dass dieser Ansatz eine Sackgasse sein könnte. Es kann sinnvoll sein [v8]
, dieser Frage ein Tag hinzuzufügen . Jemand mit einem tiefen Verständnis des Innenlebens von V8 kann möglicherweise klären, ob dies der richtige Weg ist, oder Sie vielleicht in die richtige Richtung weisen.