한 템플릿 안에서 위치랑 순서가 중요해 반드시 파트를 분리해야 하는 경우가 있다, 예를 들어
<?php
function get_cached_header($cache_key, $generate_function) { return get_memcached_cache($cache_key, $generate_function); }
wp_head();
function generate_header_1_cache() {
ob_start();
?> <link rel="icon" href="https://example.com/logo.png"></head> <?php
return ob_get_clean();
}
echo get_cached_header('header_1_cache', 'generate_header_1_cache');
?> <body <?php body_class(); ?> >
<?php
function generate_header_2_cache() {
ob_start();
do_action('generate_header');
return ob_get_clean();
}
echo get_cached_header('header_2_cache', 'generate_header_2_cache');
이런식으로, header.php템플릿을 표현하는데,
동적인 값을 생성해야 하는 wp_head();, body_class();는 캐시에서 반드시 제외해야 하고,
또한 실제 html에 표현될 순서가
wp_head();<link rel="icon" href="https://example.com/logo.png"></head>body_class();do_action('generate_header');
반드시 이렇게 되어야 하기 때문에 두 파트로 나누는 과정이 필수적이다.
물론 위의 코드도 하나의 get_cached_header()를 사용해 어느정도 효과적이긴 하지만,
이 때 꼭 두번의 memcached키를 생성하고 두 번 호출할 필요 없이 아래처럼
<?php
function generate_header_combined() {
ob_start();
?> <link rel="icon" href="https://example.com/logo.png"></head> <?php
echo '|&|';
do_action('generate_header');
return ob_get_clean();
}
$parts = explode('|&|', get_memcached_cache('header_cache', 'generate_header_combined'));
wp_head();
echo $parts[0];
?> <body <?php body_class(); ?> >
<?php
echo $parts[1];
이렇게 처리해 버리면, 기존의 header_1_cache, header_2_cache 두개의 키로 처리하던걸
header_cache 캐시키 안에서 |&|를 분리자로 사용해 하나의 캐시로 효율적으로 생성하고,
가장 비싼 호출비용도 한 번의 호출만 한 뒤, 효율적으로 php단에서 $parts = explode('|&|')로 분리자 기준으로 직접 분리한 뒤(이 작업은 호출보다 비용이 압도적으로 적다)
echo $parts[0]; 식으로 각 파트별로 필요한곳에 분산해서 쏴주면 된다.
memcached를 구현했다는건 미세한 성능까지 고려하겠다는 얘기니까 유용한 파트 캐시 기법.