web-dev-qa-db-fra.com

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

J'ai vu pas mal de discussions sur la difficulté de travailler avec kint () du module Devel, car il maximise PHP limite de mémoire et fait glisser le navigateur. J'en ai entendu 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 ()?

15
chrisshattuck

Il y a 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éer un /modules/contrib/devel/kint/kint/config.php fichier et ajouter/modifier 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 + 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 un {% for key, value in _context %} boucle ( par @mortendk ci-dessous )

24
chrisshattuck

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

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 Ajouter une intégration symfony var-dumper de base )

Pour utilisation var-dumper avec devel

  • télécharger et installer le module devel
  • installez 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
  • utilisez {{ devel_dump() }} ou {{ kpr() }} ou {{ dpm() }} au lieu de {{kint ()}} pour les variables de débogage dans les modèles twig
7
marco

Voici une autre astuce:

Au lieu d'utiliser {{ kint() }} 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.

2
No Sssweat

au lieu d'utiliser kint, vous pouvez faire cette petite astuce au lieu de simplement avoir 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.

2
mortendk

Pour info, à partir de Devel v3, vous devrez effectuer deux mises à jour si vous utilisez la méthode supérieure suggérée par @chrisshattuck

  1. Aller à admin/config/development/devel?q=/admin/config/development/devel
  2. Assurez-vous que "Kint" est sélectionné.
  3. Pour remplacer la profondeur maximale, accédez à settings.local.php et mettez à jour la variable max_depth.
  include_once(DRUPAL_ROOT . './../vendor/kint-php/kint/src/Kint.php');
  if (class_exists('Kint')) {
    Kint::$max_depth = 4;
   }  
1
mrsflinger

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 nserialize.com et choisir Krumo display ....

0
Jimmy Ko