ฉันจะปรับปรุงประสิทธิภาพของไซต์ Drupal7 ของฉันได้อย่างไร [ปิด]


10

สำหรับคนที่ยังใหม่กับ Drupal ฉันเห็นว่ามีทรัพยากรมากมายใน Drupal Caching แต่ฉันไม่แน่ใจว่าควรใช้แหล่งใด


1
เราสามารถพูดคุยได้ว่าเราต้องการคำถามแบบบัญญัติสำหรับเรื่องนี้ในเมตาหรือไม่ แต่ฉันยังคิดว่ามันกว้างเกินไป และการปรับปรุงประสิทธิภาพอาจมีความอ่อนไหวต่อบริบทและไม่ได้ทำในสุญญากาศ
mpdonadio

คำตอบ:


26

เหล่านี้เป็นบันทึกจากประสบการณ์ของฉันและอาจแตกต่างจากสิ่งที่คนอื่นพบ ฉันใช้ LAMP stack มากและพิจารณาเหมือนกันในคำแนะนำของฉัน

กฎทั่วไปสำหรับการแคชที่ฉันทำตามโดยทั่วไป

  1. ดำเนินการเมื่อใช้หลายครั้ง
  2. อยู่กับข้อมูลเก่าเมื่อเป็นไปได้
  3. Clear Caches ไม่บ่อยนักและทำให้มันชัดเจนมาก
  4. เมื่อเป็นไปได้ทำการเปลี่ยนแปลงที่ระดับต่ำสุดในกอง LAMP - DCCc: Linux, Apache, Mysql, PHP, Drupal Core, Contrib และโมดูลที่กำหนดเอง

ปรับปรุงประสิทธิภาพของไซต์ Drupal (ตามลำดับความซับซ้อนที่เพิ่มขึ้น)

  1. อัปเดตคอร์โมดูล contrib และธีมที่อัพเดตอยู่เสมอ ใช่มันเป็นเรื่องสำคัญ

  2. ติดตั้ง APC บนเซิร์ฟเวอร์ของคุณ (ย้ายไปด้านบนตามคำแนะนำจาก Letharion)

  3. การแคชหน้า: ผู้ดูแลระบบ / การกำหนดค่า / การพัฒนา / ประสิทธิภาพความแตกต่างระหว่างอายุการใช้งานแคชขั้นต่ำและการหมดอายุของหน้าแคช

  4. Block Caching https://drupal.org/project/blockcache_alterตัวเลือกการแคชสำหรับบล็อคทั้งหมด
  5. รวมไฟล์จาวาสคริปต์และ css - การปรับปรุงส่วนหน้า https://www.drupal.org/project/advagg
  6. ปิดการใช้งานโมดูลที่ไม่จำเป็น ทุกโมดูลจะเพิ่มจำนวนรหัสที่ต้องใช้สำหรับการโหลดหน้าเว็บ และยังเพิ่มจำนวนการค้นหา หากเป็นไปได้ให้ใช้โมดูลทั่วไปแทนโมดูลหลายตัวที่ทำหน้าที่เฉพาะ
  7. เนื้อหามุมมองแคช - การแคชการรับรู้เนื้อหาสำหรับ Views https://www.drupal.org/project/views_content_cache
  8. ปิดใช้งานการบันทึก DB - ใช้https://drupal.org/project/syslog_ng
  9. ลดข้อผิดพลาด 404 - http://www.brokenlinkcheck.com/
  10. ตอบกลับอย่างรวดเร็ว 404 - https://drupal.org/project/fast_404 - ลองจัดการที่ระดับเซิร์ฟเวอร์
  11. การตรวจสอบด้านลูกค้า - https://www.drupal.org/project/clientside_validation
  12. บีบอัดรูปภาพ - https://www.drupal.org/project/imageapi_optimize
  13. Lazy Loading of Images - อย่าโหลดภาพที่ไม่จำเป็น - https://www.drupal.org/project/lazyloader
  14. ใช้ Sprite ชีต - https://www.drupal.org/project/spritesheets

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

  16. ใช้โมดูล Devel เพื่อดูข้อความค้นหา
  17. เขียนซ้ำแบบสอบถามผู้ชม / หลีกเลี่ยงการดูถ้ามันมากเกินไป
  18. XHProf - https://www.drupal.org/project/XHProf
  19. FPM, HHVM
  20. การทำโปรไฟล์และปรับฐานข้อมูล - https://www.drupal.org/project/dbtuner
  21. ใช้ Boostไม่ใช่ Bootstrap DB หากไม่จำเป็น https://drupal.org/project/boostสำหรับเว็บไซต์ขนาดเล็กถึงขนาดกลาง Boost นั้นดีพอและคุณอาจไม่ต้องการ Reverse Proxies
  22. ใช้ CDNs - https://www.drupal.org/project/cdnง่ายต่อการติดตั้ง
  23. หากตารางแคชของคุณมีการใช้งานขนาดใหญ่ Memcached - หากคุณสามารถติดตั้ง memcached และตั้งค่า RAM สำหรับมันจะไม่ซับซ้อนเท่าที่ฟัง
  24. Etags - กำหนดค่า Etags อย่างเหมาะสม https://developer.yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html
  25. ใช้ Reverse Proxy Server - วานิช (อย่างน้อยสำหรับสินทรัพย์) ช่วยได้มากหากผู้ใช้ส่วนใหญ่ไม่ระบุชื่อ
  26. บีบอัดการถ่ายโอน - เปิดใช้งานการบีบอัด gzip
  27. Keep Alive - ใช้การเชื่อมต่อแบบถาวรที่เป็นไปได้
  28. Progressive JPEGS -
  29. การแคชในโค้ด - บล็อกของ Eaton นั้นยอดเยี่ยม http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7
  30. ใช้การอุ่นแคช - https://www.drupal.org/project/cache_warmer - แคชอุ่นหน้าก่อนที่ผู้ใช้จะพบพวกเขา
  31. การกำหนดค่า Master Slave DB - https://www.drupal.org/project/autoslaveช่วยให้คุณตั้งค่าได้ง่ายขึ้น
  32. กลุ่มฐานข้อมูล - /programming/1163216/database-cluster-and-load-balancing
  33. โหลดบาลานเซอร์ - http://en.wikipedia.org/wiki/Load_balancing_(computing)
  34. ใช้ Heuristic Cache Warming - https://www.drupal.org/project/cache_graceful
  35. การแคชผู้ใช้ที่ได้รับการรับรองความถูกต้อง - https://www.drupal.org/project/authcache

2
คำตอบที่ยอดเยี่ยม แต่สิ่งหนึ่งที่โดดเด่นสำหรับฉันคือคุณไม่มี APC อยู่ด้านบน APC นั้นง่ายมากที่จะเข้าไปในสถานที่ไม่มีข้อเสียและผลกำไรอาจมีขนาดใหญ่มาก ฉันคิดว่ามันควรจะไปด้านบน (อาจจะมีความคิดเห็นที่ไม่จำเป็นหลังจาก PHP 5.5 การเพิ่มประสิทธิภาพในที่สุดได้บูรณาการ)
Letharion

1
อาจจะพูดถึงบางสิ่งเกี่ยวกับผลกำไรที่ง่ายที่สุดสำหรับการแคชด้วย หากไซต์ของคุณต้องการเนื้อหาแบบสแตติกส่วนใหญ่ (หน้าจะเหมือนกันสำหรับผู้ใช้ทั้งหมดดังนั้นจึงไม่มีการเข้าสู่ระบบ) ดังนั้นวานิชหรือบูสต์จะได้รับผลกำไรมากที่สุด
Dominic Woodman

5

เลเยอร์ฐานข้อมูลมีความสำคัญ ฉันครอบคลุมบางส่วนของมันและพื้นฐานในงานนำเสนอนี้http://goo.gl/30yi39


การนำเสนอที่ยอดเยี่ยม MikeyTown คุณคือมือโปรในการแสดงผล :)
Gokul NK

3

ในฐานะเพื่อนของคำตอบของ Gokul นี่คือวิธีที่ฉันจะคิดเกี่ยวกับสิ่งที่คุณต้องการแคชใน Drupal (ไม่ได้รับคำสั่งจากความซับซ้อน):

การแคชหมายถึงการเร่งกิจกรรมที่ทำซ้ำ ๆ

การกระทำซ้ำ ๆ ที่เกี่ยวข้องกับเว็บไซต์ Drupal คือ:

  • กำลังเรียกเว็บเพจ
  • ใช้งานโค้ด PHP เพื่อสร้างเว็บเพจ
  • PHP เรียกไอเท็มจากฐานข้อมูล

กำลังแคชทั้งหน้าเว็บ

ผลกำไรการแคชที่ยิ่งใหญ่ที่สุดนั้นมาจากการหาวิธีแคชเว็บเพจทั้งหมดโดยไม่ต้องใช้โค้ด PHP หรือเรียกฐานข้อมูล

คุณสามารถทำเช่นนี้กับวานิชหรือBoost เมื่อผู้ใช้เรียกหน้าพวกเขากลับสำเนาของหน้าโดยไม่ทำการคำนวณ

อย่างไรก็ตามสิ่งนี้จะไม่ทำงานหากบางส่วนของหน้าจะต้องแตกต่างกัน (เช่นชื่อผู้ใช้และชื่อของพวกเขาจะปรากฏที่ด้านบน)

เพื่อให้ได้งานคุณต้องดู Authcache

แคช PHP

คุณสามารถแคช PHP ด้วยAPCหรือถ้าคุณมีเวอร์ชัน 5.5 หรือสูงกว่าแคชที่ต่างกันจะถูกสร้างขึ้น

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

การแคชฐานข้อมูล

การโทรเพื่อรับข้อมูลจากฐานข้อมูลมีราคาแพง

กลไกการแคชฐานข้อมูลที่พบมากที่สุดคือmemcache

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


1
Redis ยังเป็นร้านที่ดีแคชในหน่วยความจำอย่างน้อยเทียบเท่ากับ memcache ในประสบการณ์ของฉัน (แม้ว่า memcache อาจจะชนะออกมาพร้อมกับการจัดกลุ่ม)
ไคลฟ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.