มูลค่าเท่าไหร่ที่ใช้ add_action เมื่อเราสามารถใช้ add_filter ได้


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_actionและdo_actionโทรออกด้วยตัวกรองคุณจะลบความแตกต่างและบังคับให้ความรู้เกี่ยวกับชื่อเช่น'the_content'ฯลฯ เป็นการกระทำหรือตัวกรองนอกโลกและในความทรงจำของคุณสนับสนุนข้อผิดพลาด

ดังนั้นแทนที่จะทำให้การอ่านรหัสของคุณยากขึ้นโปรดทราบว่าหากรหัสของคุณช้านั่นไม่ใช่เพราะคุณไม่ได้โกนคำสั่งหรือสองที่นี่และที่นั่นนั่นก็คือเซิร์ฟเวอร์ของคุณช้าหรือโครงสร้างอัลกอริทึมของรหัสของคุณและ ธรรมชาติของข้อมูลที่ถูกจัดการ คุณจะได้รับมากขึ้นจากการปรับกระบวนการของคุณใหม่อัพเกรดฮาร์ดแวร์หรือเปลี่ยนกระบวนทัศน์ของคุณ ในรูปแบบที่ยิ่งใหญ่เว็บไซต์ที่ช้าน่าจะช้าที่สุดเพราะมันมีจำนวนมากหรือมีข้อความค้นหาที่เขียนไม่ดีเช่นโพสต์ข้อความค้นหาที่ใช้เมตาหรือ__not_inแบบสอบถามชนิด

เพื่อนำมาใช้ในมุมมองเมื่อ WordPress ใช้งาน PHP จะประมวลผลคำสั่งนับล้าน การสลับการกระทำของตัวกรองจะทำให้รอยบุ๋มอยู่ในอันดับที่หนึ่งในพันของไทล์

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

ฉันได้ลองติดตั้ง Wordpress ใหม่แล้ว สคริปต์หยุดทำงานก่อนที่จะจบลงด้วย "ข้อผิดพลาดของรถบัส" บนแล็ปท็อปของฉัน แต่จำนวน opcodes นั้นมากกว่า 2.3 ล้านแล้ว พูดพอแล้ว.

ถ้าคุณอยากลองดูว่าชายคนนั้นใช้ VLD อย่างไรและทดสอบทฤษฎีของคุณเอง


ดังนั้นจึงหมายความว่ามีไม่จริงความแตกต่างใด ๆ ยกเว้นหนึ่งที่มีความคล้ายคลึงกับการเรียกร้องให้คนที่มีสองชื่อที่แตกต่างกันเพียงว่า .... หนึ่งที่เราเรียกเขาว่าที่บ้านและหนึ่งที่เราเรียกเขาว่าที่สำนักงาน :)
Gagan

การห่อของตัวกรองโดยฟังก์ชั่นการกระทำอาจมีโทษ 4 หรือ 5 opcodes ซึ่งเป็นเรื่องเล็กน้อยในระดับของสิ่งต่าง ๆ ผลประโยชน์ใด ๆ ที่จะถูกลบออกได้อย่างง่ายดายโดยใช้ผู้ประกอบการที่สาม (?:) ในอาร์เรย์ขนาดใหญ่ บนบล็อกที่ฉันเชื่อมโยงบล็อกของเขาน่าจะเรียกดูได้) TLDR มีความแตกต่าง แต่มันเล็กมากมันไม่มีความหมาย
Tom J Nowell

ขอบคุณเพื่อนที่ล้างข้อมูลนี้ฉันไม่เคยคิดเลยว่าคนจำนวนมากทำงานกับรหัสเดียวกันและมันจะกลายเป็นปัญหาใหญ่กว่าถ้ามีคนเขียน do_action () สำหรับตัวกรองแทนการกระทำ ดังนั้นฉันจะใช้ add_filters ในกรณีที่ฉันจะแน่ใจว่าฉันเป็นคนเดียวที่จะใช้รหัสจนกระทั่งมันถูกใช้มิฉะนั้นฉันจะเขียน add_action () :)
Gagan

จะทดสอบวิธีการที่คุณกล่าวถึงในโพสต์ในช่วงสุดสัปดาห์และจะโพสต์ผลลัพธ์
Gagan

1
ฉันขอแนะนำให้คุณติดกับการประชุมโดยใช้ Apply_filters ตลอดเวลาจะเป็นการเพิ่มประสิทธิภาพขนาดเล็ก คุณได้รับการลงโทษด้านประสิทธิภาพ แต่ไม่ใช่จากการใช้งาน opcodes ของ PHP มันเป็นบทลงโทษทางจิตใจซึ่งแย่กว่านั้น นอกจากนี้ยังทำให้เข้าใจผิดถ้าคุณทำการกระทำที่กำหนดเอง / ตัวกรองและกลับมาในภายหลังมันเป็นการกระทำหรือตัวกรอง? คุณไม่มีทางรู้
Tom J Nowell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.