언제 Transients API를 사용해야합니까?


16

나는 전에 Transients API를 사용해 본 적이 없으며 누군가 언제 그것을 사용 해야하는지 궁금해하고있었습니다. 코덱스 기사는 테마 개발자로서 내가 새로운 각을 설정할 수 있습니다 것을 의미 WP_Query()일시적으로; 직접 $ wpdb 쿼리에 대해서도 마찬가지라고 가정합니다 query_posts(). 과잉입니까? 그리고 / 또는 기본적으로 사용해야하는 다른 장소가 있습니까?

나는 종종 내 사이트에서 캐싱 플러그인을 사용하고 (보통 W3 Total Cache) Transients를 사용하면 플러그인의 효과를 높일 수있는 것처럼 들리지만 최선의 방법이 아닌 경우 일시적으로 모든 것을 감싸는 것을 원하지 않습니다.


모두 감사합니다. 하나 이상의 답변을 '솔루션'으로 표시 할 수 있기를 바랍니다. 좋은 정보, 많은 감사합니다!
Michelle

답변:


16

테마 및 플러그인에서 복잡한 쿼리를 수행 할 때 일시적 효과가 좋습니다. 나는 메뉴와 같은 것들에 과도 현상을 사용하는 경향이 있으며, 예를 들어 사이드 바에서 트위터의 트윗과 같은 다른 것들을 보여줍니다. 나는 그것들을 절대적으로 모든 것에 사용하지 않을 것이므로 캐시 할 수있는 임시 데이터 조각 일뿐입니다.

일시적으로 Memcached와 같은 것을 사용하면 성능이 크게 향상됩니다. 일시적인 규칙은 실제로 임시 데이터 일 뿐이므로 일시적인 데이터가 항상 데이터베이스에 저장되는 것은 아니라는 점에서 만료되지 않아야하는 데이터에는 사용하지 않는 것입니다.

과도에 대한 일부 용도 :

  • 복잡하고 맞춤화 된 데이터베이스 쿼리
  • 워드 프레스 탐색 메뉴
  • 정보를 표시하는 사이드 바 위젯; 트윗, 최근 사이트 방문자 목록 또는 Flickr 사진 스트림
  • 캐싱 태그 클라우드

이 기사 는 과도 현상이 사이트 속도를 높이는 방법과 몇 가지 예를 보여주는 빠른 벤치 마크를 제공하는 매우 유용한 정보입니다. 이 다른 기사 에는 또한 과도를 사용하는 방법을 이해하는 데 도움이 될 수있는 과도를 사용하는 몇 가지 훌륭한 예가 있습니다.


2
다른 용도 : 외부 HTTP 요청 캐싱. 트위터 API를 누르는 것과 같습니다. 페이지를로드 할 때마다 수행하지 말고 결과를 일시적으로 캐시하십시오.
chrisguitarguy

11

WordPress에는 여러 가지 캐싱 메커니즘이 있으며 객체 캐시의 선택에 따라 그 메커니즘이 다릅니다 (기본 여부).

+-----------+-------------------------+---------------------+
|           |         Native          | Object cache plugin |
+-----------+-------------------------+---------------------+
| Option    | Persistent (database)   | N/A                 |
| Transient | Persistent (database)   | Persistent (varies) |
| Cache     | Non-persistent (memory) | Persistent (varies) |
+-----------+-------------------------+---------------------+

간단히 말해서 일시적 의미는 항상 영구적이지만 (기본적으로 캐시와 달리 페이지로드간에 유지됨) 옵션과 달리 제공되는 경우 사용자 지정 스토리지를 사용합니다.

이것은 캐싱을 위해 과도를 가장 다양한 선택으로 만듭니다.

그러나 유연성은 현재의 복잡성에 따라 달라지며 이름 길이에 대한 제한, 만료 여부에 따른 다른 동작, 가비지 수집 부족과 같은 뉘앙스가 상당히 많아서보다 복잡합니다.

사무용 겉옷:

  • 영구적이어야하는 것을 저장하기 위해 옵션 사용
  • 다른 것을 캐싱하기 위해 Transients 사용
  • 세 가지를 모두 잘 이해하고 캐시가 다른 경우보다 유스 케이스에 더 잘 맞는다는 것을 알고 캐시를 사용하십시오.

4

get_transient 함수를 두 번 호출하지 않으면 Sterling의 코드가 향상 될 수 있다고 생각합니다. 대신 첫 번째 결과를 임시 변수에 저장하십시오. 과도 API의 아이디어는 속도가 아니기 때문에 ;-)

private function _get_data( $query) {
    $result = get_transient( $query );
    if ( $result ) {
       return $result;
    } else { 
       return $this->_get_query( $query ); 
    }
}

3

짧은 답변 : 가능하면 언제 어디서나 사용해야합니다.

긴 답변 :

임시 API는 캐싱 용입니다. 따라서 최대한 많이 사용하고 싶습니다. 이를 위해 함수를 작성할 수 있습니다.

그것은 과잉이 아니며 제대로 완료되면 꽤 우아합니다.

// If the transient isn't false, then you can just get the cached version.
// If not, we'll call another function that runs a database query.
private function _get_data( $query) {
    return
    ( get_transient( $query ) ) ?
    get_transient( $query ) :
    $this->_get_query( $query );
}

// After you make the query, set the transient so you can leverage on caching plugins.
private function _get_query( $query ) {
  // Database logic. Results go to $results.
  ...
  set_transient( $query, $results , 0 ); // 0 Means cache for as long as you can.
}

3

Transients API는 Facebook, Twitter와 같은 외부 소스에서 데이터를 가져올 때 매우 유용합니다.

Transients API의 정의와 Cache WordPress 기능과의 차이점에 대해 더 명확하게 이해하려면 WordCamp San Francisco 2011 에서 오토와 Nanic의 대화를 시청하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.