Bagaimana saya bisa membuat kint () memuat lebih cepat saat men-debug templat ranting?

15

Saya telah melihat sedikit diskusi tentang bagaimana kint () dari modul Devel sulit untuk dikerjakan karena itu memaksimalkan batas memori PHP dan membuat browser seret. Saya telah mendengar beberapa pemikiran untuk meningkatkan kecepatannya dengan membatasi jumlah level. Misalnya, di settings.php, Anda dapat melakukan hal berikut:

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

Adakah cara lain untuk meningkatkan kecepatan kint ()?

chrisshattuck
sumber
1
Masalah kinerja disebabkan oleh fakta bahwa D8 adalah OOP sehingga sekarang ada shitload data untuk ditampilkan. Jadi saya tidak melihat bagaimana itu bisa menjadi lebih baik karena ini adalah JS yang benar-benar membuat semua data terstruktur.

Jawaban:

23

Ada dua cara lain yang disebutkan oleh pengguna lain untuk mengatur tingkat output maksimal selain metode settings.php yang disebutkan dalam pertanyaan, ditambah beberapa ide lain di bawah ini:

  1. Buat /modules/contrib/devel/kint/kint/config.phpfile dan tambahkan / ubah baris $_kintSettings['maxLevels'] = 3;(dengan @mdrummond di Slack)

  2. Dalam fungsi preprocess, tambahkan berikut ini: (oleh @thpoul di Slack)

    kint_require();
    Kint::$maxLevels = 3;
  3. Pastikan untuk tidak pernah mengklik +tanda, yang menunjukkan seluruh pohon. Klik blok sebagai gantinya. Anda dapat mengklik panah kanan untuk membuka output di jendela baru agar lebih mudah dilihat (seperti ketika output berada di blok). (oleh @cwightrun di Slack)

  4. Alih-alih menggunakan kint (), buat fungsi preprocess dan gunakan debugger untuk menjelajahi variabel. (oleh @danny_englander di Slack)

  5. Lulus kint () variabel tertentu alih-alih membuatnya menggelinding melalui seluruh pohon ( dengan @Tidak Sssweat di bawah ).

  6. Jika Anda hanya perlu tahu variabel apa yang ada, Anda bisa melihat kunci dengan melakukan {% for key, value in _context %}perulangan ( oleh @mortendk di bawah )

chrisshattuck
sumber
Harus juga menambahkan jawaban Casey dari sini: drupal.stackexchange.com/a/214713/28813
Eric Steinborn
1
"Pastikan untuk tidak pernah mengklik tanda +, yang menunjukkan seluruh pohon" - Terima kasih! Saya mengklik tanda 'tambah' karena, yah, itu simbol untuk berkembang. Sekarang saya tahu :-)
tanc
kint_require(); Kint::$maxLevels = 3;dalam fungsi preproses Anda adalah EMAS . Terima kasih! Memungkinkan Anda untuk mengatur level sewenang-wenang sesuai kebutuhan. Cukup gunakan sekarang untuk membuang barang dengan 2 level dan kemudian segera membuang objek yang berbeda dengan 5 level.
Will
6

Kint bukan satu-satunya pustaka yang dapat Anda gunakan untuk debbuging variabel dan templat ranting.

Saya menyarankan untuk menggunakan Symfony var-dumper bahwa IMHO adalah salah satu lib yang paling kuat untuk variabel debug. Symfony var-dumper terintegrasi dengan versi terbaru dari devel module (lihat masalah ini dalam antrian devel issue. Tambahkan integrasi symfony var-dumper dasar )

Untuk menggunakan var-dumper dengan devel

  • unduh dan pasang modul devel
  • instal var-dumper via composer ( composer require symfony/var-dumper)
  • buka halaman pengaturan devel dan atur var-dumper sebagai dumper default
  • gunakan {{ devel_dump() }}atau {{ kpr() }}atau {{ dpm() }}bukannya {{kint ()}} untuk variabel debug di templat ranting
marco
sumber
2

Ini tip lain:

Alih-alih menggunakan {{ kint() }}yang akan mengembalikan semuanya, Anda bisa lebih spesifik dengan melewatkan variabel yang Anda butuhkan; dengan demikian, ini akan memuat lebih cepat.

Misalnya: Di simpul - [tipe] .html.twig Anda dapat meneruskan variabel konten ke kint:

{{ kint(content) }}

Jika Anda tahu nama bidangnya, Anda bisa lebih spesifik:

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

Ini hanya akan mengembalikan nilai nama bidang.

Tidak ada Sssweat
sumber
2

alih-alih menggunakan kint, Anda dapat melakukan trik kecil ini alih-alih hanya untuk mengetahui apa yang ada di sana

node.html.twig

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

ya itu tidak memberikan semua cinta yang kint ingin tunjukkan kepadamu, tapi setidaknya kamu mendapatkan nama dll

mortendk
sumber
0

Ketika tidak mungkin untuk mendapatkan tampilan HTML atau terlalu lambat untuk memuat output kint .

Saya akan membuat cerita bersambung variabel dan menyimpannya dengan

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

Kemudian saya akan menyalinnya ke unserialize.com dan memilih tampilan Krumo ....

Jimmy Ko
sumber
Saya hanya ingin Krumo untuk D8
Felix Eve
-2

Menambahkan $GLOBALS['_kint_settings']['maxLevels'] = 4;pengaturan Anda.local.php harus melakukan trik. Jangan ragu untuk mengubah jumlah level di sini.

Casey Wight
sumber
3
Ini tidak berfungsi untuk saya di Drupal 8.2, karena $GLOBALS['_kint_settings']['maxLevels']di settings.local.php ditimpa oleh nilai default di /modules/contrib/devel/kint/kint/kint/config.php .
Philipp Michael
Ya config.default.php tidak masuk akal itu akan menimpa apa pun yang Anda masukkan sebagai $ GLOBALS, jadi Anda bisa mengubahnya di kint config atau menghapus nilai itu di config dan meletakkannya sebagai global untuk membuatnya berfungsi.
Marko Blazekovic