모든 WP 코드가 공개 코드는 아닙니다
당신이 공개 뭔가를 발표하려고한다면, kovshenin의 모든 것 말한 완벽하게 유효합니다.
자신이나 회사의 개인 코드를 작성하려는 경우 상황이 다릅니다.
외부 객체 캐시는 어떠한 경우에도 큰 이점입니다
외부 영구 객체 캐시를 설정하는 것이 좋습니다. .
트랜시버와 MySQL에 대한 kovshenin의 답변에서 말한 모든 것은 매우 사실이며 WP 자체와 많은 플러그인이 객체 캐시를 사용한다는 것을 고려할 때 성능 향상이 있습니다. Redis 또는 Memcached와 같은 최신 캐시 시스템.
캐시 된 값이 없을 수도 있습니다.
또한 외부 개체 캐시는 신뢰할 수 없습니다 . 과도 현상이 있다는 사실에 의존해서는 안됩니다. 캐시 된 위치가 아닌 경우 캐시가 작동하는지 확인 해야 합니다.
캐시는 저장되지 않고 캐시는 캐시입니다.
선택적으로 캐시 사용
이 예를보십시오 :
function my_get_some_value($key) {
// by default no cache when debug and if no external object_cache
$defUse = ! (defined('WP_DEBUG') && WP_DEBUG) && wp_using_ext_object_cache();
// make the usage of cache filterable
$useCache = apply_filters('my_use_cache', $defUse);
// return cached value if any
if ($useCache && ($cached = get_transient($key))) {
return $cached;
}
// no cached value, make sure your code works with no cache
$value = my_get_some_value_in_some_expensive_way();
// set cache, if allowed
$useCache and set_transient($key, $value, HOUR_IN_SECONDS);
return $value;
}
이 같은 코드를 사용하면, 개인 사이트, 사이트의 성능을 향상시킬 수있는 많은 당신은 많은 사용자가 특히.
참고 :
- 기본적으로 디버그가 켜져 있으면 캐시가 사용되지 않으므로 개발 환경에서 캐시가 사용되기를 바랍니다. 나를 믿어, 캐시는 디버그를 지옥으로 만들 수있어.
- 기본적으로 WP가 외부 오브젝트 캐시를 사용하도록 설정되지 않은 경우에도 캐시가 사용되지 않습니다. 이는 MySQL을 사용할 때 일시적인 기능을 사용하지 않기 때문에 MySQL과 관련된 모든 문제가 존재하지 않음을 의미합니다. 아마도 더 쉬운 대안은 함수 를 사용하는
wp_cache_*
것입니다. 것이므로 외부 캐시가 설정되어 있지 않으면 캐시는 메모리에서 발생하며 데이터베이스는 관여하지 않습니다.
- 캐시 사용은 필터링이 가능하여 발생할 수있는 일부 경우를 처리 할 수 있습니다.
캐시가없는 경우 웹 스케일 없음
캐시의 속도 문제를 해결하려고 시도해서는 안됩니다. 속도 문제가있는 경우 코드를 다시 생각해야합니다.
그러나 웹 스케일로 웹 사이트를 확장 하려면 캐시가 필요합니다. .
컨텍스트 인식 캐시는 여러 번 (항상 그런 것은 아님) 단편적인 전체 페이지 캐싱보다 훨씬 유연하고 적합합니다.
당신의 질문:
여기서 Transient API를 사용해야합니까?
때에 따라 다르지 .
코드가 많은 리소스를 소비하고 있습니까? 그렇지 않은 경우 캐시가 필요하지 않을 수 있습니다. 말했듯이 속도의 문제가 아닙니다. 코드가 빠르게 실행되지만 몇 명의 사용자를 위해 많은 CPU와 메모리가 필요한 경우 ... 100 명 또는 1000 명의 동시 사용자가있는 경우 어떻게됩니까?
캐시가 좋은 생각이라면 ..
... 공용 코드입니다 : 아마도 no . 위의 예제와 같이 선택적으로 캐시하는 것을 고려할 수 있지만 일반적으로 그러한 결정을 구현 자에게 맡기는 것이 좋습니다.
... 그리고 개인 코드입니다 : 아마도 yes 입니다. 그러나 개인 코드의 경우에도 선택적으로 캐시하는 것이 여전히 좋은 예입니다 (예 : 디버그).
어쨌든이 wp_cache_*
기능을 사용하면 데이터베이스를 오염시킬 위험없이 캐시에 액세스 할 수 있습니다.
Transient API를 사용하여 $ related_posts 배열 또는 $ html_output 문자열을 캐시해야합니까?
그것은 많은 것들에 달려 있습니다. 줄이 얼마나 큽니까? 어떤 외부 캐시를 사용하고 있습니까? 게시물을 캐시하려는 경우 ID를 배열로 저장하는 것이 좋습니다 .ID로 적절한 수의 게시물을 쿼리하는 것은 매우 빠릅니다.
최종 노트
일시적 API는 아마도 WordPress의 가장 좋은 것 중 하나 일 것입니다. 모든 종류의 캐시 시스템에서 찾을 수있는 플러그인 덕분에이 소프트웨어는 여러 가지 소프트웨어에서 간단하고 간단한 API가되었습니다.
WordPress 외부에서는 여러 가지 다른 캐싱 시스템을 사용하여 즉시 사용할 수 있으며 노력없이 한 시스템에서 다른 시스템으로 전환 할 수있는 추상화가 매우 어렵습니다.
WordPress가 다른 최신 것보다 낫다는 말은 거의 들리지 않지만 임시 API는 WordPress에서 작업하지 않을 때 놓칠 수있는 몇 가지 중 하나입니다.
확실히 캐시는 어렵고 코드 문제를 해결하지 못하며 은총 알이 아니지만 트래픽이 많은 사이트를 구축 해야 합니다.
캐시를 수행하기 위해 최적화되지 않은 MySQL 테이블을 사용하는 WordPress 아이디어는 미쳤지 만 기본적으로 WordPress 때문에 캐시에서 멀리하는 것이 좋습니다.
작동 방식을 이해 한 다음 선택하십시오.