Comment puis-je accélérer le chargement de kint () lors du débogage de modèles de brindilles?

15

J'ai vu pas mal de discussions sur la difficulté de travailler avec kint () du module Devel, car il maximise les limites de la mémoire PHP et fait glisser le navigateur. J'ai entendu quelques réflexions sur l'amélioration de sa vitesse en limitant le nombre de niveaux. Par exemple, dans settings.php, vous pouvez effectuer les opérations suivantes:

require_once DRUPAL_ROOT . '/modules/contrib/devel/kint/kint/Kint.class.php';
Kint::$maxLevels = 3;

D'autres moyens d'améliorer la vitesse de kint ()?

chrisshattuck
la source
1
Le problème de performances est dû au fait que D8 est OOP, il y a donc maintenant une merde de données à afficher. Je ne vois donc pas comment cela peut s'améliorer car c'est un JS qui rend vraiment toutes ces données structurées.

Réponses:

23

Il existe deux autres façons que d'autres utilisateurs ont mentionnées pour définir les niveaux de sortie maximum en plus de la méthode settings.php mentionnée dans la question, ainsi que quelques autres idées ci-dessous:

  1. Créez un /modules/contrib/devel/kint/kint/config.phpfichier et ajoutez / modifiez la ligne $_kintSettings['maxLevels'] = 3;(par @mdrummond sur Slack)

  2. Dans une fonction de prétraitement, ajoutez ce qui suit: (par @thpoul sur Slack)

    kint_require();
    Kint::$maxLevels = 3;
  3. Assurez-vous de ne jamais cliquer sur le +signe, qui montre l'arbre entier. Cliquez sur le bloc à la place. Vous pouvez cliquer sur la flèche droite pour ouvrir la sortie dans une nouvelle fenêtre pour une visualisation plus facile (comme lorsque la sortie est dans un bloc). (par @cwightrun sur Slack)

  4. Au lieu d'utiliser kint (), créez une fonction de prétraitement et utilisez un débogueur pour explorer les variables. (par @danny_englander sur Slack)

  5. Passez à kint () une variable spécifique au lieu de la faire parcourir l'ensemble de l'arbre ( par @No Sssweat ci-dessous ).

  6. Si vous avez juste besoin de savoir quelles variables existent, vous pouvez simplement afficher les clés en faisant une {% for key, value in _context %}boucle ( par @mortendk ci-dessous )

chrisshattuck
la source
Devrait également ajouter la réponse de Casey d'ici: drupal.stackexchange.com/a/214713/28813
Eric Steinborn
1
"Assurez-vous de ne jamais cliquer sur le signe +, qui montre tout l'arbre" - Merci! Je cliquais sur le signe «plus» parce que, eh bien, c'est le symbole pour agrandir. Maintenant je sais :-)
tanc
kint_require(); Kint::$maxLevels = 3;dans votre fonction de prétraitement est GOLD . Je vous remercie! Vous permet de définir des niveaux arbitraires selon vos besoins. Il suffit de l'utiliser maintenant pour vider des choses avec 2 niveaux, puis immédiatement après un autre objet avec 5 niveaux.
Will
6

Kint n'est pas la seule bibliothèque que vous pouvez utiliser pour déboguer des variables et des modèles de brindilles.

Je suggère d'utiliser Symfony var-dumper que IMHO est l'une des bibliothèques les plus puissantes pour le débogage de variables. Symfony var-dumper est intégré à la dernière version du module devel (voir ce problème dans la file d'attente des problèmes devel Ajoutez une intégration symfony var-dumper de base )

Pour utilisation var-dumper avec devel

  • télécharger et installer le module devel
  • installer var-dumper via composer ( composer require symfony/var-dumper)
  • allez à la page des paramètres de développement et définissez var-dumper comme dumper par défaut
  • utiliser {{ devel_dump() }}ou {{ kpr() }}ou {{ dpm() }}au lieu de {{kint ()}} pour les variables de débogage dans les modèles de brindilles
marco
la source
2

Voici une autre astuce:

Au lieu d'utiliser {{ kint() }}ce qui retournera tout, vous pouvez être plus précis en passant la variable dont vous avez besoin; ainsi, il se chargera plus rapidement.

Par exemple: Dans node - [type] .html.twig, vous pouvez passer la variable de contenu à kint:

{{ kint(content) }}

Si vous connaissez le nom du champ, vous pouvez être encore plus précis:

{{ kint(content.field_name['#items'].getValue()) }}

Cela ne renverra que la ou les valeurs du nom du champ.

Pas de sueur
la source
2

au lieu d'utiliser kint, vous pouvez faire cette petite astuce au lieu de simplement vous faire une idée de ce qui s'y trouve

node.html.twig

<ol>
{% for key, value in _context  %}
<li>{{ key }} </li>
 {% if loop.index == 2 %}}
    <pre>{{ dump( value ) }}</pre>
{% endif %}
{% endfor %}
</ol>

oui, il ne donne pas tout l'amour que le kint veut vous montrer, mais au moins vous sortez les noms, etc.

mortendk
la source
0

Lorsqu'il est impossible d'obtenir la vue HTML ou qu'il est trop lent pour charger la sortie kint .

Je vais sérialiser la variable et l'enregistrer avec

\Drupal::logger('custom debug')->notice($string);

Ensuite, je vais le copier sur unserialize.com et choisir l' affichage Krumo ....

Jimmy Ko
la source
Je veux juste Krumo pour D8
Felix Eve
-2

L'ajout $GLOBALS['_kint_settings']['maxLevels'] = 4;de votre settings.local.php devrait faire l'affaire. N'hésitez pas à modifier le nombre de niveaux ici.

Casey Wight
la source
3
Cela ne fonctionne pas pour moi dans Drupal 8.2, car $GLOBALS['_kint_settings']['maxLevels']dans settings.local.php est remplacé par la valeur par défaut dans /modules/contrib/devel/kint/kint/config.php .
Philipp Michael
Oui, config.default.php n'a pas de sens, il remplacera tout ce que vous mettez en tant que $ GLOBALS, vous pouvez donc le changer dans kint config ou supprimer cette valeur dans config et la mettre comme globale pour la faire fonctionner.
Marko Blazekovic