Wie kann ich kint () beim Debuggen von Zweigvorlagen schneller laden lassen?

15

Ich habe eine Menge Diskussionen darüber gesehen, wie schwierig es ist, mit kint () aus dem Devel-Modul zu arbeiten, weil es die PHP-Speichergrenzen ausschöpft und den Browser zum Ziehen bringt. Ich habe einige Gedanken über die Verbesserung der Geschwindigkeit durch Begrenzung der Anzahl der Ebenen gehört. In settings.php können Sie beispielsweise Folgendes tun:

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

Gibt es noch andere Möglichkeiten, die Geschwindigkeit von kint () zu verbessern?

chrisshattuck
quelle
1
Das Leistungsproblem wird durch die Tatsache verursacht, dass D8 OOP ist, sodass jetzt eine Unmenge von Daten angezeigt werden muss. Ich sehe also nicht, wie es besser werden kann, da es ein JS ist, das all diese strukturierten Daten wirklich wiedergibt.

Antworten:

23

Neben der in der Frage erwähnten Methode settings.php gibt es zwei weitere Möglichkeiten, wie andere Benutzer die maximalen Ausgangspegel festlegen können:

  1. Erstelle eine /modules/contrib/devel/kint/kint/config.phpDatei und füge die Zeile hinzu / $_kintSettings['maxLevels'] = 3;ändere sie (von @mdrummond auf Slack)

  2. Fügen Sie in einer Vorverarbeitungsfunktion Folgendes hinzu: (von @thpoul on Slack)

    kint_require();
    Kint::$maxLevels = 3;
  3. Achten Sie darauf, niemals auf das +Zeichen zu klicken , das den gesamten Baum zeigt. Klicken Sie stattdessen auf den Block. Sie können auf den Rechtspfeil klicken, um die Ausgabe in einem neuen Fenster zur einfacheren Anzeige zu öffnen (z. B. wenn sich die Ausgabe in einem Block befindet). (von @cwightrun auf Slack)

  4. Erstellen Sie anstelle von kint () eine Vorverarbeitungsfunktion und verwenden Sie einen Debugger, um die Variablen zu untersuchen. (von @danny_englander auf Slack)

  5. Übergeben Sie kint () eine bestimmte Variable, anstatt sie durch den gesamten Baum rollen zu lassen ( von @No Sssweat unten ).

  6. Wenn Sie nur wissen möchten , welche Variablen vorhanden sind, können Sie die Tasten durch Ausführen einer {% for key, value in _context %}Schleife anzeigen ( von @mortendk unten ).

chrisshattuck
quelle
Sollte auch Caseys Antwort von hier hinzufügen: drupal.stackexchange.com/a/214713/28813
Eric Steinborn
1
"Achten Sie darauf, niemals auf das + Zeichen zu klicken, das den gesamten Baum anzeigt" - Vielen Dank! Ich habe auf das Pluszeichen geklickt, weil es das Symbol für Erweitern ist. Jetzt weiß ich :-)
tanc
kint_require(); Kint::$maxLevels = 3;in Ihrer Pre-Process-Funktion ist GOLD . Vielen Dank! Ermöglicht das Einstellen beliebiger Pegel nach Bedarf. Verwenden Sie es einfach jetzt, um Sachen mit 2 Ebenen zu entleeren und dann sofort danach ein anderes Objekt mit 5 Ebenen zu entleeren.
Will
6

Kint ist nicht die einzige Bibliothek, die Sie zum Debbuggen von Variablen und Zweigvorlagen verwenden können.

Ich schlage vor, Symfony Var-Dumper zu verwenden , da IMHO eine der leistungsstärksten Bibliotheken zum Debuggen von Variablen ist. Symfony Var-Dumper ist in die neueste Version des Entwicklungsmoduls integriert (siehe dieses Problem in der Entwicklungswarteschlange Hinzufügen einer grundlegenden Symfony Var-Dumper-Integration ).

Zur Verwendung mit Var-Dumper mit Devel

  • Laden Sie das Entwicklungsmodul herunter und installieren Sie es
  • installiere var-dumper via composer ( composer require symfony/var-dumper)
  • Gehe zur Seite mit den Entwicklereinstellungen und setze var-dumper als Standard-Dumper
  • Verwenden Sie {{ devel_dump() }}oder {{ kpr() }}oder {{ dpm() }}anstelle von {{kint ()}} für Debug-Variablen in Zweigvorlagen
Marco
quelle
2

Hier ist ein weiterer Tipp:

Anstatt die Funktion zu verwenden, {{ kint() }}die alles zurückgibt, können Sie durch Übergeben der benötigten Variablen spezifischer vorgehen. Somit wird es schneller geladen.

Beispiel: In node - [type] .html.twig können Sie die Inhaltsvariable an kint übergeben:

{{ kint(content) }}

Wenn Sie den Namen des Feldes kennen, können Sie noch genauer sein:

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

Dadurch werden nur die Werte des Feldnamens zurückgegeben.

Kein Sssweat
quelle
2

Anstatt Kint zu verwenden, können Sie diesen kleinen Trick auch ausführen, um eine Vorstellung davon zu bekommen, was sich dort befindet

node.html.twig

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

Ja, es gibt nicht all die Liebe, die Kint dir zeigen will, aber zumindest bekommst du die Namen usw. raus

mortendk
quelle
0

Wenn die HTML-Ansicht nicht abgerufen werden kann oder die Kint- Ausgabe zu langsam ist .

Ich werde die Variable serialisieren und mit speichern

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

Dann kopiere ich es auf unserialize.com und wähle Krumo display ....

Jimmy Ko
quelle
Ich will nur Krumo für D8
Felix Eve
-2

Das Hinzufügen $GLOBALS['_kint_settings']['maxLevels'] = 4;in Ihrer settings.local.php sollte den Trick tun. Fühlen Sie sich frei, die Anzahl der Ebenen hier zu ändern.

Casey Wight
quelle
3
Dies funktioniert bei mir in Drupal 8.2 nicht, da $GLOBALS['_kint_settings']['maxLevels']in settings.local.php durch den Standardwert in /modules/contrib/devel/kint/kint/config.php überschrieben wird .
Philipp Michael
Ja, config.default.php macht keinen Sinn, da es alles überschreibt, was Sie als $ GLOBALS angegeben haben. Sie können es also entweder in kint config ändern oder diesen Wert in config löschen und als global angeben, damit es funktioniert.
Marko Blazekovic