Có móc vào cùng một hành động nhiều lần làm cạn bộ nhớ?


7

Hiện tại tôi có ba chức năng chạy trên pre_get_posts. Tôi gọi họ như thế này:

add_action( 'pre_get_posts', 'private_groups' );
add_action( 'pre_get_posts', 'search_results' );
add_action( 'pre_get_posts', 'name_profiles' );

Điều này cho phép tôi giữ các chức năng gọn gàng và riêng biệt, nhưng việc gọi đến cùng một hành động ba lần, so với việc gọi một chức năng kết hợp một lần, làm hao tổn tài nguyên?


1
Không có lý do gì mà việc móc ba lần trong cùng một hành động để thực hiện ba việc riêng biệt sẽ tiêu tốn nhiều bộ nhớ hơn so với thực hiện ba việc thành một móc. Sắp xếp mã theo cách tốt nhất cho bạn và các đối tác của bạn, không chỉ móc vào cùng một móc nhiều lần, thậm chí tách các móc đó thành các plugin khác nhau có thể là cách tiếp cận rất tốt để giúp công việc dễ dàng hơn.
cybmeta

Câu trả lời:


5

Tôi đoán ý bạn là

add_action( 'pre_get_posts', 'private_groups' );
add_action( 'pre_get_posts', 'search_results' );
add_action( 'pre_get_posts', 'name_profiles' );

đấu với

add_action( 'pre_get_posts', 'combined_into_single_callback' );

Bạn chỉ có thể kiểm tra sự khác biệt bằng cách sử dụng eg memory_get_usage()timer_stop(). Nhiều plugin tốt hiện có để giúp với điều đó.

Tôi sẽ nói đi với người đầu tiên, vì họ dường như là cuộc gọi lại không liên quan và có lẽ dễ duy trì hơn.

Tôi mong rằng sẽ chủ yếu phụ thuộc vào các chức năng gọi lại bạn chạy ở đó: private_groups(), search_results()name_profiles()so với combined_into_single_callback().

Bản thân thiết lập hook không nên làm cạn kiệt tài nguyên, vì nó chỉ là ba yếu tố bổ sung mới trong một mảng toàn cầu.

Điều bạn nên cẩn thận, khi sử dụng pre_get_posts, là chỉ nhắm mục tiêu đối tượng tương ứng WP_Queryvà tránh chạy các khối mã đắt tiền cho tất cả các phiên bản.


Vâng, tôi có nghĩa là những gì tôi có bây giờ so với một chức năng kết hợp như bạn đề xuất.
SinisterBeard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.