Có bao nhiêu bộ lọc / hành động móc là khỏe mạnh?


8

Làm cho plugin của tôi có thể mở rộng là cách tiếp theo để giải quyết hầu hết các vấn đề của mọi người. Và tôi biết tôi có thể đặt nhiều bộ lọc và hành động móc ở đây và ở đó để làm cho mọi thứ năng động hơn. Nhưng với tôi, nó quá lộn xộn.

Gần đây, một người dùng plugin của tôi đã yêu cầu thay đổi văn bản chú giải công cụ và trong trường hợp của họ, đó không phải là lý do tồi. Có 6-8 chú giải công cụ trên trang đó. Tôi biết tôi có thể đặt móc lọc cho mỗi em. Nhưng tôi có nên không?

Có bất kỳ nhược điểm, vấn đề hiệu suất liên quan đến việc đặt nhiều móc?



@toscho một loại. Nhưng các câu trả lời ở đây đủ tốt để không bị đánh dấu là trùng lặp vì chúng cũng đang chỉ ra điều gì đó tốt. Cảm ơn BTW cho các nhà máy điện. Sẽ giúp rất nhiều để sắp xếp vấn đề của tôi.
Hồi giáo Mayeenul

Câu trả lời:


7

Miễn là các hook không có bất cứ thứ gì được nối với chúng, chúng không phải là ops, điều đó gần như không có gì và không có ảnh hưởng đáng kể đến thời gian chạy. Nó trở nên khá khác biệt khi mọi thứ được nối và có rất nhiều cuộc gọi.

Vì bạn nói về việc tùy chỉnh chuỗi, ví dụ tốt sẽ được gettextnối trong lõi. Mỗi chuỗi được bản địa hóa đi qua nó.

Vì vậy, trên lý thuyết đây là một cái móc rất linh hoạt cho phép lọc văn bản gần như mọi nơi. Trong thực tế, nó có thể bắn hàng ngàn lần và nếu bạn không quan tâm đến nó, nó sẽ nhanh chóng làm chậm trang web phức tạp để tạm dừng.

Bạn không bao gồm trường hợp sử dụng của bạn một cách chi tiết để đề xuất thực hiện cụ thể. Nói chung, bạn có nhiều lựa chọn về cách tổ chức này:

  • apply_filters( 'prefix_tooltip', $text ) là trường hợp cơ bản, bộ lọc sẽ phải tìm ra văn bản khớp chính xác để xác định ngữ cảnh, do đó rất mong manh.
  • apply_filters( 'prefix_tooltip', $text, 'type/location' )đối số bổ sung cho phép bạn chỉ định loại tooltip, bộ lọc nào có thể nhắm mục tiêu; Vì vậy, ngay cả khi văn bản thay đổi, loại vẫn xác định nó.
  • apply_filters( 'prefix_tooltip_' . $type, $text )tên hook động, thay đổi với giá trị thay đổi; điều này rất linh hoạt đối với các trường hợp có nhiều loại / được tạo ra, vấn đề chủ yếu là các móc động rất khó khám phá trong mã và tệ hơn nhiều khi tự viết tài liệu;
  • apply_filters( 'prefix_tooltips', $texts_array )bộ lọc duy nhất cho bộ công cụ hoàn chỉnh được sử dụng.

Tại một số lượng 6 mục8 không thực sự có sự khác biệt hiệu suất có ý nghĩa giữa những mục này.

Điều quan trọng để bạn học ở đây là cách tiếp cận nào và bạn cần cẩn thận chọn một phương pháp phù hợp nhất cho mọi trường hợp, để nó có ý nghĩa và thuận tiện cho chính bạn và các nhà phát triển tuyến dưới.


3

Thực sự có hai câu hỏi ở đây 1. tác động của việc có một cái móc là gì? và 2. Bạn có nên trải móc ở khắp mọi nơi

  1. Tác động gần bằng không. Nếu không có gì liên quan đến hành động / bộ lọc, các cuộc gọi do_action/apply_filterssẽ trở lại gần như ngay lập tức, do đó sẽ không có bất kỳ tác động đáng chú ý nào đối với những người không sử dụng hook và vì vậy không có gì xấu về mặt kỹ thuật để thêm chúng (nếu bạn đưa ra bất kỳ lý do bán hợp lý nào để thêm móc vào lõi, rất có thể nó sẽ được thêm vào bởi chủ đề cốt lõi).

  2. Nhưng nó có thông minh như một thực hành phát triển phần mềm không? Không. Móc là API và API có nghĩa là cam kết về phía bạn để duy trì chúng trong thời gian dài. Do đó, giống như bất kỳ API "chính thức" nào bạn tạo, bạn nên nghĩ rằng đó là thứ gì đó có ý nghĩa đối với plugin của bạn về lâu dài và bạn không làm điều đó chỉ để làm cho một người dùng plugin hài lòng.

Từ mô tả của bạn, nếu bạn nghĩ rằng có một văn bản cần tùy chỉnh, có lẽ bạn nên xem xét sử dụng một số loại màn hình cài đặt cho điều đó. Đây rõ ràng cũng là một số loại API, nhưng nó dễ nhìn thấy hơn đối với người dùng cuối.


có lẽ bạn nên xem xét sử dụng một số loại màn hình cài đặt cho điều đó. Xin lỗi Mark, điều đó quá rắc rối cho một tình huống như tôi đã mô tả. Bởi vì điều đó cũng sẽ tạo ra một truy vấn db khi không cần thêm tải (ví dụ văn bản chú giải công cụ).
Hồi giáo Mayeenul

1. Buộc người dùng viết mã để thực hiện thay đổi trong văn bản sẽ rắc rối hơn nhiều so với cài đặt. Nếu bạn không nghĩ rằng có đủ giá trị để người dùng thay đổi văn bản, thì tại sao bạn nghĩ rằng làm đầy mã của bạn với chức năng mà người dùng sẽ không sử dụng là một ý tưởng hay? 2. trừ khi plugin của bạn rất tầm thường, không chắc bạn sẽ cần một truy vấn DB khác vì tất cả các tùy chọn của trang web được tải với một truy vấn @MayeenulIslam
Mark Kaplun 24/8/2016

Cảm ơn Mark, nhưng tôi thấy không có lý do gì để đi với API cài đặt cho một thay đổi đơn giản đối với tooltip. API cài đặt BTW là một cách năng động, đó là điều hiển nhiên, tôi đồng ý.
Hồi giáo Mayeenul

3

Tùy biến luôn là một hòn đá vấp ngã (quá trình đau đớn). Từ một phía chúng tôi có một yêu cầu thực sự (vấn đề) từ người dùng luôn luôn quan trọng. Mặt khác, tất cả các tùy chọn bổ sung này có thể biến chủ đề đáng yêu, plugin hoặc một số sản phẩm trừu tượng của bạn thành địa ngục. Vậy chúng ta có thể làm gì với tư cách là một nhà phát triển?

Đầu tiên. Viết mã mở rộng với cơ hội thay đổi một số đoạn mã của bạn - mã có thể sử dụng lại. Các lớp, giao diện, đặc điểm và chỉ tách mã sai dài thành các phương thức (hàm) nhỏ. Một số người dùng có thể dễ dàng sử dụng chúng mà không cần thay đổi sản phẩm của bạn. Ví dụ: ai đó có thể tạo một tiện ích với nhu cầu của riêng mình và sử dụng chức năng plugin nội bộ please_echo_the_plugin_awesome_stuff().

Thêm các bộ lọc và hành động mới không phải là ý tưởng tồi . Nhiều plugin phổ biến như Jetpack hoặc bbPress có hàng trăm bộ lọc bên trong mã của chúng. Đôi khi còn quá mức. Mỗi bộ lọc mới (hoặc hành động) mà không có bất kỳ trình xử lý nào thường không thực hiện một chi phí lớn. Đó là một phần triệu giây.

10 ^ −3 s mili giây ms 10 ^ −6 s micrô giây

Quan trọng hơn nhiều là những gì bạn đang làm đối với hành động này bằng cách thêm các trình xử lý mới thông qua add_action()hoặc add_filter(). Ví dụ: yêu cầu đến máy chủ cơ sở dữ liệu (đôi khi không rõ ràng, như nhận tùy chọn không tự động tải bằng cách get_option()). Và bạn có thể đo nó. Ví dụ đơn giản nhất:

$start = microtime(true);
// Do some stuff here
$end = microtime(true);
echo $start, PHP_EOL, $end, PHP_EOL, $end - $start, PHP_EOL,

Nó là rất đơn giản và đôi khi kỹ thuật phù hợp nhất để hồ sơ mã của bạn. Nhân tiện, WordPress có "đồng hồ bấm giờ" nội bộ, thanh toán timer_start()timer_stop().

Hoặc bạn có thể sử dụng XDebug. Nó có vẻ rất phức tạp để cấu hình. Nhưng bạn có thể sử dụng VVV hoặc bất kỳ máy chủ sẵn sàng hoạt động nào khác. Tất cả chúng đều đã được cấu hình đúng Xdebug và bạn chỉ có thể sử dụng nó - nghe thật tuyệt phải không?. Nếu bạn đang sử dụng VVV, chỉ cần nhấn vài lệnh:

vagrant ssh
xdebung_on

Đó là tất cả! Chuyển sang IDE của bạn và hồ sơ mã của bạn. Hoặc sử dụng các dịch vụ nội bộ của VVV như WebGrind. Thông tin thêm về các kỹ thuật này bạn có thể tìm thấy tại Code Debugging Wiki . Cần nhớ rằng việc sử dụng Xdebug có ảnh hưởng đến hiệu suất, nhưng bạn có thể tìm thấy mã chậm (nút cổ chai).

Và thứ ba. Điều cuối cùng. Triết lý WordPress là Quyết định, không phải Tùy chọn .


Cảm ơn câu trả lời tuyệt vời. Tôi ước tôi có thể chấp nhận nhiều câu trả lời cùng một lúc. Nhưng tôi được dạy phải chấp nhận người duy nhất được chấp nhận nhất. Bạn của bạn quá tốt, nhưng nó cũng không bị bỏ rơi. Tốt bó lời khuyên. Cảm ơn bạn rất nhiều.
Hồi giáo Mayeenul
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.