it-swarm-korea.com

Drupal 필터는 캐시 할 수 없습니다.

사용자 지정 필터가 많은 Drupal 7 사이트가 있습니다. 모든 것이 올바르게 작동하지만 빠르지는 않습니다.
cache_filter 테이블이 항상 비어 있기 때문에 필터 캐시 시스템이 제대로 작동하지 않는 것 같습니다. d.o에 issues 가 있습니다. 그러나 그것은 응답하지 않습니다.

2
ya.teck

캐시는 입력 형식이 사용할 수있는 경우에만 사용됩니다. 이는 입력 형식에 사용되는 입력 필터가 캐시를 비활성화하지 않음을 의미합니다.

텍스트에 입력 형식을 적용해야 할 때 호출되는 함수 check_markup () 의 코드는 다음 코드를 포함합니다.

$cache = $cache && !empty($format->cache);
$cache_id = '';
if ($cache) {
  $cache_id = $format->format . ':' . $langcode . ':' . hash('sha256', $text);
  if ($cached = cache_get($cache_id, 'cache_filter')) {
    return $cached->data;
  }
}

$cache는 함수에 전달되는 매개 변수이고 $formatfilter_format_load () 에서 반환 된 값을 포함하는 변수입니다. $format->cacheFALSE이면 필터 캐시가 사용되지 않습니다.

노드의 본문 내용의 경우 본문 내용 (및 다른 필드의 내용)을 삭제하는 데 사용되는 함수는 _ text_sanitize () 이며, check_markup()를 네 번째 매개 변수 ($cache)를 사용합니다. 기본값은 FALSE입니다. 즉, 필터가 캐시 사용 여부에 관계없이 캐시가 사용되지 않습니다.

function _text_sanitize($instance, $langcode, $item, $column) {
  // If the value uses a cacheable text format, text_field_load() precomputes
  // the sanitized string.
  if (isset($item["safe_$column"])) {
    return $item["safe_$column"];
  }
  return $instance['settings']['text_processing'] ? check_markup($item[$column], $item['format'], $langcode) : check_plain($item[$column]);
}

이것은 네 번째 매개 변수를 hook_comment_view()에 전달하는 user_comment_view () (댓글을 작성한 사용자의 서명을 필터링하는 데 사용되는 check_markup() 구현)에 의해 수행 된 작업과 다릅니다. TRUE로 설정합니다.

function user_comment_view($comment) {
  if (variable_get('user_signatures', 0) && !empty($comment->signature)) {
    // @todo This alters and replaces the original object value, so a
    //   hypothetical process of loading, viewing, and saving will Hijack the
    //   stored data. Consider renaming to $comment->signature_safe or similar
    //   here and elsewhere in Drupal 8.
    $comment->signature = check_markup($comment->signature, $comment->signature_format, '', TRUE);
  }
  else {
    $comment->signature = '';
  }
}
2
kiamlaluno

Cache_filter 테이블이 비어 있지만 memcache 또는 APC가 활성화되어 있으면 좋습니다.)

또는 kiamlaluno가 지적했듯이 필터 중 하나가 캐시를 비활성화 (예 : PHP filter))하여 해당 필터를 사용하는 전체 형식을 캐시 할 수 없도록합니다.

1
jcisio