¿Cómo puedo hacer que kint () se cargue más rápido al depurar plantillas de ramita?


15

He visto bastante discusión sobre cómo es difícil trabajar con kint () del módulo Devel porque maximiza los límites de memoria de PHP y hace que el navegador se arrastre. He escuchado algunas ideas sobre cómo mejorar su velocidad limitando el número de niveles. Por ejemplo, en settings.php, puede hacer lo siguiente:

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

¿Alguna otra forma de mejorar la velocidad de kint ()?


1
El problema de rendimiento es causado por el hecho de que D8 es OOP, por lo que ahora hay una carga de datos para mostrar. Así que no veo cómo puede mejorar, ya que es un JS que realmente representa todos esos datos estructurados.

Respuestas:


23

Hay otras dos formas que otros usuarios han mencionado para establecer los niveles de salida máximos además del método settings.php mencionado en la pregunta, además de otras ideas a continuación:

  1. Cree un /modules/contrib/devel/kint/kint/config.phparchivo y agregue / modifique la línea $_kintSettings['maxLevels'] = 3;(por @mdrummond en Slack)

  2. En una función de preproceso, agregue lo siguiente: (por @thpoul en Slack)

    kint_require();
    Kint::$maxLevels = 3;
  3. Asegúrese de nunca hacer clic en el +signo, que muestra todo el árbol. Haga clic en el bloque en su lugar. Puede hacer clic en la flecha hacia la derecha para abrir la salida en una nueva ventana para verla más fácilmente (como cuando la salida está en un bloque). (por @cwightrun en Slack)

  4. En lugar de usar kint (), cree una función de preproceso y use un depurador para explorar las variables. (por @danny_englander en Slack)

  5. Pase kint () una variable específica en lugar de hacerlo rodar por todo el árbol ( por @No Sssweat a continuación ).

  6. Si solo necesita saber qué variables existen, puede ver las claves haciendo un {% for key, value in _context %}bucle ( por @mortendk a continuación )


También debería agregar la respuesta de Casey desde aquí: drupal.stackexchange.com/a/214713/28813
Eric Steinborn

1
"Asegúrese de nunca hacer clic en el signo +, que muestra todo el árbol" - ¡Gracias! Estaba haciendo clic en el signo 'más' porque, bueno, es el símbolo para expandir. Ahora lo sé :-)
tanc

kint_require(); Kint::$maxLevels = 3;en su función de preproceso es ORO . ¡Gracias! Le permite establecer niveles arbitrarios según sea necesario. Simplemente usándolo ahora para volcar cosas con 2 niveles y luego inmediatamente volcar un objeto diferente con 5 niveles.
Será el

6

Kint no es la única biblioteca que puede usar para depurar variables y plantillas de ramitas.

Sugiero usar Symfony var-dumper que, en mi humilde opinión, es una de las bibliotecas más potentes para depurar variables. Symfony var-dumper está integrado con la última versión del módulo de desarrollo (consulte este problema en la cola de problemas de desarrollo Agregue una integración básica de Symfony var-dumper )

Para usar var-dumper con desarrollo

  • descargar e instalar el módulo de desarrollo
  • instalar var-dumper a través del compositor ( composer require symfony/var-dumper)
  • vaya a la página de configuración de desarrollo y configure var-dumper como el dumper predeterminado
  • utilizar {{ devel_dump() }}o {{ kpr() }}, o {{ dpm() }}en lugar de {{Kint ()}} para las variables de depuración en las plantillas ramita

2

Aquí hay otro consejo:

En lugar de usar el {{ kint() }}que devolverá todo, puede ser más específico al pasar la variable que necesita; por lo tanto, se cargará más rápido.

Por ejemplo: en el nodo - [tipo] .html.twig puede pasar la variable de contenido a kint:

{{ kint(content) }}

Si conoce el nombre del campo, puede ser aún más específico:

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

Esto solo devolverá los valores del nombre del campo.


2

en lugar de usar kint puedes hacer este pequeño truco solo para tener una idea de lo que hay allí

node.html.twig

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

Sí, no da todo el amor que Kint quiere mostrarte, pero al menos obtienes los nombres, etc.


0

Cuando es imposible obtener la vista HTML o es demasiado lento para cargar la salida de kint .

Serializaré la variable y la guardaré con

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

Luego lo copiaré a unserialize.com y elegiré Krumo display ...


Solo quiero Krumo para D8
Felix Eve

-2

Agregar $GLOBALS['_kint_settings']['maxLevels'] = 4;en su settings.local.php debería hacer el truco. Siéntase libre de cambiar la cantidad de niveles aquí.


3
Esto no funciona para mí en Drupal 8.2, porque $GLOBALS['_kint_settings']['maxLevels']en settings.local.php se sobrescribe con el valor predeterminado en /modules/contrib/devel/kint/kint/config.php .
Philipp Michael

Sí config.default.php no tiene sentido, anulará todo lo que coloque como $ GLOBALS, por lo que puede cambiarlo en kint config o eliminar ese valor en config y ponerlo como global para que funcione.
Marko Blazekovic
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.