小枝テンプレートをデバッグするときに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であるため、どのように改善できるかわかりません。

回答:


23

質問で言及されたsettings.phpメソッドに加えて、他のユーザーが最大出力レベルを設定するために言及した他の2つの方法と、以下のいくつかの他のアイデアがあります。

  1. /modules/contrib/devel/kint/kint/config.phpファイルを作成し、行を追加/変更します$_kintSettings['maxLevels'] = 3;(Slackの@mdrummondによる)

  2. 前処理関数で、次を追加します(by Slackの@thpoulによる)

    kint_require();
    Kint::$maxLevels = 3;
  3. +ツリー全体を示す記号をクリックしないでください。代わりにブロックをクリックしてください。右矢印をクリックすると、出力が新しいウィンドウで開き、表示が見やすくなります(出力がブロック内にある場合など)。(Slackの@cwightrunによる)

  4. kint()を使用する代わりに、プリプロセス関数を作成し、デバッガーを使用して変数を探索します。(Slackの@danny_englanderによる)

  5. ツリー全体をロールバックするのではなく、特定の変数をkint()に渡します下の@No Sssweatによって)。

  6. 存在する変数を知る必要がある場合は、{% for key, value in _context %}ループを実行することでキーを表示できます(以下の@mortendkによる


ここからケイシーの答えも追加する必要があります:drupal.stackexchange.com/a/214713/28813
Eric

1
「+記号をクリックしないでください。ツリー全体が表示されます」-ありがとう!「プラス」記号をクリックしていたのは、それが拡張のシンボルだからです。今私は知っている:-)
tanc

kint_require(); Kint::$maxLevels = 3;プリプロセス関数ではGOLDです。ありがとうございました!必要に応じて任意のレベルを設定できます。今それを使用して、2つのレベルを持つものをダンプし、その後すぐに5つのレベルを持つ別のオブジェクトをダンプします。
ウィル

6

変数と小枝テンプレートのデバッグに使用できるライブラリはKintだけではありません。

私は、Symfony var-dumperを使用して、IMHOが変数をデバッグするための最も強力なライブラリの1つであることをお勧めします。symfony var-dumperは、develモジュールの最新バージョンと統合されています(develの問題キューでこの問題を参照してください基本的なsymfony var-dumper統合を追加してください

develでvar-dumperを使用する場合

  • 開発モジュールをダウンロードしてインストールする
  • composerを介してvar-dumperをインストールします(composer require symfony/var-dumper
  • 開発設定ページに移動し、var-dumperをデフォルトのダンパーとして設定します
  • 使用{{ devel_dump() }}または{{ kpr() }}または{{ dpm() }}小枝テンプレートにデバッグ変数の代わりの{{KINT()}}

2

別のヒントを次に示します。

代わりに {{ kint() }}whichてすべてを返す必要な変数を渡すことでより具体的にすることができます。したがって、より高速にロードされます。

例:node-[type] .html.twigでは、コンテンツ変数を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ディスプレイを選択します。


D8にクルモが欲しい
Felix Eve

-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のデフォルト値で上書きされるためです。
フィリップマイケル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.