Como faço para carregar o kint () mais rápido ao depurar modelos de galho?

15

Eu já vi muita discussão sobre como é difícil trabalhar com o kint () do módulo Devel, porque ele maximiza os limites de memória PHP e faz o navegador arrastar. Eu ouvi algumas reflexões sobre como melhorar sua velocidade limitando o número de níveis. Por exemplo, em settings.php, você pode fazer o seguinte:

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

Alguma outra maneira de melhorar a velocidade do kint ()?

chrisshattuck
fonte
1
O problema de desempenho é causado pelo fato de D8 ser OOP, portanto, agora há uma carga de dados a serem exibidos. Portanto, não vejo como isso pode melhorar, pois é um JS que realmente renderiza todos esses dados estruturados.

Respostas:

23

Existem duas outras maneiras que outros usuários mencionaram para definir os níveis máximos de saída, além do método settings.php mencionado na pergunta, além de algumas outras idéias abaixo:

  1. Crie um /modules/contrib/devel/kint/kint/config.phparquivo e adicione / modifique a linha $_kintSettings['maxLevels'] = 3;(por @mdrummond no Slack)

  2. Em uma função de pré-processo, adicione o seguinte: (por @thpoul no Slack)

    kint_require();
    Kint::$maxLevels = 3;
  3. Certifique-se de nunca clicar no +sinal, que mostra a árvore inteira. Clique no bloco. Você pode clicar na seta para a direita para abrir a saída em uma nova janela para facilitar a visualização (como quando a saída está em um bloco). (por @cwightrun no Slack)

  4. Em vez de usar kint (), crie uma função de pré-processo e use um depurador para explorar as variáveis. (por @danny_englander no Slack)

  5. Passe kint () uma variável específica em vez de fazê-la rolar por toda a árvore ( por @No Sssweat abaixo ).

  6. Se você só precisa saber quais variáveis ​​existem, basta ver as chaves fazendo um {% for key, value in _context %}loop ( por @mortendk abaixo )

chrisshattuck
fonte
Também deve adicionar a resposta de Casey a partir daqui: drupal.stackexchange.com/a/214713/28813
Eric Steinborn 27/16
1
"Certifique-se de nunca clicar no sinal +, que mostra toda a árvore" - Obrigado! Eu estava clicando no sinal de mais, porque, bem, é o símbolo para expandir. Agora eu sei :-)
tanc 26/10/16
kint_require(); Kint::$maxLevels = 3;na sua função de pré-processo é GOLD . Obrigado! Permite definir níveis arbitrários, conforme necessário. Basta usá-lo agora para despejar coisas com 2 níveis e depois imediatamente despejar um objeto diferente com 5 níveis.
Será
6

O Kint não é a única biblioteca que você pode usar para depurar variáveis ​​e modelos de galho.

Sugiro usar o var-dumper Symfony que IMHO é uma das lib mais poderosas para variáveis ​​de depuração. O Symfony var-dumper está integrado à versão mais recente do módulo devel (consulte este problema na fila de problemas do devel Adicione uma integração básica do symfony var-dumper )

Para uso com var-dumper com devel

  • faça o download e instale o módulo devel
  • instalar var-dumper via composer ( composer require symfony/var-dumper)
  • vá para a página de configurações de desenvolvimento e defina var-dumper como o dumper padrão
  • use {{ devel_dump() }}ou {{ kpr() }}ou em {{ dpm() }}vez de {{kint ()}} para variáveis ​​de depuração em modelos de galho
marco
fonte
2

Aqui está outra dica:

Em vez de usar o {{ kint() }}que retornará tudo, você pode ser mais específico passando a variável necessária; assim, ele carregará mais rápido.

Por exemplo: No nó - [type] .html.twig, você pode passar a variável de conteúdo para o kint:

{{ kint(content) }}

Se você souber o nome do campo, poderá ser ainda mais específico:

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

Isso retornará apenas o (s) valor (es) do nome do campo.

Sem suor
fonte
2

em vez de usar o kint, você pode fazer esse pequeno truque para ter uma idéia do que está lá

node.html.twig

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

sim, não dá todo o amor que o kint quer mostrar, mas pelo menos você coloca os nomes etc.

Mortendk
fonte
0

Quando é impossível obter a visualização HTML ou é muito lento para carregar a saída do kint .

Vou serializar a variável e salvá-la com

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

Então copiarei para unserialize.com e escolhi a exibição do Krumo ....

Jimmy Ko
fonte
Eu só quero o Krumo para o D8
Felix Eve
-2

Adicionando $GLOBALS['_kint_settings']['maxLevels'] = 4;em seu settings.local.php deve fazer o truque. Sinta-se livre para alterar o número de níveis aqui.

Casey Wight
fonte
3
Isso não funciona para mim no Drupal 8.2, porque $GLOBALS['_kint_settings']['maxLevels']em settings.local.php é substituído pelo valor padrão em /modules/contrib/devel/kint/kint/config.php .
Philipp Michael
Sim, config.default.php não faz sentido, substituirá qualquer coisa que você colocar como $ GLOBALS; portanto, você pode alterá-lo na configuração do kint ou excluir esse valor na configuração e colocá-lo como global para fazê-lo funcionar.
Marko Blazekovic 14/02/19