Как я могу ускорить загрузку kint () при отладке шаблонов веток?

15

Я видел довольно много дискуссий о том, как трудно работать с kint () из модуля Devel, потому что он максимально ограничивает ограничения памяти PHP и делает браузер перетаскиваемым. Я слышал некоторые мысли по улучшению его скорости за счет ограничения количества уровней. Например, в файле settings.php вы можете сделать следующее:

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

Любые другие способы улучшить скорость kint ()?

chrisshattuck
источник
1
Проблема с производительностью вызвана тем фактом, что D8 является ООП, поэтому теперь требуется куча данных для отображения. Поэтому я не понимаю, как это может быть лучше, поскольку это JS, который действительно отображает все эти структурированные данные.

Ответы:

23

Есть два других способа, которые другие пользователи упомянули для установки максимальных уровней вывода в дополнение к методу settings.php, упомянутому в вопросе, а также пару других идей ниже:

  1. Создайте /modules/contrib/devel/kint/kint/config.phpфайл и добавьте / измените строку $_kintSettings['maxLevels'] = 3;(автор @mdrummond на Slack)

  2. В функцию предварительной обработки добавьте следующее: (@thpoul на Slack)

    kint_require();
    Kint::$maxLevels = 3;
  3. Никогда не нажимайте на +знак, который показывает все дерево. Вместо этого нажмите на блок. Вы можете щелкнуть стрелку вправо, чтобы открыть вывод в новом окне для более удобного просмотра (например, когда вывод находится в блоке). (автор @cwightrun в Slack)

  4. Вместо использования kint () создайте функцию предварительной обработки и используйте отладчик для исследования переменных. (автор @danny_englander в Slack)

  5. Передайте kint () определенную переменную вместо того, чтобы заставить ее катиться по всему дереву ( @No Sssweat ниже ).

  6. Если вам просто нужно знать, какие переменные существуют, вы можете просто просмотреть ключи, выполнив {% for key, value in _context %}цикл (см . @Mortendk ниже )

chrisshattuck
источник
Также следует добавить ответ Кейси отсюда: drupal.stackexchange.com/a/214713/28813
Эрик
1
«Обязательно никогда не нажимайте на знак +, который показывает все дерево» - Спасибо! Я нажимал на знак «плюс», потому что это символ расширения. Теперь я знаю :-)
Tanc
kint_require(); Kint::$maxLevels = 3;в вашей предварительной обработке функция ЗОЛОТА . Спасибо! Позволяет вам устанавливать произвольные уровни по мере необходимости. Просто используйте его сейчас, чтобы выбросить вещи с 2 уровнями, а затем сразу же после этого сбросить другой объект с 5 уровнями.
Будет
6

Kint - не единственная библиотека, которую вы можете использовать для отладки переменных и шаблонов веток.

Я предлагаю использовать Symfony var-dumper, который IMHO является одним из самых мощных библиотек для отладки переменных. Symfony var-dumper интегрирован с последней версией модуля devel (см. Эту проблему в очереди вопросов devel. Добавьте базовую интеграцию с Symfony var-dumper ).

Для использования вар-самосвал с devel

  • скачать и установить модуль devel
  • установить var-dumper через composer ( composer require symfony/var-dumper)
  • перейдите на страницу настроек devel и установите var-dumper в качестве дампера по умолчанию
  • используйте {{ devel_dump() }}или {{ kpr() }}или {{ dpm() }}вместо {{kint ()}} для отладочных переменных в шаблонах веток
марко
источник
2

Вот еще один совет:

Вместо использования {{ kint() }}которого будет возвращаться все, вы можете быть более конкретным, передавая необходимую переменную; Таким образом, он будет загружаться быстрее.

Например: В node - [type] .html.twig вы можете передать переменную содержимого в kint:

{{ kint(content) }}

Если вы знаете название поля, вы можете быть еще более конкретным:

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

Это вернет только значение (я) имени поля.

Нет Sssweat
источник
2

вместо того, чтобы использовать kint, вы можете сделать этот маленький трюк вместо того, чтобы просто понять, что там

node.html.twig

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

да, это не дает всей любви, которую хочет показать вам Кинт, но, по крайней мере, вы получаете имена и т.д.

mortendk
источник
0

Когда невозможно получить представление HTML или слишком медленно загружать вывод kint .

Я буду сериализовать переменную и сохранить ее с

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

Затем я скопирую его на unserialize.com и выберу Krumo display ....

Джимми Ко
источник
Я просто хочу Крумо для D8
Феликс Ева
-2

Добавление $GLOBALS['_kint_settings']['maxLevels'] = 4;в settings.local.php должно помочь. Не стесняйтесь менять количество уровней здесь.

Кейси Уайт
источник
3
Это не работает для меня в Drupal 8.2, потому что $GLOBALS['_kint_settings']['maxLevels']в settings.local.php перезаписывается значением по умолчанию в /modules/contrib/devel/kint/kint/config.php .
Филипп Майкл
Да, config.default.php не имеет смысла, он переопределит все, что вы указали как $ GLOBALS, так что вы можете либо изменить его в kint config, либо удалить это значение в config и установить его как глобальное, чтобы оно работало.
Марко