캐싱.
DXPR Builder 페이지는 자체 캐시 메타데이터가 있는 Drupal 필드 렌더 어레이이며, 모듈이 에디터와 라이선스 확인용으로 유지하는 몇 가지 내부 캐시가 더 있습니다. 이 페이지에서는 코드가 캐시하는 항목, 사용하는 태그와 컨텍스트, 무효화 조건, 업데이트 후 직접 비울 항목을 설명합니다.
빌더 필드
매 빌더 필드의 캐시 메타데이터는 DXPR Builder 필드 포매터가 설정합니다:
| 메타데이터 | 값 | 효과 |
|---|---|---|
| 캐시 컨텍스트 | user.roles:authenticated |
익명 방문자와 인증된 방문자는 별도의 캐시 항목을 받습니다. |
| 캐시 태그 | 엔터티 자체 태그, config:dxpr_builder.settings, config:language.entity.<langcode>(렌더링되는 언어용) |
엔터티 저장, 모듈 설정 저장, 언어 설정 변경 시 렌더링된 필드가 무효화됩니다. |
max-age |
0(인증된 모든 사용자용) |
렌더 어레이에 사용자별 drupalSettings(이메일, CSRF 토큰, 프로필)가 들어가므로, 로그인한 사용자에게는 Dynamic Page Cache가 빌더 필드를 절대 캐시하지 않습니다. |
익명 방문자에게는 필드가 일반적으로 캐시되므로, Internal Page Cache와 Dynamic Page Cache가 모듈 코드를 실행하지 않고 빌더 페이지를 제공합니다. 빌더에서 저장하면 엔터티가 저장되므로, 다른 저장 때와 마찬가지로 Drupal이 엔터티의 캐시 태그를 무효화합니다.
필드에서 에디터가 켜지면 모듈이 config:dxpr_builder.settings(을)를 다시
추가합니다. Asset source가 Cloud(으)로 설정되어 있고 제품 키가 없으면
max-age(을)를 0(으)로 설정하여 모든 페이지에 제품 키 메시지가 표시되게
합니다.
모듈 자체의 관리 폼은 config:dxpr_builder.settings(을)를 명시적으로
무효화합니다. General Settings, AI, 사용자 프로필 폼,
페이지 및 사용자 템플릿 폼이 해당됩니다.
페이지 안의 뷰와 블록
블록과 뷰는 저장된 HTML에 빈 az-cms-element 플레이스홀더로 보관됩니다.
필드가 렌더링될 때 모듈이 각 블록이나 뷰를 불러와 코어 렌더러로 렌더링하고,
출력을 필드 마크업에 삽입합니다. 뷰의 라이브러리와 drupalSettings는
필드로 복사되며, 캐시 메타데이터는 페이지 렌더링 중에 만들어진 다른 렌더
어레이와 마찬가지로 렌더러를 통해 전달됩니다.
따라서 뷰의 캐시 태그 중 하나가 무효화되기 전까지는 뷰 행이 캐시된 필드 안에 유지됩니다. 시간 기반 캐싱을 사용하는 뷰는 전체 수명 동안 오래된 행을 유지합니다. 방문자에게 오래된 행이 표시되면:
- 뷰를 열고 Advanced(을)를 펼쳐 Caching(을)를 Tag based(으)로 설정하세요. None(은)는 Dynamic Page Cache를 중단하지만, Internal Page Cache는 익명 방문자용으로 전체 페이지를 계속 보관합니다.
- 뷰를 저장하세요. 어떤 뷰를 저장해도
config:view_list(이)가 무효화되며, 에디터용 뷰 목록이 비워집니다. - 모든 캐시를 지우세요.
에디터에서는 추가하거나 변경한 블록이나 뷰를 /dxpr_builder/ajax(을)를 통해
가져옵니다. 모듈은 해당 응답을 캐시하지 않습니다.
내부 캐시
모든 항목은 기본 캐시 빈(cache.default)에 있습니다. 요소 피커
캐시에는 dxpr_builder:cms_elements 태그와 나열하는 엔터티 유형의 목록 캐시
태그가 있어, 해당 엔터티가 바뀌면 스스로 비워집니다.
| 캐시 ID | 내용 | 무효화 조건 |
|---|---|---|
dxpr_builder:cms_elements_blocks, dxpr_builder:cms_block_categories |
요소 피커용 블록 목록과 블록 카테고리 | 콘텐츠 블록이나 웹폼 저장 또는 삭제(block_content_list, 웹폼 목록 태그), 어떤 모듈이든 제거 시 항목 삭제, drush cr |
dxpr_builder:cms_disallowed_elements:<uid>:<roles hash> |
현재 사용자가 사용할 수 없는 블록 | 같은 태그에 사용자의 각 역할별 config:user.role.<role> 추가 |
dxpr_builder:cms_elements_views, dxpr_builder:cms_view_elements_settings, dxpr_builder:cms_views_tags |
에디터용 뷰 디스플레이, 설정, 식별자 | 뷰 저장, 추가, 삭제(config:view_list), drush cr |
dxpr_builder:button_styles |
Button 요소의 버튼 스타일 | 다음 태그: dxpr_builder:cms_elements, drush cr |
dxpr_builder_license_info |
라이선스 상태 호출 결과 | 인증된 경우 24시간, 아니면 30분 후 만료(LICENSE_CHECK_INTERVAL, LICENSE_NOT_AUTHORIZED_INTERVAL). 사이트가 라이선스 서버에 사용자 변경을 전송하면 무효화됨 |
dxpr_builder_license_users |
라이선스 서버의 에디터 목록 | 24시간 후 만료. 사이트가 라이선스 서버에 사용자 변경을 전송하면 무효화됨 |
dxpr_builder_blacklisted |
도메인 차단 목록 결과 | 1시간 후 만료. 도메인이 차단된 동안은 1분 후 만료 |
dxpr_builder:jwt_decoded:<sha256 of the key> |
디코딩된 제품 키. 키마다 하나의 항목 | 다음 태그: config:dxpr_builder.settings |
테마 유틸리티 클래스(테마 .info.yml의 dxpr_builder_classes)는 Drupal의
캐시된 테마 정보에서 오므로, 변경 후 에디터에 반영하려면 drush cr(이)가
필요합니다. 아이콘 세트 파일(*.dxpr_icon_sets.yml)은 에디터 페이지가 열릴
때마다 읽지만, 파일이 지정하는 라이브러리에는 다른 새 라이브러리와 마찬가지로
drush cr(이)가 필요합니다.
에셋과 어그리게이션
여섯 에디터 스크립트는 외부(Cloud) 스크립트이거나 preprocess: FALSE(으)로
선언되므로 어그리게이션이 건드리지 않습니다. 어그리게이션은 Sortable이
포함된 dxpr_builder/editor.core 같은 에디터 헬퍼 라이브러리, 방문자용
파일(dxpr_builder/core, dxpr_builder/editor.frontend, elements.*
라이브러리, bootstrap_5)에는 적용됩니다. 다음 두 증상은 어그리게이션
캐시가 원인입니다:
- 업데이트 후 에디터가 깨지거나, 어그리게이션을 켰을 때만
Sortable is not defined오류가 보고됩니다. 다음 문서를 참고하세요: The editor does not appear. - 업데이트나 설정 변경 후 방문자에게 스타일이나 아이콘이 표시되지 않습니다. 다음 문서를 참고하세요: Visitors see something different.
업데이트 후 비울 항목
-
데이터베이스 업데이트를 실행한 뒤 캐시를 비우세요:
drush updb -y drush crdrush cr(은)는 빌더의 라이브러리 정의(모듈 버전과 에셋 소스 기준), 어그리게이션된 에셋 파일, 위의 내부 캐시를 다시 만듭니다. -
에디터로 빌더 페이지 하나를 열어 저장하세요. 현재 릴리스의 마크업으로 페이지가 기록되고 엔터티 태그가 무효화됩니다.
-
Varnish나 CDN 뒤에서는 빌더 페이지를 비우거나 최대 수명이 지나기를 기다리세요. 모듈은 비우기 요청을 보내지 않습니다.
방문자에게 여전히 이전 콘텐츠가 표시되면 Problems after updating 문서를 참고하세요.
다음 단계
- Performance 문서에서 방문자와 편집자 페이지의 다운로드 항목을 확인하세요.
- Architecture 문서에서 빌더 필드를 렌더링, 저장, 캐시하는 코드를 확인하세요.
- Visitors see something different 문서에서 캐시 관련 증상과 해결 방법을 확인하세요.