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

มีหลายสิ่งที่ส่งผลต่อประสิทธิภาพของเว็บไซต์ บางส่วนของพวกเขาคือ:
• ผู้ให้บริการของคุณ (โฮสติ้ง DNS เป็นต้น)
• จำนวนคำขอไปยังเซิร์ฟเวอร์
• ปัญหาทางเทคนิคหรือแนวทางปฏิบัติในการเขียนโปรแกรมที่ไม่ดี
• เทคนิคการแคช
• การกำหนดค่าเซิร์ฟเวอร์ที่ไม่เหมาะสม
• ไฟล์รูปภาพและวิดีโอจำนวนมาก
Drupal 9 Core และโมดูลที่กำหนดเองเพื่อเพิ่มประสิทธิภาพ
มีโมดูลที่สนับสนุนและโมดูลหลักมากมายใน Drupal 9 ซึ่งอาจเป็นประโยชน์ในการปรับปรุงประสิทธิภาพของเว็บไซต์ของคุณ คุณสามารถปรับปรุงประสิทธิภาพของไซต์ได้อย่างมากโดยปฏิบัติตามแนวทางการเข้ารหัสและการกำหนดค่าเซิร์ฟเวอร์ที่เหมาะสม
โมดูลหลัก
• ท่อใหญ่
โมดูล Drupal Big Pipe ทำให้สิ่งต่างๆ เร็วขึ้นโดยไม่ต้องกำหนดค่าเพิ่มเติม มาพร้อมกับ Drupal core ปรับปรุงประสิทธิภาพการรับรู้ส่วนหน้าโดยใช้ข้อมูลเมตาของความสามารถในการแคช และปรับปรุงไปป์ไลน์การเรนเดอร์
• แคชหน้าไดนามิกภายใน
โมดูล Drupal 9 นี้ช่วยในการแคชเนื้อหาแบบไดนามิก มีประโยชน์สำหรับทั้งผู้ใช้ที่ไม่ระบุตัวตนและรับรองความถูกต้อง โมดูลนี้ไม่มีใน Drupal 7 หน้าที่ร้องขอโดยผู้ใช้จะถูกจัดเก็บในครั้งแรกที่พวกเขาได้รับการร้องขอ และสามารถนำกลับมาใช้ใหม่ได้เมื่อมีการร้องขอหน้าเดียวกันต่อไป
• แคชหน้าภายใน
โมดูลแคชหน้าภายในช่วยแคชข้อมูลสำหรับผู้ใช้ที่ไม่ระบุชื่อ โมดูลนี้มีอยู่ในคอร์และเปิดใช้งานโดยค่าเริ่มต้น
เส้นทางการกำหนดค่า: admin/config/development/performance
ที่นี่คุณสามารถล้างแคช ตั้งค่าอายุสูงสุดของเบราว์เซอร์และพร็อกซีแคช และเปิด/ปิดการตั้งค่าการรวม

โมดูลที่สนับสนุน
- การรวม 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
CDN
โมดูล Drupal 9 CDN ช่วยในการรวม CDN เข้ากับเว็บไซต์ Drupal ได้อย่างง่ายดาย ช่วยให้บริการเนื้อหาแบบคงที่จากเซิร์ฟเวอร์ CDN เพื่อเพิ่มความเร็วในการส่งเนื้อหา นอกจากนั้น โมดูลนี้ยังง่ายต่อการกำหนดค่า
เส้นทางการกำหนดค่า: /admin/config/services/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
- แท็กแคช
แท็กแคชใช้เพื่อแคชข้อมูลเมื่อขึ้นอยู่กับเอนทิตีหรือการกำหนดค่าของ Drupal ไวยากรณ์สำหรับสิ่งนี้คือ cache-item:identifier เช่น โหนด:5 ผู้ใช้:3 - บริบทแคช
ไวยากรณ์:
• ระยะเวลาแยกผู้ปกครองจากเด็ก
• บริบทแคชที่มีชื่อพหูพจน์บ่งชี้ว่าอาจมีการระบุพารามิเตอร์ วิธีใช้: ต่อท้ายทวิภาค
ตัวอย่าง: user.roles, user.roles:anonymous เป็นต้น - แคชอายุสูงสุด
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 เป็นต้น
