it-swarm-ko.tech

많은 완전한 노드 객체를로드하는 성능있는 방법

여러 노드 객체를로드하고 여기에 알고리즘을 적용해야합니다.
보통 내부에서 반복과 node_load()을 사용하지만 노드 개체를로드하는 더 나은 (성능에 대해 말하면) 방법이 있는지 궁금합니다.

페이지 단위로 알고리즘의 결과를 캐시 할 수 있으면 충분하다고 생각합니다.

2
Nils Riedemann

node_load()은 특히 노드 객체가 일부 함수에 전달되는 경우 노드 객체를로드하는 데 선호되는 방법입니다.
Drupal 6에서 node_load()의 결과는 기본적으로 정적 변수에 로컬로 캐시됩니다. 무리를로드하려는 경우 노드의 경우 함수를 node_load($id, NULL, TRUE)로 호출하는 것이 좋습니다. 어떤 이유로 코드가 node_load()에 대한 연속 호출에서 동일한 노드를로드 할 수 있다고 확신하는 경우 X가 node_load()을 호출 한 후 정적 값을 재설정하는 것을 고려할 수 있습니다.
함수에 전달 된 $revision 매개 변수가 NULL이 아닌 경우 node_load()의 결과는 캐시되지 않습니다.

node_load()에서 얻은 값을 캐싱하는 것이 가능하며 코드는 해당 목적을 위해 자체 캐시를 사용할 수 있습니다. 노드가 업데이트되면 캐시가 무효화되어야합니다. 여기에는 노드가 이전 개정으로 되 돌린 경우도 포함됩니다. 자체 모듈에 캐시를 구현하는 것보다 타사 모듈 용 노드를 캐시하는 모듈을 사용하는 것이 좋습니다.

Drupal 7, node_load()node_load_multiple() 모두 객체에서 인스턴스 변수로 보관 된 노드 캐시를 재설정하는 $reset 매개 변수를받습니다. of class NodeController Drupal에서 생성 한 것으로, 엔티티 컨트롤러에 필요한 기본 메소드를 구현하는 클래스 인 DrupalDefaultEntityController 에서 구현 한 인스턴스 변수를 사용합니다.

2
kiamlaluno

내가 아는 다른 방법은 Drupal 6.

Drupal 7에는 node_load_multiple ()이있어 단일 쿼리로 여러 노드를로드 할 수 있습니다 (+ 후크, 여러 노드에 대해 단일 쿼리도 수행 할 수 있음). 또한로드 된 모든 엔티티를 캐시 할 수있는 Entity cache 프로젝트가 있습니다.

1
Berdir