调试树枝模板时,如何使kint()加载更快?


15

我已经看了很多关于Devel模块中的kint()如何难以使用的讨论,因为它最大化了PHP的内存限制并导致浏览器拖拽。我听说过一些有关通过限制级别数来提高其速度的想法。例如,在settings.php中,您可以执行以下操作:

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

还有其他方法可以提高kint()的速度吗?


1
性能问题是由于D8是OOP,因此现在要显示大量数据。因此,我不知道它会如何变得更好,因为它是真正呈现所有结构化数据的JS。

Answers:


23

除了问题中提到的settings.php方法外,其他用户还提到了两种其他方法来设置最大输出级别,还有以下其他一些想法:

  1. 创建一个/modules/contrib/devel/kint/kint/config.php文件并添加/修改行$_kintSettings['maxLevels'] = 3;(通过Slack上的@mdrummond)

  2. 在预处理功能中,添加以下内容:(通过Slack上的@thpoul)

    kint_require();
    Kint::$maxLevels = 3;
  3. 确保不要单击+显示整棵树的标志。单击该块。您可以单击向右箭头在新窗口中打开输出,以便于查看(例如,当输出位于块中时)。(由@cwightrun在Slack上发布)

  4. 代替使用kint(),创建预处理函数并使用调试器来探索变量。(由@danny_englander在Slack上发布)

  5. 给kint()传递一个特定的变量,而不是使其遍历整个树(通过下面的@No Sssweat)。

  6. 如果您只需要知道存在哪些变量,则可以通过{% for key, value in _context %}循环查看键(通过下面的@mortendk


还应该从此处添加Casey的答案:drupal.stackexchange.com/a/214713/28813
Eric Steinborn

1
“请确保不要单击显示整个树的+号”-谢谢!我单击“加号”是因为它是展开符号。现在我知道了:-)
tanc

kint_require(); Kint::$maxLevels = 3;预处理函数中的GOLD。谢谢!允许您根据需要设置任意级别。现在只用它来转储2个级别的东西,然后立即转储5个级别的另一个对象。
威尔

6

Kint不是唯一可用于调试变量和树枝模板的库。

我建议使用Symfony var-dumper,IMHO是调试变量最强大的库之一。Symfony var-dumper与最新版本的devel模块集成在一起(请参阅devel问题队列中的此问题。添加基本​​的symfony var-dumper集成

配合var-dumper与devel一起使用

  • 下载并安装开发模块
  • 通过composer(composer require symfony/var-dumper)安装var-dumper
  • 转到开发设置页面并将var-dumper设置为默认转储器
  • 使用{{ devel_dump() }}{{ kpr() }}{{ dpm() }}代替{{编制品()}}在树枝模板调试变量

2

这是另一个提示:

{{ kint() }}您可以通过传递所需的变量来更加具体,而不是使用后者返回所有内容。因此,它将加载得更快。

例如:在node-[type] .html.twig中,您可以将content变量传递给kint:

{{ kint(content) }}

如果您知道该字段的名称,则可以更加具体:

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

这只会返回字段名称的值。


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>

是的,它并没有给kint想要展现的所有爱,但是至少您得到了名字等


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中的默认值覆盖了该值。
菲利普·迈克尔(Michael)

是的config.default.php没有意义,它将覆盖您放置为$ GLOBALS的所有内容,因此您可以在kint config中进行更改,也可以在config中删除该值并将其设置为global以使其起作用。
Marko Blazekovic
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.