Làm cách nào để tôi có thể tải kint () nhanh hơn khi gỡ lỗi các mẫu twig?


15

Tôi đã thấy khá nhiều cuộc thảo luận về cách kint () từ mô-đun Devel khó hoạt động vì nó tối đa hóa giới hạn bộ nhớ PHP và làm cho trình duyệt kéo. Tôi đã nghe một số suy nghĩ về việc cải thiện tốc độ của nó bằng cách giới hạn số lượng cấp độ. Ví dụ: trong settings.php, bạn có thể làm như sau:

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

Bất kỳ cách nào khác để cải thiện tốc độ của kint ()?


1
Vấn đề về hiệu năng được gây ra bởi thực tế là D8 là OOP nên giờ đây đã có một khối dữ liệu để hiển thị. Vì vậy, tôi không thấy làm thế nào nó có thể trở nên tốt hơn vì đó là một JS thực sự kết xuất tất cả dữ liệu có cấu trúc đó.

Câu trả lời:


23

Có hai cách khác mà người dùng khác đã đề cập để đặt mức đầu ra tối đa ngoài phương thức settings.php được đề cập trong câu hỏi, cộng với một vài ý tưởng khác bên dưới:

  1. Tạo một /modules/contrib/devel/kint/kint/config.phptệp và thêm / sửa đổi dòng $_kintSettings['maxLevels'] = 3;(bởi @mdrummond trên Slack)

  2. Trong chức năng tiền xử lý, hãy thêm vào như sau: (bởi @thpoul trên Slack)

    kint_require();
    Kint::$maxLevels = 3;
  3. Hãy chắc chắn không bao giờ nhấp vào +dấu hiệu, cho thấy toàn bộ cây. Nhấp vào khối thay thế. Bạn có thể nhấp vào mũi tên phải để mở đầu ra trong một cửa sổ mới để xem dễ dàng hơn (như khi đầu ra nằm trong một khối). (bởi @cwightrun trên Slack)

  4. Thay vì sử dụng kint (), hãy tạo hàm tiền xử lý và sử dụng trình gỡ lỗi để khám phá các biến. (bởi @danny_englander trên Slack)

  5. Truyền kint () một biến cụ thể thay vì làm cho nó cuộn qua toàn bộ cây ( bởi @No Sssweat bên dưới ).

  6. Nếu bạn chỉ cần biết biến nào tồn tại, bạn có thể xem các khóa bằng cách thực hiện một {% for key, value in _context %}vòng lặp ( bởi @mortendk bên dưới )


Cũng nên thêm câu trả lời của Casey từ đây: drupal.stackexchange.com/a/214713/28813
Eric Steinborn

1
"Hãy chắc chắn không bao giờ nhấp vào dấu +, hiển thị toàn bộ cây" - Cảm ơn bạn! Tôi đã nhấp vào dấu 'cộng' bởi vì, tốt, đó là biểu tượng để mở rộng. Bây giờ tôi biết :-)
tanc

kint_require(); Kint::$maxLevels = 3;trong chức năng tiền xử lý của bạn là VÀNG . Cảm ơn bạn! Cho phép bạn đặt các mức tùy ý khi cần thiết. Chỉ cần sử dụng nó ngay bây giờ để kết xuất công cụ với 2 cấp độ và sau đó ngay lập tức kết xuất một đối tượng khác với 5 cấp độ.
Sẽ

6

Kint không phải là thư viện duy nhất mà bạn có thể sử dụng để gỡ lỗi các biến và mẫu twig.

Tôi đề nghị sử dụng Symfony var-dumper rằng IMHO là một trong những lib mạnh nhất để gỡ lỗi các biến. Symfony var-dumper được tích hợp với phiên bản mới nhất của mô-đun phát triển (xem vấn đề này trong hàng đợi vấn đề phát triển Thêm một tích hợp var-dumper symfony cơ bản )

Để sử dụng var-dumper với devel

  • tải về và cài đặt mô-đun phát
  • cài đặt var-dumper thông qua trình soạn thảo ( composer require symfony/var-dumper)
  • đi đến trang cài đặt devel và đặt var-dumper làm dumper mặc định
  • sử dụng {{ devel_dump() }}hoặc {{ kpr() }}hoặc {{ dpm() }}thay vì {{Kint ()}} cho các biến debug trong các mẫu cành lá

2

Đây là một mẹo khác:

Thay vì sử dụng {{ kint() }}sẽ trả về mọi thứ, bạn có thể cụ thể hơn bằng cách chuyển biến mà bạn cần; do đó, nó sẽ tải nhanh hơn.

Ví dụ: Trong nút - [type] .html.twig bạn có thể truyền biến nội dung cho kint:

{{ kint(content) }}

Nếu bạn biết tên của trường, bạn có thể cụ thể hơn nữa:

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

Điều này sẽ chỉ trả về (các) giá trị của tên trường.


2

thay vì sử dụng kint, bạn có thể thực hiện thủ thuật nhỏ này thay vì chỉ để có ý tưởng về những gì trong đó

node.html.twig

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

vâng, nó không mang lại tất cả tình yêu mà kint muốn cho bạn thấy, nhưng ít nhất bạn cũng có được những cái tên, v.v.


0

Khi không thể có được chế độ xem HTML hoặc quá chậm để tải đầu ra kint .

Tôi sẽ tuần tự hóa biến và lưu nó với

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

Sau đó, tôi sẽ sao chép nó vào unserialize.com và chọn màn hình Krumo ....


Tôi chỉ muốn Krumo cho D8
Felix Eve

-2

Thêm $GLOBALS['_kint_settings']['maxLevels'] = 4;vào settings.local.php của bạn sẽ thực hiện thủ thuật. Hãy thay đổi số lượng các cấp ở đây.


3
Điều này không hoạt động với tôi trong Drupal 8.2, vì $GLOBALS['_kint_settings']['maxLevels']trong settings.local.php được ghi đè bằng giá trị mặc định trong /modules/contrib/devel/kint/kint/config.php .
Philipp Michael

Có config.default.php không có nghĩa là nó sẽ ghi đè bất cứ thứ gì bạn đặt là $ GLOBALS, vì vậy bạn có thể thay đổi nó trong kint config hoặc xóa giá trị đó trong cấu hình và đặt nó thành toàn cục để làm cho nó hoạt động.
Marko Blazekovic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.