나뭇 가지 템플릿을 디버깅 할 때 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 메소드 외에도 다른 사용자가 최대 출력 레벨을 설정하기 위해 언급 한 다른 두 가지 방법이 있으며 아래에 몇 가지 다른 아이디어가 있습니다.

  1. 크리에이트 /modules/contrib/devel/kint/kint/config.php파일을 추가합니다 / 줄을 수정 $_kintSettings['maxLevels'] = 3;(슬랙에 @mdrummond에 의해)

  2. 전처리 기능에서 다음을 추가하십시오.

    kint_require();
    Kint::$maxLevels = 3;
  3. +전체 트리를 표시하는 표시를 클릭하지 마십시오 . 대신 블록을 클릭하십시오. 오른쪽 화살표를 클릭하면 쉽게 볼 수 있도록 새 창에서 출력을 열 수 있습니다 (예 : 출력이 블록에있는 경우). (슬랙에 @cwightrun에 의해)

  4. kint ()를 사용하는 대신 전처리 함수를 작성하고 디버거를 사용하여 변수를 탐색하십시오. (슬랙에 @danny_englander에 의해)

  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는 변수 및 나뭇 가지 템플릿을 디버깅하는 데 사용할 수있는 유일한 라이브러리는 아닙니다.

IMHO는 변수 디버깅을위한 가장 강력한 라이브러리 중 하나라는 Symfony var-dumper 를 사용하는 것이 좋습니다 . 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() }}모든 것을 반환하는 대신 필요한 변수를 전달하여 더 구체적으로 지정할 수 있습니다. 따라서 더 빨리로드됩니다.

예를 들어 : 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>

네, 그것은 킨트가 당신에게 보여주고 싶은 모든 사랑을주지 않지만 적어도 당신은 이름 등을 얻습니다.


0

HTML보기를 얻을 수 없거나 kint 출력 을로드하기에는 너무 느립니다 .

변수를 직렬화하고 저장합니다

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

그런 다음 unserialize.com에 복사 하고 Krumo 디스플레이를 선택 합니다 ....


난 그냥 D8에 Krumo를 원합니다
Felix Eve

-2

$GLOBALS['_kint_settings']['maxLevels'] = 4;settings.local.php에 추가 하면 트릭을 수행해야합니다. 여기에서 레벨 수를 자유롭게 변경하십시오.


3
때문에, 드루팔 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.