특정 블록에 대한 캐시 비활성화


9

뷰에서 생성 된 페이지를 새로 고칠 때마다 업데이트해야하는 특정 블록을 제외하고 익명의 사용자를위한 Drupal 8 캐싱 메커니즘의 이점을 계속 활용하고 싶습니다.

기술적으로 가능합니까? 어떻게?


MPD에서 언급했듯이 최대 연령 설정을 사용하십시오. 또한 블록 편집 양식의 UI를 통해이 작업을 수행 할 수도 있습니다.

나는이 문제도 가지고 있습니다-Drupal은 이것을 자동으로 처리하지 않습니다. 캐싱은 좋지만 Drupal은 동적 인 웹 사이트를위한 것입니다.
James

답변:


1

해당 조회수는 무엇을 표시합니까?

D8에는 캐시 태그와 컨텍스트가있어 변경 사항이있을 경우 블록을 자동으로 무효화합니다.

따라서 노드 목록이있는 경우 노드를 추가하거나 업데이트 할 때마다 해당 블록이 업데이트되지만 그때까지 캐시 된 버전이 사용됩니다. 모든 페이지를 다시 작성하는 것보다 훨씬 낫습니다.

또한 페이지 캐시와 함께 작동하며 해당 페이지도 자동으로 업데이트됩니다.

수동 구성 없이도 많은 것들이 즉시 캐싱 작업수행 합니다.

편집 (댓글에 해당) :

랜덤 정렬 플러그인으로 랜덤? 그러면 해당 블록을 캐시 할 수없는 것으로 자동 표시해야합니다. 그러나 이는 페이지 캐시 모듈에 영향을 미치지 않습니다. 이제 새로운 스마트 캐시 / 동적 페이지 캐시 모듈이 있지만 다음 베타 버전 (또는 RC!)에만 있습니다. 결과적으로 나머지 페이지를 캐시하고 해당 부분을 빌드 할 수 있습니다.

그러나 이와 같은 경우는 아마도 자바 스크립트를 사용하여 구현하는 것이 가장 좋습니다. 몇 개의 노드 만있는 경우 기본적으로 숨겨져 있고 노드 중 하나만 임의로 표시 할 수 있습니다. 또는 임의의 광고를 반환하는 자바 스크립트를 사용하여 URL을 요청하거나 각각 광고를 반환하는 임의의 N URL을 방문하는 것이 좋습니다 (예 : URL 목록을 반환 한 후 그 중 하나를 선택하여 이미지 URL에 대해 직접 수행 할 수도 있음) .


광고 블록을 변경하기 위해보기에서 임의의 노드를 반환합니다.
Amine

깨끗한 해결책을 위해 다음 릴리스를 기다릴 것입니다. :)
Amine

예, 무작위는 Views Random Sort 플러그인에서 비롯된 것입니다. 나는 엔터티를 목록에 넣은 브라우저 블록에서 임의의 또는 원형 기능을 가진 브라우저 레이어에서 하나를 선택하고 아약스로 결정할 수 있다는 것에 동의합니다. 그러나 일부 페이지에는 이와 같은 블록이 두 개 이상 있으며 서버 측 솔루션이 가장 적합합니다.
아민

10

이것이 커스텀 블록이라면, Cache API를 사용 하고 캐시 최대 수명 을 0으로 설정할 수 있습니다.

$build = [
 // ...
 '#cache' => [
   'max-age' => 0,
 ],
];

기존 블록 인 경우이를 렌더 배열에 추가하도록 변경할 수 있습니다.


질문에서 설명했듯이 내 블록은 Views 블록입니다. PHP / 모듈 계층에서 방해하기가 너무 복잡하다고 생각합니다.
아민

1
불행히도, 이것은 어쨌든 작동하지 않습니다 (시도했습니다). 페이지가 pagecache에서 제공되고 오래된 블록이 포함 된 것 같습니다. 하지만 여전히 조사 중입니다.
Rainer Feike
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.