web-dev-qa-db-fra.com

puis-je désactiver l'optimisation, de sorte que les variables de portée des fermetures ne sont pas "optimisées"

En tant que sous-produit de l'optimisation de code effectuée par les navigateurs modernes, lors du débogage, vous ne pouvez pas "voir" toutes les variables qui "en fait" sont dans la portée. Ceci est bien connu et a été abordé dans un question précédente ici sur SO . Cette fonctionnalité, bien que très certainement utile en production, me gêne beaucoup pendant le développement, elle me ralentit (cela devrait être évident.)

Maintenant, ma question est, existe-t-il un moyen de désactiver ce comportement? Puis-je modifier un fichier de configuration, ou existe-t-il un plugin de navigateur, ou peut-être qu'il existe une "version de build spéciale pour les développeurs" de l'exécutable du navigateur? J'adore taper mon code dans la console tout de suite lorsque j'écris du nouveau code, donc cela me dérange vraiment.

visualSummaryIffalseConsoleLog

MISE À JOUR/MODIFICATION

Voici une solution partielle, crédit à Paul1365972.

Vous devez démarrer le navigateur chrome à partir de la ligne de commande, avec des options spéciales, comme ceci:

  1. Fermer Chrome complètement
  2. Exécutez Chrome à partir de la console avec "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax" c'est pour les fenêtres d'autres OS similaires.
  3. Ouvrez la console développeur et exécutez "%GetHeapUsage()". Si vous avez correctement démarré Chrome avec l'option, un numéro sera enregistré sur la console, sinon vous obtiendrez une erreur de syntaxe.

Avec cet indicateur de ligne de commande, vous pouvez "parler au moteur V8" avec des commandes commençant par %, Qui sont des erreurs de syntaxe en JavaScript simple. Une liste des commandes V8 disponibles de ce type était donnée dans la réponse de Paul .

Il y a %NeverOptimizeFunction() sur cette liste, qui est quelque chose qui ressemblait à la chose que je devais simplement appeler et en finir. Malheureusement, cette fonction ne fait pas ce que j'espérais, comme le montre la capture d'écran suivante.

lorem still not defined

(((Le autre lien de la réponse de Paul (module de noeud v8-natives) n'a aucune importance pour nous ici dans ce contexte. Tout ce qu'il fait, c'est qu'il enroule des lignes simples autour des appels de fonction "%") donc le code ne plante pas les navigateurs qui ne sont pas v8.)))

(((Je me souviens d'un moment où cela a fonctionné (quand cette optimisation n'a pas encore été inventée/implémentée). Je ne sais pas depuis combien de temps. Dix ans? 15 ans? Quelque chose comme ça. Quel était le dernier Chrome (le cas échéant) et quelle était la dernière version de Firefox (plus sûre ici qu'elle existe) où vous pouviez faire? Cela ne vous donnera pas la prime, mais cela vous donnera un vote positif, si vous arriver à le savoir et à le poster comme réponse.)))

LA SOLUTION

MERCI PETR SRNICEK

hacky fix

NOUVELLE QUESTION

Bien que la solution de Petr aide beaucoup, elle n'est pas parfaite. Cette question devient trop longue, j'ai donc publié un nouvelle question sur la façon dont la solution de Petr peut être améliorée. (Je pourrais bien sûr éditer cette question ici, mais cela me semblerait "non historique", si vous voyez ce que je veux dire.)

11
mathheadinclouds

J'espère vraiment que cette question a une VRAIE réponse. Ce qui suit n'est pas une vraie réponse, c'est une fortune. J'ai écrit un outil d'aide avec lequel vous pouvez créer un code d'aide stupide de la forme if (false) { console.log(variables, from, closures); } (voir la capture d'écran en question) en utilisant une analyse statique - vous collez votre code, la déclaration stupide est créée, vous pouvez la copier , vous n'avez pas besoin de le saisir. Je ne sais pas si cela aide beaucoup, car tout ce copier-coller prend aussi du temps, mais c'est ce que j'ai obtenu.

screenshot

violon

0
mathheadinclouds