Come sottoprodotto dell'ottimizzazione del codice eseguita dai browser moderni, durante il debug, non è possibile "vedere" tutte le variabili che "di fatto" rientrano nell'ambito. Questo è ben noto ed è stato affrontato in una domanda precedente qui su SO . Questa caratteristica, anche se sicuramente utile in produzione, mi sta infastidendo molto durante lo sviluppo, mi rallenta (dovrebbe essere ovvio).
Ora la mia domanda è: c'è un modo per disattivare questo comportamento? Posso modificare alcuni file di configurazione, oppure esiste un plug-in del browser o forse esiste una "versione di build speciale per gli sviluppatori" dell'eseguibile del browser? Adoro digitare il mio codice nella console immediatamente quando scrivo un nuovo codice, quindi questo mi sta davvero infastidendo.
AGGIORNAMENTO / MODIFICA
Ecco una soluzione parziale, merito a Paul1365972.
Devi avviare il browser Chrome dalla riga di comando, con opzioni speciali, in questo modo:
- Chiudi Chrome completamente
- Esegui Chrome dalla console con
"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax"
Windows per altri sistemi operativi simili. - Apri la console per gli sviluppatori ed esegui
"%GetHeapUsage()"
. Se hai avviato correttamente Chrome con l'opzione, un numero verrà registrato sulla console, altrimenti otterrai un errore di sintassi.
Con questo flag della riga di comando, puoi "parlare al motore V8" con i comandi che iniziano con %
, che sono errori di sintassi in JavaScript semplice. Un elenco di comandi V8 disponibili di questo tipo è stato fornito nella risposta di Paul .
C'è %NeverOptimizeFunction()
in quella lista, che è qualcosa che assomiglia alla cosa che dovrei solo chiamare e farla finita. Sfortunatamente, quella funzione non fa quello che speravo, come dimostrato nel prossimo screenshot.
(((L' altro link dalla risposta di Paul (modulo nodo v8-natives) non ha importanza per noi qui in questo contesto. Tutto ciò che fa è avvolgere una linea attorno alle chiamate della funzione "%" in modo che il codice non si blocchi browser che non sono v8.)))
(((Ricordo un momento in cui ha funzionato (quando questa ottimizzazione non è stata ancora inventata / implementata). Non so quanto tempo fa. Dieci anni? 15 anni? Qualcosa del genere. Qual era l'ultima versione di Chrome (se qualsiasi) e qual è stata l'ultima versione di Firefox (più sicuro qui che esiste) dove potresti fare? Non ti darà la generosità, ma ti darà un voto, se ti capita di saperlo e pubblicarlo come una risposta .)))
LA SOLUZIONE
GRAZIE PETR SRNICEK
NUOVA DOMANDA
Mentre la soluzione di Petr aiuta molto, non è perfetta. Questa domanda sta diventando troppo lunga, quindi ho pubblicato una nuova domanda su come migliorare la soluzione di Petr. (Potrei ovviamente modificare questa domanda qui, ma sembrerebbe "non storico", se capisci cosa intendo.)
v8-natives
libreria avvolge l'importante% di chiamate in codice in una semplice libreria che dovrebbe trovarsi noops
in un browser o nodo che non è stato avviato nella speciale bandiera --allow-natives-sintassi ..
%NeverOptimizeFunction(foo)
ho appena chiamato anche per bodyOnload, "solo perché", pensando "bene, non farà male". Il problema è che foo
NON è ottimizzato nel modo in cui speravo. La variabile lorem
è invisibile. Diciamo che voglio scrivere un po 'di codice che deve entrare in funzione pippo. Invece di digitarlo nel mio editor di testo, lo digito nella console di sviluppo (mentre il debugger è seduto su foo), vedo se fa quello che voglio e poi lo copia / incolla dalla console al mio editor di testo. È così che amo lavorare. E non posso. A causa dell'ottimizzazione. Prendilo?
--js-flags
(inclusi diversi relativi a TurboFan ) e con diversi comandi nativi V8 prima che Paul1365972 pubblicasse la sua risposta, ma non ero in grado di ottenere il comportamento desiderato. Credo che questo approccio potrebbe essere un vicolo cieco. Potrebbe essere utile aggiungere un [v8]
tag a questa domanda. Qualcuno con una profonda comprensione del funzionamento interno di V8 potrebbe essere in grado di chiarire se questa è la strada da percorrere o forse indicarti la direzione corretta.