Gzip vs Brotli – คุณควรใช้วิธีการบีบอัดแบบใดและทำไม
เผยแพร่แล้ว: 2018-03-02Gzip กลายเป็นมาตรฐานทองคำสำหรับการบีบอัดไฟล์ในช่วงต้นทศวรรษ 1990 แต่ถ้าคุณยังคงใช้ในปี 2018 คุณอาจต้องพิจารณาเปลี่ยนไปใช้วิธีการบีบอัดที่ใหม่กว่า
แม้ว่า Gzip จะยังคงอยู่ในหัวใจของหลายๆ คน แต่นักพัฒนาเว็บก็หันมาใช้ตัวเลือกที่เหนือกว่า เช่น อัลกอริธึมการบีบอัด Brotli ของ Google มากขึ้น
ประวัติโดยย่อของการบีบอัดไฟล์
“G” ใน Gzip ย่อมาจาก GNU GNU เป็นระบบปฏิบัติการโอเพ่นซอร์สที่ใช้ Unix ที่พัฒนาขึ้นในทศวรรษ 1980 เมื่อถึงเวลานั้น Unisys และ IBM ได้จดสิทธิบัตรอัลกอริธึมของตนเองสำหรับการบีบอัดและคลายการบีบอัดไฟล์ ซึ่งทำให้เครื่องของพวกเขาสามารถเก็บข้อมูลได้มากขึ้น ดังนั้นโปรแกรมเมอร์ Jean-loup Gailly และ Mark Adler จึงสร้าง Gzip เป็นทางเลือกฟรีสำหรับผู้ใช้ GNU
Gzip ใหม่ไม่ได้เป็นเพียงของจริงราคาถูกเท่านั้น มันเร็วกว่าคู่แข่งที่มีลิขสิทธิ์จริง ๆ ส่งผลให้ผู้คนยังคงใช้บีบอัดไฟล์มาจนถึงทุกวันนี้ แม้ว่าจะง่ายต่อการยึดติดกับสิ่งที่คุณพอใจ แต่ก็มีอัลกอริธึมการบีบอัดที่หลากหลายซึ่งให้ผลลัพธ์การบีบอัดที่ดีกว่า Gzip ในปัจจุบัน นั่นคือสิ่งที่ Brotli เข้ามา
Brotli คืออะไร?
Brotli เป็นข้อกำหนดรูปแบบข้อมูลที่ใหม่กว่าซึ่งใช้ประโยชน์จากหลายอัลกอริธึมในการย่อข้อมูลอย่างมีประสิทธิภาพมากกว่า Gzip ในปี 2015 ข้อกำหนดของ Brotli เป็นแบบทั่วไปสำหรับการบีบอัดสตรีม HTTP ด้วยประเภทการเข้ารหัสเนื้อหา 'br'
Brotli พัฒนาโดย Jyrki Alakuijala และ Zoltan Szabadka ใช้อัลกอริธึมการบีบอัดแบบเดียวกับ Gzip แต่ยังได้รับการสนับสนุนโดยพจนานุกรมของคำและวลีที่ใช้บ่อยเพื่อให้ได้อัตราการบีบอัดที่ดีขึ้น
โปรดทราบว่าควรใช้ Gzip และ Brotli เพื่อบีบอัดไฟล์ข้อความเท่านั้น ไฟล์ไบนารีเช่น JPEG และ MP4 อาศัยอัลกอริธึมการบีบอัดเฉพาะรูปแบบของตัวเอง หากคุณพยายามบีบอัด JPEG ด้วย Brotli ไฟล์ที่ได้จะมีขนาดใหญ่กว่าต้นฉบับ
แม้ว่าจะไม่เป็นเช่นนั้นเสมอไป แต่ตอนนี้ Brotli ได้รับการสนับสนุนโดยเบราว์เซอร์หลักทั้งหมด
ในกรณีที่เบราว์เซอร์ไม่สนับสนุน Brotli ร้องขอเนื้อหาจากไซต์ที่ส่งไฟล์บีบอัด Brotli เซิร์ฟเวอร์จะสำรอง Gzip และส่งเนื้อหาที่เข้ารหัสซึ่งเบราว์เซอร์รองรับ - เนื่องจากเซิร์ฟเวอร์ได้รับการกำหนดค่าอย่างเหมาะสม
อะไรทำให้ Brotli ดีขึ้น?
จากการวิจัยที่จัดทำโดย CertSimple:
- กลุ่ม JavaScript ที่บีบอัดด้วย Brotli มี ขนาดเล็กกว่ากลุ่ม Javascript ที่บีบอัดด้วย Gzip 14 เปอร์เซ็นต์
- ไฟล์ HTML ที่บีบอัดโดย Broti มี ขนาดเล็กกว่าไฟล์ Gzip ที่เทียบเท่ากัน 21 เปอร์เซ็นต์
- ไฟล์ CSS ที่บีบอัดโดย Brotli มี ขนาดเล็กกว่าไฟล์ Gzip ที่บีบอัด 17 เปอร์เซ็นต์
เนื่องจากเว็บไซต์ส่วนใหญ่ใช้เนื้อหาทั้งสามประเภทนี้ ขนาดของเนื้อหาจึงแตกต่างกันมากเมื่อเปรียบเทียบกับ Gzip ในทางกลับกัน การประหยัดเหล่านี้จะทำให้ประสิทธิภาพแอปของคุณดีขึ้นอย่างเห็นได้ชัด
Gzip vs Brotli: ใช้ประโยชน์สูงสุดจาก Brotli
แม้ว่าสิ่งที่คุณอาจเคยได้ยินว่าการบีบอัดเนื้อหาด้วย Brotli นั้นไม่ได้ช้ากว่า Gzip ที่กล่าวว่า Gzip และ Brotli มีระดับการบีบอัดที่หลากหลาย และการตั้งค่าเริ่มต้นของ Brotli อาจส่งผลให้การบีบอัดช้าลงกว่าการตั้งค่าเริ่มต้นของ Gzip คุณจะต้องทำการปรับเปลี่ยน Brotli เพื่อให้เกิดความสมดุลที่ยอมรับได้ระหว่างขนาดไฟล์และความเร็วการบีบอัด
การตั้งค่าการบีบอัดที่เหมาะสมที่สุดขึ้นอยู่กับสิ่งที่คุณกำลังบีบอัดและเมื่อใด จุดเริ่มต้นที่ดีคือ Brotli 4 สำหรับการบีบอัดเนื้อหาไดนามิกที่เร็วขึ้น ในทางกลับกัน แอสเซทแบบคงที่สามารถบีบอัดให้แน่นขึ้นก่อนได้โดยไม่ลดความเร็วลง ดังนั้นการตั้งค่าเริ่มต้นเป็น “11” จึงเหมาะสมกว่าสำหรับเนื้อหาดังกล่าว
การติดตั้ง Brotli บนเว็บเซิร์ฟเวอร์ของคุณ
การเพิ่มการรองรับ Brotli ทำให้เกิดประโยชน์อย่างมากสำหรับความพยายามเพียงเล็กน้อย ขึ้นอยู่กับซอฟต์แวร์เว็บเซิร์ฟเวอร์ที่คุณใช้อยู่จะเป็นตัวกำหนดวิธีการรวมที่คุณต้องใช้ในการรวม Brotli ต่อไปนี้จะสรุปตัวเลือกบางส่วนที่ใช้ได้:
- Nginx มีส่วนขยาย Brotli ที่เสนอโดย Google
- Apache เสนอ ส่วนขยาย Brotli โดยเฉพาะ
- Microsoft IIS ไม่มีการสนับสนุน Brotli อย่างเป็นทางการ แต่มีโมดูลชุมชนที่เพิ่มการสนับสนุน
- Node.js คล้ายกับ Microsoft เนื่องจากไม่มีการสนับสนุนอย่างเป็นทางการ แต่มีโมดูลชุมชน
เพื่อแสดงตัวอย่างการติดตั้งอย่างรวดเร็ว สมมติว่าคุณกำลังเรียกใช้ Nginx ในกรณีนั้น คุณสามารถติดตั้งโมดูล ngx_brotli ด้วยวิธีต่อไปนี้:
cd nginx-1.x.x $ ./configure --add-module=/path/to/ngx_brotli $ make && make install
ถัดไป เพิ่มสิ่งต่อไปนี้ในบล็อก HTTPS (Brotli ทำงานบน HTTPS เท่านั้น):
brotli on; brotli_static on; brotli_comp_level 4; brotli_types text/plain text/css application/javascript application/json image/svg+xml application/xml+rss;
คุณสามารถแก้ไขคำสั่งด้านบนได้ตามที่เห็นสมควร
สุดท้าย ป้อนข้อมูลต่อไปนี้เพื่อรีสตาร์ท NGINX และเริ่มเก็บเกี่ยวผลประโยชน์:
sudo systemctl restart nginx
การใช้ Brotli กับเนื้อหาที่บีบอัดล่วงหน้า
Brotli นั้นยอดเยี่ยมสำหรับการส่งเนื้อหาที่บีบอัดล่วงหน้าได้เร็วกว่า Gzip มาก นี่เป็นเพราะคุณสามารถบีบอัดมันได้ที่ระดับสูงสุดของ Brotli (11) จากนั้นให้เซิร์ฟเวอร์ต้นทางรับมันทุกครั้งที่ร้องขอ
การตั้งค่าประเภทนี้ใช้งานได้ดีกับ Webpack เนื่องจากปลั๊กอิน Webpack พร้อมใช้งานเพื่อบีบอัดทรัพย์สินแบบคงที่ของคุณเป็นทั้ง Gzip และ Brotli ดังนั้นจึงไม่จำเป็นต้องมีการบีบอัดข้อมูลแบบทันทีทันใด ซึ่งหมายความว่าระบบจะบันทึกเวลาที่ใช้ในการบีบอัดไฟล์เป็นอย่างอื่น
เรียนรู้เพิ่มเติมเกี่ยวกับวิธีใช้ Webpack เพื่อสร้างเนื้อหาที่บีบอัดด้วย Brotli
CDN ของคุณรองรับ Brotli หรือไม่?
ในการเก็บเกี่ยวผลประโยชน์ของ Brotli อย่างเต็มที่ คุณต้องมีเครือข่ายการจัดส่งเนื้อหาที่รองรับ ตัวอย่างเช่น KeyCDN ได้เปิดตัวการสนับสนุน Brotli ในปีที่แล้วสำหรับลูกค้าทุกคนโดยไม่มีค่าใช้จ่ายเพิ่มเติม ดังนั้น ไซต์ของคุณจะไม่เพียงได้รับประโยชน์จากขนาดไฟล์ที่ลดลงด้วยการบีบอัด Brotli ที่ดีขึ้นเท่านั้น แต่ยังได้ประโยชน์จากเวลาแฝงที่ลดลงด้วยเนื่องจากสินทรัพย์ถูกแคชไว้บนเซิร์ฟเวอร์ Edge ที่ใกล้ชิดกับผู้เยี่ยมชมของคุณมากขึ้น
วิธีนี้ต้องการให้เซิร์ฟเวอร์ต้นทางของคุณรองรับ Brotli และการบีบอัดจริงจะเกิดขึ้นที่ฝั่งเซิร์ฟเวอร์ต้นทาง อีกครั้ง ซึ่งช่วยประหยัดเวลาและหลีกเลี่ยงความจำเป็นในการบีบอัดข้อมูลแบบทันทีทันใดซึ่งอาจส่งผลเสียต่อประสิทธิภาพการทำงาน
Gzip vs Brotli: โดยสรุป
ความพยายามเพียงเล็กน้อยในการเพิ่ม Brotli ลงในเว็บเซิร์ฟเวอร์ของคุณนั้นคุ้มค่ากับการประหยัดขนาดไฟล์อย่างมาก แม้ว่าบางครั้ง Brotli อาจทำงานช้าลงในการตั้งค่าการบีบอัดสูงสุด แต่คุณก็สามารถบรรลุความสมดุลในอุดมคติระหว่างความเร็วการบีบอัดและขนาดไฟล์ได้อย่างง่ายดายโดยการปรับการตั้งค่า
ในขณะที่ใช้ Brotli สามารถเปลี่ยนเว็บแอปที่เร็วให้กลายเป็นเว็บที่เร็วขึ้นได้ แต่ก็ไม่จำเป็นต้องทำให้แอปที่ช้าเร็วเสมอไป เนื่องจาก Brotli บีบอัดเฉพาะเนื้อหาแบบข้อความ คุณจึงต้องเพิ่มประสิทธิภาพรูปภาพด้วยวิธีอื่น หากคุณยังไม่ได้ข้ามไปที่ HTTP/2 การทำเช่นนั้นอาจสร้างความแตกต่างอย่างมากในประสิทธิภาพของแอปของคุณ ทุกมิลลิวินาทีมีค่า ดังนั้นการดำเนินการใดๆ ที่คุณทำเพื่อเร่งความเร็วแอปพลิเคชันของคุณจะเพิ่มโอกาสในการรักษาผู้ใช้ไว้