Jak mogę przyspieszyć ładowanie kint () podczas debugowania szablonów gałązek?

15

Widziałem sporo dyskusji na temat tego, w jaki sposób kint () z modułu Devel jest trudny w obsłudze, ponieważ maksymalizuje limity pamięci PHP i powoduje przeciąganie przeglądarki. Słyszałem o przemyśleniach dotyczących poprawy jego prędkości poprzez ograniczenie liczby poziomów. Na przykład w settings.php możesz wykonać następujące czynności:

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

Jakieś inne sposoby na poprawę prędkości Kint ()?

chrisshattuck
źródło
1
Problem z wydajnością jest spowodowany faktem, że D8 jest OOP, więc teraz jest do wyświetlenia mnóstwo danych. Więc nie widzę, jak może być lepiej, ponieważ JS naprawdę renderuje wszystkie te ustrukturyzowane dane.

Odpowiedzi:

23

Istnieją dwa inne sposoby, o których wspominali inni użytkownicy, w celu ustawienia maksymalnych poziomów wyjściowych oprócz metody settings.php wspomnianej w pytaniu, a także kilka innych pomysłów poniżej:

  1. Utwórz /modules/contrib/devel/kint/kint/config.phpplik i dodaj / zmodyfikuj linię $_kintSettings['maxLevels'] = 3;(autor: @mdrummond na Slack)

  2. W funkcji wstępnego przetwarzania dodaj następujące: (autor: @thpoul na Slack)

    kint_require();
    Kint::$maxLevels = 3;
  3. Pamiętaj, aby nigdy nie klikać +znaku, który pokazuje całe drzewo. Zamiast tego kliknij blok. Możesz kliknąć strzałkę w prawo, aby otworzyć wyjście w nowym oknie w celu łatwiejszego przeglądania (np. Gdy wyjście jest w bloku). (autor: @cwightrun w serwisie Slack)

  4. Zamiast używać kint (), utwórz funkcję przetwarzania wstępnego i użyj debuggera do eksploracji zmiennych. (autor @danny_englander na Slack)

  5. Przekaż kint () określoną zmienną zamiast zmuszać ją do przejścia przez całe drzewo ( autor: @No Sssweat poniżej ).

  6. Jeśli potrzebujesz tylko wiedzieć, jakie zmienne istnieją, możesz po prostu wyświetlić klucze, wykonując {% for key, value in _context %}pętlę ( autor @mortendk poniżej )

chrisshattuck
źródło
Powinien także dodać odpowiedź Casey tutaj: drupal.stackexchange.com/a/214713/28813
Eric Steinborn
1
„Pamiętaj, aby nigdy nie klikać znaku +, który pokazuje całe drzewo” - Dziękujemy! Klikałem znak „plus”, ponieważ, no cóż, jest to symbol rozwinięcia. Teraz wiem :-)
tanc
kint_require(); Kint::$maxLevels = 3;w twojej funkcji przetwarzania wstępnego jest ZŁOTA . Dziękuję Ci! Pozwala ustawić dowolne poziomy według potrzeb. Wystarczy użyć go teraz, aby zrzucić rzeczy z 2 poziomami, a następnie natychmiast zrzucić inny obiekt z 5 poziomami.
Czy
6

Kint nie jest jedyną biblioteką, której można używać do debugowania zmiennych i szablonów gałązek.

Sugeruję użycie Symfony var-dumper, że IMHO jest jedną z najpotężniejszych bibliotek lib do debugowania zmiennych. Symfony var-dumper jest zintegrowany z najnowszą wersją modułu devel (zobacz ten problem w kolejce problemów z devel Dodaj podstawową integrację symfony var-dumper )

Do użytku z wywrotką var z wywrotką

  • pobierz i zainstaluj moduł devel
  • zainstaluj var-dumper przez composer ( composer require symfony/var-dumper)
  • przejdź do strony ustawień devel i ustaw var-dumper jako domyślny dumper
  • korzystania {{ devel_dump() }}lub {{ kpr() }}czy {{ dpm() }}zamiast {{kint ()}} dla zmiennych debugowania w szablonach gałązka
marco
źródło
2

Oto kolejna wskazówka:

Zamiast używać, {{ kint() }}który zwróci wszystko, możesz być bardziej szczegółowy, przekazując potrzebną zmienną; w ten sposób ładuje się szybciej.

Na przykład: W węźle - [typ] .html.twig możesz przekazać zmienną content do kint:

{{ kint(content) }}

Jeśli znasz nazwę pola, możesz być jeszcze bardziej szczegółowy:

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

Zwróci to tylko wartości nazw pól.

Bez sssweat
źródło
2

zamiast używać kinta, możesz zrobić tę małą sztuczkę, aby dowiedzieć się, co tam jest

node.html.twig

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

tak, to nie daje całej miłości, którą kint chce ci pokazać, ale przynajmniej wydobywasz nazwy itp

Mortendk
źródło
0

Gdy uzyskanie widoku HTML jest niemożliwe lub jest zbyt wolne, aby załadować dane wyjściowe kinta .

Zserializuję zmienną i zapiszę ją

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

Następnie skopiuję go na unserialize.com i wybiorę wyświetlanie Krumo ....

Jimmy Ko
źródło
Chcę tylko Krumo dla D8
Felix Eve
-2

Dodanie $GLOBALS['_kint_settings']['maxLevels'] = 4;ustawień.local.php powinno załatwić sprawę. Tutaj możesz zmienić liczbę poziomów.

Casey Wight
źródło
3
To nie działa dla mnie w Drupal 8.2, ponieważ $GLOBALS['_kint_settings']['maxLevels']w settings.local.php jest nadpisany wartością domyślną w /modules/contrib/devel/kint/kint/config.php .
Philipp Michael
Tak, config.default.php nie ma sensu, że zastąpi wszystko, co umieścisz jako $ GLOBALS, więc możesz to zmienić w kint config lub usunąć tę wartość w config i ustawić ją jako globalną, aby działała.
Marko Blazekovic