Чого варто використовувати адміністрування, коли ми можемо просто використовувати add_filter?


10

Я щойно переглянув код Wordpress і знайшов таке визначення додавання:

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

Тепер чому ми витрачаємо один цикл процесора просто на виклик іншої функції, яку ми можемо просто зробити самі, і тоді нам не доведеться запам’ятовувати два різних імена функцій для однієї і тієї ж речі.


Чи є це причиною того, що з поверненнями значень add loader та add_filter все відрізняється? wordpress.stackexchange.com/questions/283564/…
mahatmanich

Відповіді:


9

Дії виконують справи. Фільтри модифікують речі. Ви виконуєте дії в ході дії, тоді як якщо застосуєте фільтр, ви не очікуєте жодних подій чи дій, крім модифікації значення, яке ви фільтруєте. наприклад, не годиться надсилати електронну пошту або зберігати значення БД у фільтрі, але це добре в дії. Можуть бути рідкісні моменти, коли вам потрібно порушити цю умову, але вона є корисною та необхідною.

Замінивши всі add_actionта do_actionдзвінки на їхні аналоги з фільтрами, ви видалите відмінність і змусите пізнати більш власні назви, як 'the_content'і т. Д. Це дії чи фільтри поза світом, і запам’ятовуйте їх у пам’яті, заохочуючи помилки.

Отже, замість того, щоб зробити ваш код важчим для читання, зрозумійте, що якщо ваш код повільний, це не тому, що ви тут і там не бринули інструкцію або дві, це або ваш повільний сервер, або алгоритмічна структура вашого коду і характер оброблюваних даних. Ви б набагато більше отримали від рефакторингу своїх процесів, оновлення обладнання або зміни парадигм. У грандіозній схемі речей повільний сайт, швидше за все, повільний, оскільки він робить багато або має погано написані запити, наприклад, розміщення запитів, що покладаються на мета чи __not_inзапити типу

Щоб зробити це перспективним, коли WordPress працює, PHP виконує мільйони інструкцій. Дії міняння фільтрів ледве вводять вм’ятину в верхню 1 тисячну частку процентиля.

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

Я спробував свіжу установку Wordpress. Сценарій зупиняється, перш ніж він закінчиться "Помилкою шини" на моєму ноутбуці, але кількість опкодів вже перевищила 2,3 мільйона . Достатньо сказано.

Якщо ви дійсно хочете спробувати, подивіться, як хлопець використовував VLD і перевірити вашу теорію для себе.


Тож це означає, що насправді немає різниці, крім тієї, яка є аналогічною тому, щоб називати людину з двома різними іменами .... просто ту, яку ми називаємо його вдома, і одну, яку ми називаємо в офісі :)
Гаган

Обгортання фільтрів функціями дій, ймовірно, спричиняє штраф в 4 або 5 опкодів, що тривіально за шкалою речей, будь-які переваги легко буде викреслено за допомогою використання потрійного оператора (?:) На великому масиві (див. Допис у блозі в блозі, з яким я пов’язаний, його блог варто переглянути). TLDR Різниця є, але вона така крихітна, що вона безглузда
Tom J Nowell

Дякую приятелю за очищення цього, я ніколи не вважав фактом, що багато людей працюють над одним і тим же кодом, і це стає більшою проблемою, якщо хтось просто продовжує писати dogery () для фільтрів замість дій. Тож я буду використовувати add_filters у тих випадках, коли буду впевнений, що я єдиний, хто перебирає код до його використання, інакше напишу addgery () :)
Гаган

Також перевіримо метод, про який ви згадали у публікації у вихідні дні, та опублікуйте результати.
Гаган

1
Я рекомендую дотримуватися домовленостей, весь час використання apply_filters було б мікрооптимізацією. Ви отримуєте покарання за продуктивність, але не від опромінів PHP, це покарання для розумової продуктивності, що гірше. Це також вводить в оману, якщо ви зробите власну дію / фільтр і перегляньте пізніше, це дія чи фільтр? Ти не можеш знати
Том Дж. Ноуелл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.