¿Qué vale la pena usar add_action cuando simplemente podemos usar add_filter?

10

Acabo de buscar en el código de WordPress y encontré esta definición de add_action:

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

Ahora, ¿por qué estamos desperdiciando un ciclo de CPU por solo llamar a otra función que simplemente podemos hacer nosotros mismos y luego no tendremos que recordar dos nombres de funciones diferentes para la misma cosa?

Gagan
fuente
¿Es esta la razón por la cual las cosas son diferentes con los valores de retorno add_action y add_filter? wordpress.stackexchange.com/questions/283564/…
mahatmanich

Respuestas:

9

Las acciones hacen cosas. Los filtros modifican cosas. Hace cosas en una acción, mientras que si aplica un filtro, no espera que ocurran eventos o acciones, aparte de la modificación del valor que está filtrando. Por ejemplo, no está bien enviar un correo electrónico o guardar un valor de DB en un filtro, pero está bien en una acción. Puede haber momentos raros en los que necesite violar esta convención, pero es útil y necesaria.

Al reemplazar todo add_actiony las do_actionllamadas con sus contrapartes de filtro, elimina la distinción y fuerza el conocimiento de si otros nombres como 'the_content'etc. son acciones o filtros fuera del mundo y en su memoria, lo que fomenta errores.

Entonces, en lugar de hacer que su código sea más difícil de leer, tenga en cuenta que si su código es lento, no es porque no afeitó una o dos instrucciones aquí y allá, es su servidor lento o la estructura algorítmica de su código y La naturaleza de los datos que se manejan. Obtendrá mucho más de refactorizar sus procesos, actualizar el hardware o cambiar sus paradigmas. En el gran esquema de las cosas, un sitio lento probablemente sea lento porque hace mucho o tiene consultas mal escritas, por ejemplo, publicar consultas que se basan en meta o __not_inescribir consultas

Para ponerlo en perspectiva, cuando se ejecuta WordPress, PHP ejecuta millones de instrucciones. El intercambio de acciones por filtros apenas haría mella en la milésima parte superior de un percentil.

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

He probado una nueva instalación de Wordpress. El script se detiene antes de que termine con un "Error de bus" en mi computadora portátil, pero el número de códigos de operación ya era de más de 2.3 millones . Basta de charla.

Si realmente quieres probar, mira cómo el tipo usó el VLD y prueba tu teoría por ti mismo.

Tom J Nowell
fuente
Por lo tanto, significa que en realidad no hay ninguna diferencia, excepto la que es análoga a llamar a una persona con dos nombres diferentes ... solo la llamamos en casa y la llamamos en la oficina :)
Gagan
El ajuste de los filtros por las funciones de acción probablemente incurre en una penalización de 4 o 5 códigos de operación, lo cual es trivial en la escala de las cosas, cualquier beneficio se eliminaría fácilmente usando un operador ternario (?:) En una gran matriz (ver blogpost en el blog al que me vinculé, vale la pena echarle un vistazo a su blog). TLDR Hay una diferencia, pero es tan pequeña que no tiene sentido
Tom J Nowell
Gracias amigo por aclarar esto, nunca consideré el hecho de que muchas personas trabajan en el mismo código y se convierte en un problema mayor si alguien sigue escribiendo do_action () para filtros en lugar de acciones. Así que usaré add_filters en los casos en que me asegure de ser el único que revise el código hasta que se use, de lo contrario escribiré add_action () :)
Gagan
También probará el método que mencionó en la publicación el fin de semana y publicará los resultados.
Gagan
1
Le recomiendo que siga la convención, usar apply_filters todo el tiempo sería una microoptimización. Obtiene una penalización de rendimiento, pero no de los códigos de operación PHP, es una penalización de rendimiento mental, que es peor. También es engañoso si realiza una acción / filtro personalizado y vuelve a visitarlo más tarde, ¿es una acción o un filtro? No tienes forma de saberlo
Tom J Nowell