ฉันจะทำให้ kint () โหลดเร็วขึ้นได้อย่างไรเมื่อทำการดีบั๊กแม่แบบกิ่งไม้?


15

ฉันได้เห็นการถกเถียงกันเล็กน้อยเกี่ยวกับวิธีการใช้ kint () จากโมดูล Devel ยากที่จะทำงานด้วยเพราะมันมีขีด จำกัด สูงสุดของหน่วยความจำ 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 ที่กล่าวถึงในคำถามรวมถึงแนวคิดอื่น ๆ สองด้านล่าง:

  1. สร้าง/modules/contrib/devel/kint/kint/config.phpไฟล์และเพิ่ม / แก้ไขบรรทัด$_kintSettings['maxLevels'] = 3;(โดย @mdrummond บน Slack)

  2. ในฟังก์ชั่น preprocess เพิ่มต่อไปนี้: (โดย @thpoul บน Slack)

    kint_require();
    Kint::$maxLevels = 3;
  3. อย่าลืมคลิกที่+เครื่องหมายซึ่งจะแสดงต้นไม้ทั้งหมด คลิกบล็อกแทน คุณสามารถคลิกลูกศรขวาเพื่อเปิดเอาต์พุตในหน้าต่างใหม่เพื่อให้ดูง่ายขึ้น (เช่นเมื่อเอาต์พุตอยู่ในบล็อก) (โดย @cwightrun บน Slack)

  4. แทนที่จะใช้ kint () สร้างฟังก์ชัน preprocess และใช้ดีบักเกอร์เพื่อสำรวจตัวแปร (โดย @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;ใน preprocess ของฟังก์ชั่นGOLD ขอขอบคุณ! ช่วยให้คุณกำหนดระดับความต้องการได้ตามต้องการ เพียงใช้ตอนนี้เพื่อถ่ายโอนข้อมูลที่มี 2 ระดับจากนั้นก็ทำการถ่ายโอนวัตถุที่มี 5 ระดับทันที
จะ

6

Kint ไม่ใช่ไลบรารีเดียวที่คุณสามารถใช้สำหรับการดีบักตัวแปรและเทมเพลตกิ่งไม้

ฉันแนะนำให้ใช้Symfony var-dumperที่ IMHO เป็นหนึ่งใน lib ที่ทรงพลังที่สุดสำหรับการดีบักตัวแปร Symfony var-dumper ถูกรวมเข้ากับโมดูล devel รุ่นล่าสุด (ดูปัญหานี้ในคิวปัญหา devel เพิ่มการรวม Symfony var-dumper พื้นฐาน )

สำหรับการใช้งาน var-dumper กับ devel

  • ดาวน์โหลดและติดตั้งโมดูล devel
  • ติดตั้ง var-dumper ผ่านผู้แต่ง ( composer require symfony/var-dumper)
  • ไปที่หน้าการตั้งค่า devel และตั้งค่า var-dumper เป็น dumper เริ่มต้น
  • ใช้{{ devel_dump() }}หรือ{{ kpr() }}หรือ{{ dpm() }}แทน {{Kint ()}} สำหรับตัวแปรการแก้ปัญหาในแม่แบบกิ่ง

2

นี่คือเคล็ดลับอื่น:

แทนที่จะใช้{{ kint() }}ซึ่งจะส่งคืนทุกสิ่งคุณสามารถเฉพาะเจาะจงมากขึ้นโดยส่งผ่านตัวแปรที่คุณต้องการ ดังนั้นมันจะโหลดเร็วขึ้น

ตัวอย่างเช่น: ในโหนด - [type] .html.twigคุณสามารถส่งผ่านตัวแปรเนื้อหาไปยัง kint:

{{ kint(content) }}

หากคุณรู้ชื่อของฟิลด์คุณสามารถเจาะจงได้มากขึ้น:

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

สิ่งนี้จะคืนค่าชื่อฟิลด์เท่านั้น


2

แทนที่จะใช้คินต์คุณสามารถทำกลอุบายเล็ก ๆ น้อย ๆ นี้แทนเพื่อรับทราบว่ามีอะไรอยู่ในนั้น

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 ....


ฉันแค่ต้องการ 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
Philipp Michael

ใช่ config.default.php ไม่เหมาะสมว่าจะแทนที่สิ่งใดก็ตามที่คุณใส่เป็น $ GLOBALS ดังนั้นคุณสามารถเปลี่ยนเป็น kint config หรือลบค่านั้นใน config และทำให้มันเป็นแบบโกลบอลเพื่อให้มันทำงานได้
Marko Blazekovic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.