단순히 add_filter를 사용할 수있을 때 add_action을 사용할 가치가있는 것은 무엇입니까?


10

방금 워드 프레스 코드를 살펴보고 add_action 정의를 찾았습니다.

function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
    return add_filter($tag, $function_to_add, $priority, $accepted_args);
}

이제 우리는 단순히 우리 자신이 할 수있는 다른 함수를 호출하기 위해 하나의 CPU 사이클을 낭비하는 이유는 무엇입니까?


이것이 add_action 및 add_filter가 값을 리턴하는 것과 다른 이유입니까? wordpress.stackexchange.com/questions/283564/…
mahatmanich

답변:


9

행동은 일을합니다. 필터는 사물을 수정합니다. 필터를 적용하면 필터링하는 값을 수정하는 것 외에는 이벤트 나 작업이 발생하지 않을 것으로 예상됩니다. 예를 들어, 이메일을 보내거나 DB 값을 필터에 저장하는 것은 좋지 않지만 동작에는 문제가 없습니다. 이 컨벤션을 위반해야하는 경우는 드물지만 유용하고 필요한 컨벤션입니다.

모든 필터 add_actiondo_action통화를 필터 대응으로 대체함으로써 구별을 제거 'the_content'하고 세계에서 액션이나 필터 등의 이름에 대한 지식을 강요하여 실수를 장려합니다.

따라서 코드를 읽기 어렵게 만드는 대신 코드 속도가 느리다는 것은 여기저기서 명령을 면도하지 않았기 때문이 아니라 서버 속도가 느리거나 코드의 알고리즘 구조 및 처리되는 데이터의 특성 프로세스 리팩토링, 하드웨어 업그레이드 또는 패러다임 변경을 통해 더 많은 것을 얻을 수 있습니다. 전체적인 계획에서 느린 사이트는 메타를 사용하는 쿼리를 게시하거나 쿼리를 많이 작성하거나 쿼리를 많이 작성하기 때문에 속도가 느릴 __not_in수 있습니다.

WordPress가 실행될 때 PHP는 수백만 개의 명령을 실행 합니다. 필터에 대한 스와핑 조치는 백분위 수의 상위 10 분의 1에 거의 움푹 들어 가지 않습니다.

http://fabien.potencier.org/article/8/print-vs-echo-which-one-is-faster

새로운 Wordpress 설치를 시도했습니다. 스크립트가 랩톱에서 "버스 오류"로 끝나기 전에 정지되지만 opcode의 수는 이미 2.3 백만 이상 입니다. 충분했다.

정말로 시도하고 싶다면 그 사람이 VLD를 어떻게 사용했는지 살펴보고 자신의 이론을 테스트하십시오.


그래서 그것은 실제로 두 가지 다른 이름을 가진 사람을 부르는 것과 비슷한 것을 제외하고는 아무런 차이가 없다는 것을 의미합니다. 단지 하나는 우리가 집에서 그를 부르고 다른 하나는 사무실에서 그를 부르는 것입니다 :)
Gagan

액션 함수에 의해 필터를 줄 바꿈하는 것은 4 또는 5 개의 opcodes의 벌금을 초래할 수 있습니다. 이는 사물의 규모에있어 사소한 일이며, 큰 배열에서 삼항 연산자 (? :)를 사용하면 모든 이점을 쉽게 지울 수 있습니다 (블로그 게시물 참조) 내가 링크 한 블로그에서 그의 블로그는)를 통해 볼 가치가 있습니다. TLDR 차이는 있지만 의미가 없습니다
Tom J Nowell

이것을 제거해 준 고마워 친구, 나는 많은 사람들이 같은 코드로 작업한다는 사실을 결코 고려하지 않았으며 누군가가 액션 대신 필터에 do_action ()을 계속 쓰는 경우 더 큰 문제가됩니다. 따라서 코드를 사용할 때까지 내가 유일하게 확신 할 수있는 경우 add_filters를 사용합니다. 그렇지 않으면 add_action () :)을 작성합니다.
Gagan

또한 주말에 게시물에서 언급 한 방법을 테스트하고 결과를 게시합니다.
Gagan

1
apply_filters를 사용하면 항상 마이크로 최적화가 될 것입니다. PHP opcode가 아닌 성능 저하가 발생하지만 정신 성능이 저하됩니다. 사용자 지정 작업 / 필터를 만든 후 나중에 다시 방문하면 오해의 소지가 있습니다. 작업 또는 필터입니까? 당신은 알 방법이 없습니다
Tom J Nowell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.