Score:6

ผิดไหมถ้าใช้เบ็ดตัวเดิมซ้ำ 2 ครั้ง?

ธง jp

ฉันกำลังทำงานโครงการที่ค่อนข้างใหญ่และฉันใช้ hook_entity_update () ในสามโมดูลของฉัน ฉันทำสิ่งนี้เพื่อให้โครงการมีโครงสร้างและมีฟังก์ชันต่างๆ ของไซต์ของฉันในโมดูลต่างๆ

  • การทำงานที่ไม่ดีควรเรียก hook นี้หลายครั้งจากโมดูลที่แตกต่างกันหรือไม่?
  • เนื่องจากวิธีการทำงานนี้ทำให้จำนวนของโมดูลแบบกำหนดเองเพิ่มขึ้น จำนวนของโมดูลส่งผลต่อประสิทธิภาพของไซต์หรือไม่ หรือมีเพียงโค้ดภายในเท่านั้นที่สามารถทำให้เกิดปัญหาด้านประสิทธิภาพได้
Score:4
ธง cn

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

ผลกระทบด้านประสิทธิภาพของการเรียกเบ็ดนั้นน้อยมาก ผลกระทบด้านประสิทธิภาพที่มากขึ้นจะเป็นโค้ดอะไรก็ตามที่ hook ทำงาน

จำนวนโมดูลไม่สำคัญเท่ากับรหัสที่โมดูลกำลังเรียกใช้

หลักฐาน: การย้ายจาก Drupal 7 เป็น Drupal 8/9 โมดูล Drupal ที่สำคัญจำนวนมากได้เปลี่ยนจาก "ลดจำนวนโมดูลให้น้อยที่สุด" เป็น "มีโมดูลเฉพาะฟังก์ชันอีกมากมายที่สามารถเปิดใช้งานได้ตามต้องการ":

  • AdvAgg
  • พาณิชย์
  • เมตาแท็ก
  • เว็บฟอร์ม

TLDR: โค้ดจริงที่คุณเรียกใช้ใน hooks/modules มีความสำคัญต่อประสิทธิภาพมากกว่าการที่คุณเรียก hooks หลายครั้งในโมดูล

อย่างไรก็ตาม สิ่งหนึ่งที่คุณต้องระวังก็คือ หากคุณจัดระเบียบโมดูลของคุณไม่ดี คุณสามารถลงเอยด้วยการเพิ่มโค้ดที่กำหนดเองใน hook เดียวกันในหลายโมดูล ซึ่งอาจส่งผลให้เกิดข้อบกพร่องได้ เช่น หากคุณกำลังเปลี่ยนฟิลด์เดียวกันใน hook_entity_update (). ดังนั้น ตรวจสอบให้แน่ใจว่าคุณจัดระเบียบโค้ดของคุณในลักษณะที่ทำให้ชัดเจนว่าโมดูลใดรับผิดชอบฟังก์ชันใด

ในฐานะนักพัฒนา การบำรุงรักษาโมดูลแบบกำหนดเองนั้นง่ายกว่าแน่นอนเมื่อแยกตามฟังก์ชัน โดยเฉพาะอย่างยิ่งในกรณีที่คุณต้องใช้ฟังก์ชัน/โมดูลบางส่วน แต่ไม่ใช่ทั้งหมดในหลายไซต์

Joost avatar
jp flag
ขอบคุณสำหรับคำตอบที่กว้างขวาง ชัดเจนและเป็นประโยชน์มาก
Score:3
ธง us

จำนวนโมดูลที่ติดตั้งอาจส่งผลต่อประสิทธิภาพการทำงาน นั่นเป็นเหตุผลว่าทำไม Drupal core จึงเก็บชื่อ hooks ที่ใช้งานไว้ในแคช
เมื่อพิจารณาถึงสิ่งที่ Drupal core ทำ การเพิ่มจำนวนโมดูลที่ติดตั้งจะส่งผลต่อประสิทธิภาพที่ลดลง

จุดมุ่งหมายสำหรับนักพัฒนาไม่ควรลดจำนวนโมดูล/โมดูลย่อย แต่ควรเขียนโมดูลที่ใช้คุณลักษณะเฉพาะ เห็นได้ชัดว่า หากการนำคุณลักษณะไปใช้ต้องมีบรรทัดไม่กี่บรรทัด อาจเป็นไปได้ว่าควรรวมโมดูลเข้ากับโมดูลอื่น โดยเฉพาะอย่างยิ่งหากโมดูลนั้นเป็นโมดูลย่อย

เพื่อให้เป็นตัวอย่างแทนการ โหนด และ ผู้ใช้ โมดูล อาจมีโมดูลเดียว (เช่น เรียกว่า เนื้อหาฐาน). เนื่องจากโดยปกติแล้วโมดูลเหล่านั้นต้องการจากโปรไฟล์การติดตั้ง จึงลดจำนวนโมดูลที่ติดตั้ง นอกจากนี้ยังสามารถลดจำนวนของ hooks ที่นำมาใช้ เนื่องจาก (ตัวอย่าง) node_user_predelete() สามารถรวมเข้ากับคลาสเมธอดหรือฟังก์ชันอื่นได้
อย่างไรก็ตาม การทำเช่นนั้น สองโมดูลที่มีจุดประสงค์ต่างกันจะถูกรวมเข้าด้วยกัน hooks อาจลดลง แต่ในบางกรณีรหัสอาจต้องตรวจสอบเงื่อนไขบางอย่างก่อน อาจมีบริการเพิ่มเติมที่โหลดแบบขี้เกียจ ซึ่งหมายความว่าจะมีสองคลาสแทนที่จะเป็นคลาสเดียว (คลาสพร็อกซีและคลาสที่ใช้บริการ) คลาสเหล่านั้นจะต้องซิงโครไนซ์ซึ่งกันและกัน: การเปลี่ยนแปลงใด ๆ ในคลาสบริการจะต้องทำในคลาสพร็อกซีด้วย (มีสคริปต์สำหรับการทำเช่นนั้น แต่ใช้งานได้กับโมดูลที่ติดตั้งเท่านั้น ซึ่งหมายความว่านักพัฒนาจะต้องมีเซิร์ฟเวอร์ภายในที่ใช้ Drupal และอย่าลืมเรียกใช้สคริปต์สำหรับทุกบริการที่โหลดแบบขี้เกียจ)

ไม่ใช่แค่เรื่องของการอิมพลีเมนต์ hooks: ใน Drupal 9 โมดูลที่ซับซ้อนพอที่จะใช้หลายคลาส ซึ่งบางคลาสเป็นการใช้งานบริการหรือปลั๊กอิน แม้แต่โมดูลที่เรียบง่ายพอที่จะใช้เส้นทางเดียวในการนำโค้ดมาใช้ในคลาสเป็นอย่างน้อย

โพสต์คำตอบ

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