ปรับปรุงประสิทธิภาพของ Drupal 9 ด้วยโมดูล แนวทางปฏิบัติในการเข้ารหัสที่ดีที่สุด และการกำหนดค่าเซิร์ฟเวอร์ที่เหมาะสม

เผยแพร่แล้ว: 2020-08-11

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

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

drupal-9-performance-optimization


มีหลายสิ่งที่ส่งผลต่อประสิทธิภาพของเว็บไซต์ บางส่วนของพวกเขาคือ:

• ผู้ให้บริการของคุณ (โฮสติ้ง DNS เป็นต้น)
• จำนวนคำขอไปยังเซิร์ฟเวอร์
• ปัญหาทางเทคนิคหรือแนวทางปฏิบัติในการเขียนโปรแกรมที่ไม่ดี
• เทคนิคการแคช
• การกำหนดค่าเซิร์ฟเวอร์ที่ไม่เหมาะสม
• ไฟล์รูปภาพและวิดีโอจำนวนมาก

Drupal 9 Core และโมดูลที่กำหนดเองเพื่อเพิ่มประสิทธิภาพ

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

โมดูลหลัก

• ท่อใหญ่

โมดูล Drupal Big Pipe ทำให้สิ่งต่างๆ เร็วขึ้นโดยไม่ต้องกำหนดค่าเพิ่มเติม มาพร้อมกับ Drupal core ปรับปรุงประสิทธิภาพการรับรู้ส่วนหน้าโดยใช้ข้อมูลเมตาของความสามารถในการแคช และปรับปรุงไปป์ไลน์การเรนเดอร์

• แคชหน้าไดนามิกภายใน

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


• แคชหน้าภายใน

โมดูลแคชหน้าภายในช่วยแคชข้อมูลสำหรับผู้ใช้ที่ไม่ระบุชื่อ โมดูลนี้มีอยู่ในคอร์และเปิดใช้งานโดยค่าเริ่มต้น

เส้นทางการกำหนดค่า: admin/config/development/performance

ที่นี่คุณสามารถล้างแคช ตั้งค่าอายุสูงสุดของเบราว์เซอร์และพร็อกซีแคช และเปิด/ปิดการตั้งค่าการรวม

Advagg-โมดูล
โมดูลแคชหน้าภายใน

โมดูลที่สนับสนุน

  • การรวม CSS/JS ขั้นสูง

    โมดูล Advagg มาพร้อมกับโมดูลย่อยอื่นๆ เช่น -
  • AdvAgg Cdn: ช่วยในการโหลดเนื้อหา (CSS/JS) จาก CDN . สาธารณะ
  • AdvAgg CSS/JS Validator: ตรวจสอบไฟล์ CSS และ JS
  • AdvAgg External Minifier: ลดขนาด Javascript และ/หรือ CSS ด้วยตัวย่อบรรทัดคำสั่ง
  • AdvAgg Minify CSS : ช่วยในการย่อไฟล์ css ด้วย minifier บุคคลที่สาม
  • AdvAgg Minify JS : ช่วยในการย่อไฟล์ js ด้วย mi . บุคคลที่สาม
  • AdvAgg Modifier : อนุญาตให้แก้ไขอาร์เรย์ CSS และ JS (อาจมีปัญหาความเข้ากันได้)
  • ตัวเพิ่มประสิทธิภาพความเข้ากันได้ของ AdvAgg Old Internet Explorer

เส้นทางการกำหนดค่า: /admin/config/development/performance/advagg

โมดูลนี้ยังสนับสนุนเทคนิคการบีบอัดไฟล์ เช่น gzip และ brotli โมดูลนี้ช่วยลดจำนวนคำขอ http ดังนั้นจึงช่วยปรับปรุงประสิทธิภาพของเว็บไซต์ได้อย่างมาก

  • Blazy

โมดูล Drupal 9 Blazy ให้การโหลดภาพแบบ Lazy Loading เพื่อประหยัดแบนด์วิดท์และหลีกเลี่ยงอัตราตีกลับที่สูงขึ้น Lazy Loading เป็นเทคนิคที่โหลดภาพเฉพาะเมื่อผู้ใช้อยู่ในพื้นที่ที่มองเห็นได้เท่านั้น เทคนิคหลายเสิร์ฟนี้ช่วยประหยัดเวลาและข้อมูล

เส้นทางการกำหนดค่า: /admin/config/media/blazy

ที่นี่ คุณสามารถเปิด/ปิด Blazy กำหนดค่าเอฟเฟกต์ตัวยึดตำแหน่ง และยังสามารถตั้งค่าออฟเซ็ตซึ่งกำหนดว่าผู้ใช้จะมองเห็นภาพได้เร็วเพียงใด

โมดูล Blazy

โมดูล Blazy
  • CDN

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

เส้นทางการกำหนดค่า: /admin/config/services/cdn

CDN-โมดูล
การตั้งค่าโมดูล CDN

ที่นี่ คุณสามารถเปิด/ปิดใช้งาน CDN ระบุ URL การทำแผนที่ และเลือก/ยกเลิกการเลือกการแคชไฟล์ตลอดไป

การปรับปรุงประสิทธิภาพด้วยแนวทางปฏิบัติการเข้ารหัสที่ดีที่สุด

  • ใช้ isset() ทับ array_key_exist()

isset() วิธีการเร็วกว่า array_key_exist() อย่างมาก ความแตกต่างที่สำคัญระหว่าง isset และ array_key_exist คือ array_key_exists จะบอกคุณอย่างแน่นอนว่ามีคีย์อยู่ในอาร์เรย์หรือไม่ โดยที่ isset จะคืนค่า จริง ต่อเมื่อคีย์/ตัวแปรมีอยู่และไม่เป็นค่าว่าง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตรวจสอบนี้ ที่นี่ สำหรับการเปรียบเทียบเกณฑ์มาตรฐาน

  • การใช้เอนทิตีแบบสอบถาม ()

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

  • ใช้เมธอด loadMultiple() แทนการวนซ้ำ

หากคุณมี 10 nids (รหัสโหนด) และคุณกำลังวนซ้ำเพื่อโหลดแต่ละโหนด แสดงว่าคุณกำลังทำการสืบค้น 10 รายการไปยังฐานข้อมูล ในขณะที่ใช้ loadMultiple() จะถูกลดเหลือเพียงแบบสอบถามฐานข้อมูลเดียว

  • เก็บเอาไว้

การใช้ Cache API ใน Drupal 9 คุณสามารถแคชตัวแสดง อาร์เรย์การตอบสนอง หรือวัตถุได้ มีข้อมูลเมตาการแคชความสามารถในการแสดงผลสามรายการใน Drupal 9

  1. แท็กแคช

    แท็กแคชใช้เพื่อแคชข้อมูลเมื่อขึ้นอยู่กับเอนทิตีหรือการกำหนดค่าของ Drupal ไวยากรณ์สำหรับสิ่งนี้คือ cache-item:identifier เช่น โหนด:5 ผู้ใช้:3
  2. บริบทแคช

    ไวยากรณ์:
    • ระยะเวลาแยกผู้ปกครองจากเด็ก
    • บริบทแคชที่มีชื่อพหูพจน์บ่งชี้ว่าอาจมีการระบุพารามิเตอร์ วิธีใช้: ต่อท้ายทวิภาค
    ตัวอย่าง: user.roles, user.roles:anonymous เป็นต้น
  3. แคชอายุสูงสุด

Cache max-age ใช้เพื่อแคชข้อมูลที่ละเอียดอ่อนด้านเวลา

  • พนักงานเข้าคิว / Batch

ในการประมวลผลข้อมูลจำนวนมากโดยไม่หมดเวลาของ php สามารถใช้การประมวลผลแบบกลุ่มหรือผู้ปฏิบัติงานในคิวได้ รายการในคิวทำงานเฉพาะเมื่อ cron รันและรันในระยะเวลาเล็กน้อย ผู้ปฏิบัติงานคิวมีสองประเภท: เชื่อถือได้และไม่น่าเชื่อถือ เจ้าหน้าที่คิวที่เชื่อถือได้ช่วยให้แน่ใจว่ารายการในคิวทำงานอย่างน้อยหนึ่งครั้ง ในขณะที่คิวที่ไม่น่าเชื่อถืออาจข้ามรายการเนื่องจากหน่วยความจำล้มเหลวหรือการหยุดชะงักอื่นๆ การประมวลผลแบบแบตช์จะประมวลผลรายการจนกว่ารายการทั้งหมดจะเสร็จสิ้นในชุดที่มีเงื่อนไข เพื่อไม่ให้เกิดข้อผิดพลาดระหว่างการประมวลผลโดยไม่ต้องรอการรัน cron

ปรับปรุงประสิทธิภาพด้วยการกำหนดค่าเซิร์ฟเวอร์ที่ดีขึ้น

  • ใช้ Nginx แทน Apache

Nginx และ Apache ทั้งคู่เป็นเว็บเซิร์ฟเวอร์ที่ใช้กันอย่างแพร่หลาย Nginx มีความได้เปรียบเหนือ Apache ในการวัดประสิทธิภาพ มันยังเร็วและมีประสิทธิภาพมากกว่า apache Nginx ทำงานได้เร็วกว่า Apache ถึง 2.5 เท่าตามการทดสอบเกณฑ์ประสิทธิภาพซึ่งรันการเชื่อมต่อพร้อมกันสูงสุด 1,000 ครั้ง

  • HTTP/2.0 ผ่าน HTTP/1.1

HTTP/2.0 รองรับมัลติเพล็กซ์ ซึ่งต่างจาก HTTP/1.1 ที่บล็อกทรัพยากรอื่นๆ หากไม่สามารถโหลดทรัพยากรได้ HTTP/2.0 จะใช้การเชื่อมต่อ TCP เพื่อส่งข้อมูลสตรีมหลายรายการพร้อมกัน HTTP/2.0 ใช้เทคนิคการบีบอัดส่วนหัวขั้นสูงกว่า HTTP/1.1

 การกำหนดค่า Nginx สำหรับ HTTP/2.0
เซิร์ฟเวอร์ {
    ฟัง 443 ssl http2; //http2 การตั้งค่า
    ssl_certificate server.crt;
    ssl_certificate_key server.key;
}
  • การแสดงเนื้อหาที่บีบอัด

 การบีบอัดการตอบสนองมักจะลดขนาดของข้อมูลที่ส่ง อย่างไรก็ตาม เนื่องจากการบีบอัดเกิดขึ้นที่รันไทม์ มันจึงสามารถเพิ่มโอเวอร์เฮดในการประมวลผลได้มาก ซึ่งอาจส่งผลเสียต่อประสิทธิภาพการทำงาน 
การกำหนดค่า Nginx เพื่อให้บริการเนื้อหาที่บีบอัด:
เซิร์ฟเวอร์ {
    gzip บน;
    gzip_static บน;    
    gzip_types ข้อความ/ข้อความธรรมดา/แอปพลิเคชัน css/แอปพลิเคชัน json/ข้อความ x-javascript/แอปพลิเคชัน xml/แอปพลิเคชัน xml/xml+rss ข้อความ/จาวาสคริปต์;
    gzip_proxied ใด ๆ;
    gzip_vary บน;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;    
    ...
}
  • MariaDB แทน MySQL

MariaDB มีความเร็วที่ดีขึ้นเมื่อเทียบกับ MySQL ให้แคชและการทำดัชนีได้เร็วกว่า MySQL ในกรณีนี้เร็วกว่า MySql เกือบ 24% มีตัวชี้วัดสำคัญอื่นๆ เช่นกันที่ mariaDB ดีกว่า MySQL ดังนั้น MariaDb จึงเป็นที่ต้องการมากกว่า MySQL ในแง่ของประสิทธิภาพ

  • CDN

CDN ย่อมาจากเครือข่ายการจัดส่งเนื้อหา เป็นคลัสเตอร์ของเซิร์ฟเวอร์ที่กระจายอยู่ทั่วโลก (aka, จุดแสดงตน หรือ PoP) ซึ่งทำงานร่วมกันเพื่อส่งมอบเนื้อหาได้เร็วขึ้น CDN เก็บเวอร์ชันแคชของเนื้อหาไซต์และส่งเนื้อหาจากเซิร์ฟเวอร์ที่ใกล้ที่สุด ผู้ให้บริการ CDN ยอดนิยมบางราย ได้แก่ Cloudflare, Amazon cloudfront, Google cloud cdn เป็นต้น