เปิด Gzip ฝั่ง Server สำคัญไฉน

เว็บที่ดีควรโหลดเร็ว แสดงหน้าเว็บเร็ว บ้างก็ว่า หากเว็บโหลดช้ากว่า 3 วินาที คน 40% จะออกจากเว็บไซต์นั้นๆ การจับอันดับการค้นหาของ Google และ Search Engine เจ้าอื่นๆยังเอาความเร็วในการโหลดมาเป็นปัจจัยหลักอีกด้วย

เว็บจะโหลดเร็วหรือช้าขึ้นอยู่กับขนาดของไฟล์ทั้งหมดที่ browser ต้องทำการโหลด เพราะฉะนั้นเราต้องมาลดขนาดไฟล์ เราสามารถทำการ minify ไฟล์ต่างๆในเว็บของเราเช่นไฟล์ Javascript หรือ CSS หรือแม้กระทั้งพยายามทำให้ไฟล์รูปต่างๆในเว็บเราเล็กลง แต่วิธีที่กล่าวมานั้น อาจจะทำให้ไฟล์เล็กลง แต่มันก็อาจจะยังใหญ่สำหรับผู้ใช้อยู่ดี

ยกตัวอย่างเช่นเว็บ profile ของผม เว็บเล็กๆนี้ถูกเขียนด้วย React + jQuery และ package modules ต่างๆโดยใช้ webpack เป็นตัวรวบเร็ว หากผมไม่ได้ทำการ minify เลย ไฟล์ทั้งหมดในเว็บเล็กนี้มีขนาดถึง 4.2 MB แต่ถ้าทำการ minify ขนาดเว็บของผมลดลงเหลือเพียง 2.4 MB

แต่สำหรับเว็บเล็กๆแค่นี้ ถึงจะเป็น Single Page Application ก็ตาม ผมก็ยังคิดว่ามันใหญ่เกินไปอยู่ดี โดยเฉพาะหากมีคนเข้าเว็บ profile ของผมผ่านมือถือ โดยใช้ 4G สุดแสนเร็วของประเทศไทย (ประชด) ทางเลือกนึงที่ง่ายกว่าไปนั่งแก้ dependencies ของเว็บก็คือการเปิดใช้ gzip ฝั่ง server

gzip ว่ากันง่ายๆก็คือการบีบอัดไฟล์จากฝั่ง server เพื่อให้เราโหลดได้เร็วและให้ browser ไปแตกไฟล์กันเอง ซึ่งการใช้งานก็ง่ายมากเพียงเข้าไปแก้ config ของ nginx.conf (ปกติจะอยู่ที่ /etc/nginx/nginx.conf) ดังนี้

# ใส่ไว้ใน bracket http นะครับ
http {
  ...

  gzip on;
  gzip_http_version  1.1;

  # เลเวลการบีบอัดไฟล์ (1-9)
  gzip_comp_level    5;

  # ตั้งค่าขนาดขั้นต่ำที่จะบีบอัด เพราะถ้าบีบอัดไฟล์ที่เล็กอยู่แล้ว หลังจากบีบแล้วอาจจะใหญ่กว่าก่อนบีบซะอีก
  gzip_min_length    256;

  gzip_proxied       any;

  # ให้ proxy เก็บไฟล์ทั้งแบบ gzipped และปกติ เพื่อป้องกันผู้ที่ใช้ browser ที่รับ gzip ไม่ได้
  gzip_vary          on;

  # บีบอัดไฟล์ที่เป็น type ดังกล่าว
  gzip_types
    application/atom+xml
    application/javascript
    application/json
    application/rss+xml
    application/vnd.ms-fontobject
    application/x-font-ttf
    application/x-web-app-manifest+json
    application/xhtml+xml
    application/xml
    font/opentype
    image/svg+xml
    image/x-icon
    text/css
    text/plain
    text/x-component;
}

หลังจากนั้นก็เพียง restart nginx โดยการ sudo service nginx restart ก็เสร็จแล้ว สำหรับเว็บ profile ของผมนั้น ลดลงจาก 2.4 MB เหลือเพียง 402 KB

สำหรับผู้ที่ใช้ apache ลองอ่านบทความนี้ดูนะครับ

อ้างอิง