บทความ

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

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

บทนำ: ทำไมต้องนับทราฟฟิกไว้ล่วงหน้า

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

สิ่งที่คุณจะได้จากคู่มือนี้

หลังจากอ่านคู่มือจบ คุณจะสามารถแยกเว็บเพจออกเป็นส่วนประกอบตามน้ำหนัก เขียนตัวนับทราฟฟิกง่ายๆ ด้วย Python หรือ Node ใช้เทคนิคประหยัดที่ช่วยลดการใช้งานลง 70-95% และคำนวณงบประมาณโปรเจกต์ได้อย่างถูกต้อง อีกทั้งยังจะเข้าใจว่าช่วงไหนคุ้มที่จะจ่ายตามปริมาณ และช่วงไหนควรใช้แพ็กเกจไม่จำกัด

คู่มือนี้เหมาะสำหรับใคร

  • ผู้ที่ทำการเก็บข้อมูล (parsing) และรวบรวมข้อมูลผ่านพร็อกซี
  • นักระบบอัตโนมัติที่ต้องส่งคำขอเป็นชุดๆ
  • นักการตลาดและนักวิเคราะห์ที่ทำงานกับแหล่งข้อมูลภายนอก
  • ทุกคนที่อยากจ่ายน้อยลงแต่ได้ผลลัพธ์เท่าเดิม

สิ่งที่ควรรู้มาก่อน

ความเข้าใจพื้นฐานเกี่ยวกับ HTTP request จะเป็นข้อดี แต่ไม่จำเป็น เราจะอธิบายคำศัพท์สำคัญด้วยภาษาง่ายๆ สำหรับภาคปฏิบัติ แค่มีประสบการณ์เล็กน้อยในการรันสคริปต์ Python หรือ Node.js ก็พอ แต่เราจะให้โค้ดพร้อมคอมเมนต์มาให้แล้ว

ใช้เวลานานเท่าไหร่

การอ่านและทำความเข้าใจทฤษฎีใช้เวลาประมาณ 30 นาที การตั้งค่าตัวนับทราฟฟิกใช้เวลา 15-20 นาที ส่วนการนำเทคนิคประหยัดไปใช้ในโปรเจกต์ของคุณนั้นขึ้นอยู่กับความซับซ้อน แต่เรื่องพื้นฐานคุณจะทำได้ภายในหนึ่งชั่วโมง

การเตรียมตัวเบื้องต้น: เครื่องมือและการเข้าถึง

ก่อนจะนับและประหยัดทราฟฟิก เรามาเตรียมเครื่องมือกันก่อน ทั้งหมดฟรี และใช้ได้บน Windows, macOS และ Linux

เครื่องมือที่จำเป็น

  • Python 3.10 ขึ้นไป - สำหรับสคริปต์นับทราฟฟิก
  • Node.js 18 ขึ้นไป - อีกทางเลือกสำหรับคนที่ถนัด JavaScript
  • ไลบรารี requests สำหรับ Python - ติดตั้งด้วยคำสั่ง pip install requests
  • ไลบรารี Playwright - ใช้ทำงานกับ headless browser ติดตั้งผ่าน pip install playwright และ playwright install
  • เบราว์เซอร์ที่มีเครื่องมือนักพัฒนา - ใช้ตัวไหนก็ได้ที่ทันสมัย แผง Network ในตัวจำเป็นสำหรับการแยกวิเคราะห์หน้าด้วยมือ
  • สิทธิ์เข้าใช้งานแดชบอร์ดของบริการพร็อกซีของคุณ - ไว้ดูสถิติทราฟฟิกจริง

ความต้องการของระบบ

คอมพิวเตอร์ที่ผลิตในรอบสิบปีก็ใช้ได้ แรม 4 กิกะไบต์พอ แต่สำหรับ headless browser แนะนำ 8 กิกะไบต์จะสบายกว่า ต้องใช้พื้นที่ดิสก์ประมาณ 2 กิกะไบต์สำหรับเอนจินเบราว์เซอร์ของ Playwright

สิ่งที่ต้องติดตั้งและตั้งค่า

  1. ดาวน์โหลดและติดตั้ง Python จากเว็บไซต์ทางการ ตอนติดตั้งให้ติ๊กตัวเลือกเพิ่มลงใน PATH
  2. เปิดเทอร์มินัลแล้วตรวจสอบการติดตั้งด้วยคำสั่ง python --version
  3. ติดตั้งไลบรารี requests ด้วยคำสั่ง pip install requests
  4. หากวางแผนจะใช้เบราว์เซอร์ ให้ติดตั้ง Playwright ด้วยคำสั่ง pip install playwright แล้วตามด้วย playwright install chromium
  5. ตรวจสอบให้แน่ใจว่าคุณมีข้อมูลการเชื่อมต่อพร็อกซีพร้อม: ที่อยู่ พอร์ต ชื่อผู้ใช้ และรหัสผ่าน

เคล็ดลับ: สร้างโฟลเดอร์แยกสำหรับทดลองเรื่องทราฟฟิก เพื่อไม่ให้ไฟล์ปนกัน และย้อนกลับการเปลี่ยนแปลงได้ง่ายหากมีอะไรผิดพลาด

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

✅ การตรวจสอบ: ถ้าคำสั่ง python --version และ pip --version คืนค่าเลขเวอร์ชันโดยไม่มีข้อผิดพลาด แสดงว่าเตรียมพร้อมเรียบร้อย

แนวคิดพื้นฐานแบบเข้าใจง่าย

ก่อนจะนับไบต์ มาทำความเข้าใจคำศัพท์กันก่อน แบบไม่ใช้ศัพท์เทคนิค ง่ายๆ

ทราฟฟิกคืออะไร

ทราฟฟิกคือปริมาณข้อมูลที่ไหลผ่านการเชื่อมต่อของคุณ ประกอบด้วยสิ่งที่คุณส่งไปยังเซิร์ฟเวอร์และสิ่งที่เซิร์ฟเวอร์ตอบกลับมา เมื่อจ่ายตามกิกะไบต์จะนับทั้งสองทิศทาง แต่ทราฟฟิกขาเข้า (คำตอบจากเซิร์ฟเวอร์) มักจะมากกว่าขาออกหลายเท่า

คำขอประกอบด้วยอะไรบ้าง

เมื่อคุณเปิดหน้าเว็บ เบราว์เซอร์จะส่งคำขอและได้รับคำตอบ คำตอบประกอบด้วยส่วนหัว (ข้อมูลเกี่ยวกับขนาด ชนิด การเข้ารหัส) และส่วนเนื้อหา (ตัวจริง: HTML รูปภาพ สคริปต์) เนื้อหามักจะหนักกว่าส่วนหัวมาก

คำศัพท์สำคัญ

  • GET request - คำขอทั่วไปเพื่อรับเนื้อหา จะคืนทั้งส่วนหัวและเนื้อหา
  • HEAD request - คำขอเฉพาะส่วนหัว ไม่มีเนื้อหา ช่วยประหยัดทราฟฟิกเมื่อไม่ต้องการเนื้อหา
  • Content-Length - ส่วนหัวที่บอกขนาดเนื้อหาคำตอบเป็นไบต์
  • Accept-Encoding - ส่วนหัวที่ใช้ขอให้เซิร์ฟเวอร์บีบอัดคำตอบ
  • gzip และ brotli - อัลกอริทึมการบีบอัดที่ลดขนาดข้อมูลข้อความได้หลายเท่า
  • Redirect - การเปลี่ยนเส้นทางจากที่อยู่หนึ่งไปยังอีกที่อยู่หนึ่ง การเปลี่ยนเส้นทางแต่ละครั้งคือคำขอและทราฟฟิกที่เพิ่มขึ้น
  • Headless browser - เบราว์เซอร์ที่ไม่มีหน้าต่างกราฟิก ควบคุมด้วยโค้ด โหลดทุกอย่างเหมือนเบราว์เซอร์ทั่วไป รวมถึงทรัพยากรหนักๆ

หลักการสำคัญของการประหยัด

อย่าโหลดสิ่งที่จำเป็นต้องใช้สำหรับงาน ฟังดูง่ายแต่การละเมิดกฎข้อนี้แหละที่กินเงิน ถ้าคุณต้องการแค่ข้อความจากหน้ารายละเอียดสินค้า คุณก็ไม่ต้องการรูปสินค้า วิดีโอรีวิว แบนเนอร์โฆษณา หรือตัวติดตามวิเคราะห์

น้ำหนักของหน้าเว็บประกอบด้วยอะไรบ้าง: วิเคราะห์จากของจริง

จุดประสงค์ของส่วนนี้คือการแสดงด้วยตัวอย่างจริงว่า น้ำหนักส่วนใหญ่ของหน้าเว็บมักไม่จำเป็นสำหรับคุณ เราจะใช้หน้าร้านค้าออนไลน์ทั่วๆ ไปเป็นตัวอย่าง

องค์ประกอบของน้ำหนักและสัดส่วน

หน้าเว็บทั่วไปในปัจจุบันหนักประมาณ 2 ถึง 5 เมกะไบต์ โดยกระจายประมาณนี้:

  • รูปภาพ - 50-70% ของน้ำหนัก รูปสินค้า แบนเนอร์ ไอคอนความละเอียดสูง
  • สคริปต์ JavaScript - 15-25% ตรรกะของอินเทอร์เฟซ วิดเจ็ต แชท ตัวนับ
  • ฟอนต์ - 5-10% ฟอนต์ที่กำหนดเองจะโหลดเป็นไฟล์แยก
  • เครื่องมือวิเคราะห์และตัวติดตาม - 5-15% พิกเซล ระบบสถิติ สคริปต์โฆษณา
  • วิดีโอและสื่อ - ตั้งแต่ศูนย์ไปจนถึงมหาศาล วิดีโอที่เล่นอัตโนมัติทำลายงบประมาณ
  • เอกสาร HTML - แค่ 1-5% นี่คือที่ที่ข้อมูลที่คุณต้องการมักอยู่

บทสรุปที่นำไปใช้ได้จริง

ถ้าคุณต้องการข้อมูลแบบข้อความจาก HTML คุณสามารถตัดน้ำหนักของหน้าเว็บออกไป 90-95% หน้าเว็บ 5 เมกะไบต์จะกลายเป็น HTML ที่มีประโยชน์แค่ 100-200 กิโลไบต์ ซึ่งไม่ใช่การพูดเกินจริง แต่เป็นภาพที่พบได้ทั่วไป

วิธีแยกวิเคราะห์หน้าด้วยตนเอง

  1. เปิดหน้าเว็บในเบราว์เซอร์
  2. กด F12 เพื่อเปิดเครื่องมือนักพัฒนา
  3. ไปที่แท็บ Network
  4. รีเฟรชหน้าด้วยปุ่ม F5
  5. ที่ด้านล่างของแผง คุณจะเห็นขนาดข้อมูลที่โหลดทั้งหมดและจำนวนคำขอ
  6. จัดเรียงคำขอตามคอลัมน์ Size เพื่อดูทรัพยากรที่หนักที่สุด
  7. สังเกตคอลัมน์ Type: img คือรูปภาพ script คือสคริปต์ font คือฟอนต์

เคล็ดลับ: ในแผง Network มีตัวกรองตามประเภททรัพยากร กดปุ่ม Img เพื่อดูน้ำหนักรวมของรูปภาพทั้งหมด ซึ่งตัวเลขนี้มักทำให้ตกใจ

✅ การตรวจสอบ: คุณควรจะเห็นว่าเอกสาร HTML หนักน้อยกว่าผลรวมของรูปภาพและสคริปต์หลายสิบเท่า ซึ่งยืนยันว่าแหล่งประหยัดหลักคือการตัดสื่อต่างๆ ออก

ขั้นตอนที่ 1: วัดปริมาณการใช้จริงของงานของคุณ

เป้าหมายของขั้นตอนนี้: เรียนรู้วิธีคำนวณอย่างแม่นยำว่าสคริปต์ของคุณใช้ทราฟฟิกไปเท่าไร เพื่อจัดการปริมาณการใช้งานอย่างมีสติ

การนับทราฟฟิกด้วย Python

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

  1. สร้างไฟล์ traffic_counter.py ในโฟลเดอร์ทำงานของคุณ
  2. ใส่บรรทัด import requests ในไฟล์
  3. กำหนดค่าพร็อกซีในรูปแบบดิกชันนารีที่มีคีย์ http และ https
  4. ก่อนลูปคำขอ ให้สร้างตัวแปร total_bytes เท่ากับศูนย์
  5. หลังจากแต่ละคำขอ ให้นำความยาวของ response.content มาบวกเพิ่ม
  6. เพื่อความแม่นยำ ให้เพิ่มขนาดส่วนหัวโดยนับความยาวของสตริงที่แสดง
  7. สุดท้ายหาร total_bytes ด้วย 1048576 เพื่อให้ได้หน่วยเมกะไบต์

ตรรกะง่ายๆ: len(response.content) จะคืนจำนวนไบต์ในเนื้อหาคำตอบ ส่วนหัวคำนวณจากผลรวมความยาวของคีย์และค่า สำหรับงานส่วนใหญ่ เนื้อหาคำตอบคือส่วนหลักของทราฟฟิก ดังนั้นแม้จะนับแค่ content ก็ได้ความแม่นยำประมาณ 95%

จุดสำคัญ: response.content จะคืนข้อมูลที่แตกซิปแล้ว หากเซิร์ฟเวอร์ส่งคำตอบที่ถูกบีบอัดมา ทราฟฟิกจริงในเครือข่ายอาจน้อยกว่าเนื่องจากการบีบอัด เพื่อวัดจำนวนไบต์ที่ส่งจริง ให้ดูส่วนหัว Content-Length จากคำตอบ ซึ่งแสดงขนาดเนื้อหาตามที่ส่งผ่านเครือข่าย

การนับไบต์ที่ส่งจริงอย่างแม่นยำ

  1. หลังคำขอ ให้เข้าถึง response.headers.get('Content-Length')
  2. ถ้ามีค่า ให้นำมาใช้เป็นน้ำหนักจริงของเนื้อหาเป็นไบต์
  3. ถ้าไม่มีส่วนหัวนี้ (เช่นในกรณีสตรีมมิ่ง) ให้ใช้ความยาวของ content โดยจำไว้ว่านี่คือขนาดที่แตกซิปแล้ว

การนับทราฟฟิกด้วย Node.js

ใน Node คุณสามารถใช้โมดูล https ในตัวหรือไลบรารี axios หลักการเดียวกัน: รวมขนาดข้อมูลที่ได้รับ

  1. สร้างไฟล์ traffic_counter.js
  2. เชื่อมต่อไปยังไลบรารีสำหรับส่งคำขอ
  3. สร้างตัวแปร totalBytes โดยมีค่าเป็นศูนย์
  4. สำหรับแต่ละคำตอบ ให้นำส่วนหัว content-length หรือนับความยาวของบัฟเฟอร์ข้อมูล
  5. บวกค่านั้นเข้ากับ totalBytes
  6. สุดท้ายแสดง totalBytes หารด้วย 1048576 เพื่อให้ได้เมกะไบต์

เคล็ดลับ: บันทึกน้ำหนักของแต่ละคำขอแยกกัน อย่าเห็นแต่ยอดรวม แล้วคุณจะเห็นทันทีว่า URL ไหนกินเยอะที่สุด และจะได้ปรับให้ตรงจุด

เทียบกับสถิติในแดชบอร์ด

ตัวนับของคุณเองกับสถิติของบริการพร็อกซีอาจคลาดเคลื่อนเล็กน้อย ซึ่งเป็นเรื่องปกติ สาเหตุที่คลาดเคลื่อน:

  • บริการนับทราฟฟิกทั้งหมดของการเชื่อมต่อ รวมถึงแพ็กเก็ตควบคุมและการสร้างช่องทางที่ปลอดภัย
  • ตัวนับของคุณพิจารณาเฉพาะน้ำหนักของคำตอบที่มีประโยชน์
  • ส่วนหัวของคำขอ การแลกเปลี่ยน DNS และการสร้างการเชื่อมต่อใหม่เพิ่มโอเวอร์เฮดเล็กน้อย
  1. รันสคริปต์ของคุณ 100 คำขอแล้วบันทึกยอดจากตัวนับของคุณ
  2. เข้าแดชบอร์ดของบริการพร็อกซีก่อนและหลังรัน
  3. บันทึกความแตกต่างของตัวเลขในแดชบอร์ด
  4. เปรียบเทียบกับตัวนับของคุณ ความคลาดเคลื่อน 10-20% เป็นเรื่องปกติ นั่นคือค่าใช้จ่ายเพิ่มเติมของการเชื่อมต่อ

⚠️ คำเตือน: ควรเผื่อโอเวอร์เฮดของการเชื่อมต่อไว้ในงบประมาณเสมอ ปริมาณการใช้จริงมักสูงกว่าที่ตัวนับฝั่งไคลเอนต์คำนวณไว้ 10-20%

✅ การตรวจสอบ: ถ้าตัวนับของคุณแสดงตัวเลขใกล้เคียงกับผลต่างในแดชบอร์ดเมื่อปรับด้วยโอเวอร์เฮด แสดงว่าการนับถูกต้องและคุณเชื่อถือการวัดของคุณได้

ขั้นตอนที่ 2: เทคนิคพื้นฐานในการลดทราฟฟิก

เป้าหมายของขั้นตอนนี้: ใช้เทคนิคง่ายๆ ที่ช่วยลดปริมาณการใช้โดยไม่ต้องเขียนโค้ดซับซ้อน เริ่มจากวิธีที่เข้าถึงได้ง่ายที่สุด

เทคนิคที่ 1: เปิดการบีบอัดผ่าน Accept-Encoding

ข้อมูลแบบข้อความ (HTML, JSON, สคริปต์) ถูกบีบอัดได้ดีมาก เมื่อขอให้เซิร์ฟเวอร์ส่งคำตอบที่บีบอัด คุณจะลดทราฟฟิกได้ 3-5 เท่า

  1. เพิ่ม Accept-Encoding ในส่วนหัวคำขอด้วยค่า gzip, br, deflate
  2. ไลบรารี requests ใน Python ทำสิ่งนี้ให้อัตโนมัติและแตกซิปคำตอบให้เอง
  3. ตรวจสอบให้แน่ใจว่าคุณไม่ได้ปิดตัวเลือกนี้ด้วยตนเอง
  4. ตรวจสอบส่วนหัวของคำตอบ Content-Encoding: ถ้ามี gzip หรือ br แสดงว่าการบีบอัดทำงาน

br ในที่นี้หมายถึง brotli ซึ่งเป็นอัลกอริทึมที่ทันสมัยกว่าที่บีบอัดได้แน่นกว่า gzip เซิร์ฟเวอร์ส่วนใหญ่รองรับ สำหรับการใช้งาน brotli ใน Python ให้ติดตั้งแพ็กเกจ brotli ด้วยคำสั่ง pip install brotli

เคล็ดลับ: การบีบอัดฟรีในแง่ของทราฟฟิก และแทบไม่กินทรัพยากรซีพียู ควรเปิดไว้เสมอ นี่คือสิ่งแรกที่ต้องตรวจสอบเมื่อมีการใช้งานสูง

เทคนิคที่ 2: ใช้ HEAD แทน GET

เมื่อคุณต้องการแค่ส่วนหัว เช่น ตรวจสอบว่าหน้านั้นมีอยู่จริง รู้ขนาดหรือวันที่แก้ไข ให้ใช้ HEAD request ซึ่งจะคืนส่วนหัวโดยไม่มีเนื้อหา

  1. แทนที่จะใช้ requests.get ให้เรียก requests.head
  2. ตรวจสอบส่วนหัวที่ต้องการใน response.headers
  3. เนื้อหาจะไม่ถูกส่งมา การประหยัดได้ถึง 99% ในการตรวจสอบแบบนี้

สถานการณ์ทั่วไปสำหรับ HEAD: ตรวจสอบสถานะลิงก์ หาขนาดไฟล์ก่อนดาวน์โหลด ตรวจสอบวันที่แก้ไขล่าสุดสำหรับแคช

เทคนิคที่ 3: หลีกเลี่ยงรีไดเรกต์ที่ไม่จำเป็น

การรีไดเรกต์แต่ละครั้งคือคำขอและคำตอบเต็มรูปแบบเพิ่มเติม หากเว็บไซต์เปลี่ยนเส้นทางจาก http ไป https หรือจากที่อยู่หนึ่งไปอีกที่อยู่หนึ่งตลอดเวลา คุณก็จ่ายเงินเพื่อการวนซ้ำที่เกินจำเป็น

  1. ใช้ที่อยู่สุดท้ายโดยตรง: มี https และไม่มีสแลชเกินจำเป็น
  2. ถ้ารู้ว่าที่อยู่รีไดเรกต์ไป www ให้เรียกเวอร์ชัน www ทันที
  3. ในไลบรารี คุณสามารถปิดการตามรีไดเรกต์อัตโนมัติด้วยพารามิเตอร์ allow_redirects เท่ากับ False เพื่อควบคุมกระบวนการด้วยตนเอง
  4. สร้างแผนที่รีไดเรกต์ครั้งเดียว แล้วต่อไปก็เข้าที่อยู่สุดท้ายโดยตรง

เทคนิคที่ 4: ปิดการโหลดรูปภาพและสื่อในการส่งคำขอแบบง่าย

เมื่อคุณทำงานผ่านไลบรารี requests แทนเบราว์เซอร์ คุณจะไม่โหลดรูปภาพโดยอัตโนมัติอยู่แล้ว requests ดึงเฉพาะ URL ที่คุณระบุ นี่เป็นข้อได้เปรียบมหาศาลเหนือเบราว์เซอร์

ถ้าคุณต้องการแค่ HTML requests.get จะคืน HTML ที่ไม่มีรูปภาพ เพราะรูปภาพถูกโหลดโดยเบราว์เซอร์เป็นคำขอแยกตามลิงก์ภายใน HTML ไลบรารีจะไม่ทำเช่นนั้นเว้นแต่คุณจะขอ

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

✅ การตรวจสอบ: เปรียบเทียบน้ำหนักของหน้าเดียวกันที่โหลดผ่าน requests และผ่านเบราว์เซอร์ ความแตกต่างปกติอยู่ที่ 10-30 เท่า โดยการส่งคำขอแบบง่ายชนะขาด

ขั้นตอนที่ 3: การใช้งาน headless browser และการบล็อกทรัพยากร

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

เมื่อไหร่ที่จำเป็นต้องใช้เบราว์เซอร์

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

การบล็อกทรัพยากรใน Playwright

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

  1. สร้างไฟล์ browser_saver.py
  2. นำเข้า sync_playwright จาก playwright.sync_api
  3. รันเบราว์เซอร์ในโหมด headless
  4. สร้าง context พร้อมตั้งค่าพร็อกซีผ่านพารามิเตอร์ proxy
  5. ตั้งค่าตัวจัดการเส้นทางผ่าน page.route ครอบคลุมทุก URL
  6. ภายในตัวจัดการ ให้ตรวจสอบประเภททรัพยากรผ่าน request.resource_type
  7. ถ้าประเภทอยู่ในรายการที่บล็อก ให้เรียก route.abort
  8. มิฉะนั้นให้เรียก route.continue_

ตัวอย่างตรรกะของตัวจัดการ

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

จุดสำคัญ: การบล็อก image, media และ font แทบจะไม่ทำให้การเก็บข้อมูลข้อความพัง แต่ช่วยประหยัดทราฟฟิกส่วนใหญ่ได้ เริ่มจากสิ่งเหล่านี้ก่อน ส่วนการบล็อกสคริปต์และสไตล์ชีตให้เพิ่มทีหลังหลังจากตรวจสอบแล้วว่าหน้ายังให้ข้อมูลที่ต้องการอยู่

การบล็อกทรัพยากรใน Puppeteer บน Node

  1. เปิดการสกัดกั้นคำขอด้วย page.setRequestInterception เท่ากับ true
  2. สมัครรับอีเวนต์ request
  3. ในตัวจัดการ ให้ตรวจสอบ request.resourceType
  4. สำหรับรูปภาพ ฟอนต์ และสื่อ ให้เรียก request.abort
  5. สำหรับอย่างอื่นให้เรียก request.continue

⚠️ คำเตือน: การบล็อกสไตล์ชีตบางครั้งอาจรบกวนคอนเทนต์แบบไดนามิกที่ขึ้นอยู่กับการมองเห็นองค์ประกอบ หากข้อมูลหายไปหลังบล็อกสไตล์ ให้ใส่ stylesheet กลับเข้าไปในรายการที่อนุญาต

เคล็ดลับ: เพิ่มตัวนับคำขอที่ถูกบล็อกและที่ปล่อยผ่าน คุณจะเห็นเป็นตัวเลขว่ามีคำขอถูกบล็อก 80-90% และนั่นคือการประหยัดเงินโดยตรง

การประหยัดเพิ่มเติมในเบราว์เซอร์

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

✅ การตรวจสอบ: รันเบราว์เซอร์ที่มีและไม่มีการบล็อกบนหน้าเดียวกัน เปรียบเทียบทราฟฟิกผ่านตัวนับของคุณ การประหยัดควรอยู่ที่ 70-90% ถ้าน้อยกว่านั้น ให้ตรวจสอบว่าตัวจัดการเส้นทางทำงานจริงหรือไม่

ขั้นตอนที่ 4: การแคชและการกำจัดคำขอที่ซ้ำกัน

เป้าหมายของขั้นตอนนี้: หยุดการเรียกซ้ำเพื่อสิ่งเดิม การส่งคำขอซ้ำสำหรับข้อมูลที่ไม่เปลี่ยนคือการทิ้งเงิน

ทำไมถึงเกิดการซ้ำ

ในงานขนาดใหญ่ ทรัพยากรเดียวกันถูกขอซ้ำแล้วซ้ำเล่า: สคริปต์ร่วมในทุกหน้า ลิงก์ที่ซ้ำกัน การรีสตาร์ทสคริปต์ที่พังตั้งแต่ต้น การซ้ำแต่ละครั้งคือทราฟฟิกที่คุณจ่ายอีกครั้ง

การแคชคำตอบแบบง่าย

  1. สร้างดิกชันนารีหรือฐานข้อมูลในเครื่อง โดยมีคีย์เป็น URL และค่าเป็นคำตอบ
  2. ก่อนส่งคำขอ ให้ตรวจสอบว่า URL อยู่ในแคชหรือไม่
  3. ถ้ามี ให้นำข้อมูลจากแคชมาใช้ โดยไม่ต้องส่งคำขอผ่านเครือข่าย
  4. ถ้าไม่มี ให้ส่งคำขอและบันทึกคำตอบลงแคช
  5. สำหรับแคชถาวรระหว่างการรันหลายครั้ง ให้บันทึกคำตอบลงไฟล์หรือฐานข้อมูลในเครื่อง

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

การกำจัด URL ซ้ำในรายการ

  1. ก่อนเริ่มงาน ให้รวบรวม URL ทั้งหมดไว้ในรายการเดียว
  2. แปลงรายการเป็นเซตเพื่อลบรายการซ้ำ
  3. ปรับที่อยู่ให้เป็นมาตรฐาน: เอาพารามิเตอร์เกินจำเป็นออก ปรับให้เป็นรูปแบบเดียวกันกับสแลช
  4. ประมวลผลเฉพาะที่อยู่ที่ไม่ซ้ำ

เคล็ดลับ: บ่อยครั้งที่ URL ซ้ำกันถูกซ่อนด้วยพารามิเตอร์ต่าง ๆ ที่ท้ายที่อยู่ ซึ่งไม่ได้เปลี่ยนเนื้อหา ตัดแท็กติดตามและตัวเลือกเรียงลำดับออกก่อนเปรียบเทียบ จำนวน URL ที่ไม่ซ้ำจะลดลงอย่างเห็นได้ชัด

คำขอแบบมีเงื่อนไขเพื่อการประหยัด

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

  1. ในคำขอครั้งแรก ให้บันทึกส่วนหัว ETag และ Last-Modified จากคำตอบ
  2. ในคำขอครั้งถัดไป ส่งกลับไปในส่วนหัว If-None-Match และ If-Modified-Since
  3. ถ้าข้อมูลไม่เปลี่ยน เซิร์ฟเวอร์จะคืนคำตอบสั้น ๆ ด้วยสถานะ 304 โดยไม่มีเนื้อหา
  4. คุณประหยัดน้ำหนักของเนื้อหาทั้งหมด โดยจ่ายแค่ส่วนหัวเล็ก ๆ เท่านั้น

✅ การตรวจสอบ: หลังใช้แคช การรันสคริปต์ซ้ำกับข้อมูลเดิมควรแสดงทราฟฟิกใกล้ศูนย์ ถ้าทราฟฟิกยังสูงอยู่ ให้ตรวจสอบว่าการตรวจสอบแคชอยู่ก่อนการส่งคำขอผ่านเครือข่าย ไม่ใช่ทีหลัง

ขั้นตอนที่ 5: การคำนวณงบประมาณทราฟฟิก

เป้าหมายของขั้นตอนนี้: เรียนรู้วิธีคาดการณ์ปริมาณการใช้และเผื่องบ เพื่อไม่ให้เครดิตหมดกลางทาง

สูตรพื้นฐาน

สูตรหลักนั้นง่าย: ทราฟฟิกทั้งหมดเท่ากับจำนวนหน้าคูณน้ำหนักเฉลี่ยต่อหน้า แต่ปีศาจอยู่ในรายละเอียด และเราจะจัดการมัน

  1. หาน้ำหนักเฉลี่ยของหนึ่งหน้าหลังการปรับแต่งทั้งหมด
  2. คูณด้วยจำนวนหน้าที่วางแผนไว้
  3. บวกโอเวอร์เฮดการเชื่อมต่อ - ประมาณ 15% เพิ่มขึ้น
  4. บวกสำรองสำหรับการทำซ้ำและข้อผิดพลาด - อีก 20%
  5. ตัวเลขที่ได้คืองบประมาณทราฟฟิกที่สมจริงของคุณ

วิธีวัดน้ำหนักเฉลี่ย

  1. รันสคริปต์ที่ปรับแต่งแล้วกับตัวอย่าง 50-100 หน้า
  2. นับทราฟฟิกรวมด้วยตัวนับของคุณ
  3. หารด้วยจำนวนหน้า จะได้น้ำหนักเฉลี่ยต่อหน้า
  4. ใช้ตัวเลขนี้ในสูตร ไม่ใช่การเดาตามทฤษฎี

ตัวอย่างการคำนวณ

สมมติว่าหลังบล็อกสื่อ น้ำหนักเฉลี่ยต่อหน้าอยู่ที่ 150 กิโลไบต์ คุณต้องประมวลผล 100,000 หน้า คำนวณ: 150 กิโลไบต์คูณ 100,000 ได้ 15,000,000 กิโลไบต์ นั่นคือประมาณ 14.3 กิกะไบต์ บวกโอเวอร์เฮด 15% และสำรอง 20% รวมประมาณ 19.5 กิกะไบต์ ต้องใช้ปริมาณนี้เป็นเกณฑ์ในการเลือกแพ็กเกจ

ลองเทียบกับสถานการณ์ที่ไม่มีการปรับแต่ง: ถ้าแต่ละหน้าหนัก 3 เมกะไบต์ 100,000 หน้าเดียวกันจะให้ 300 กิกะไบต์ ต่างกัน 15 เท่า ซึ่งก็คือความต่างของบิลนั่นแหละ

เคล็ดลับ: ควรทดลองรันกับตัวอย่างเล็ก ๆ ก่อนรันจริงเสมอ น้ำหนักเฉลี่ยที่วัดได้จริงซื่อสัตย์กว่าการคาดเดา และจะช่วยให้ไม่เจอเซอร์ไพรส์ไม่ดีในบิล

⚠️ คำเตือน: อย่าลืมเรื่องเงินสำรอง งานจริงมักมีเซอร์ไพรส์เสมอ: บางหน้าจะหนักกว่าที่คิด บางคำขอต้องส่งใหม่ งบที่ไม่มีสำรองจะหมดตอนที่แย่ที่สุด

ตารางเทคนิคการประหยัด

ด้านล่างคือสรุปเทคนิคหลัก: แต่ละเทคนิคประหยัดได้เท่าไหร่ และคุณแลกกับอะไร

  • การบีบอัด gzip และ brotli - ประหยัด 60-80% สำหรับข้อมูลข้อความ - เสียเพียงภาระซีพียูเล็กน้อยตอนแตกซิป
  • เลิกใช้เบราว์เซอร์ หันมาใช้ HTTP library - ประหยัด 90-95% - เสียตรงที่ไม่สามารถเข้าถึงข้อมูลที่โหลดด้วยสคริปต์
  • บล็อกภาพและสื่อในเบราว์เซอร์ - ประหยัด 50-70% - เสียเวลาตั้งค่าการสกัดกั้นคำขอ ความเสี่ยงน้อยมาก
  • บล็อกฟอนต์ - ประหยัด 5-10% - แทบไม่เสียอะไร ฟอนต์ไม่จำเป็นสำหรับข้อมูล
  • บล็อกสคริปต์และสไตล์ชีต - ประหยัด 15-25% - เสี่ยงที่คอนเทนต์จะโหลดไม่ได้ ต้องตรวจสอบ
  • HEAD แทน GET - ประหยัดได้ถึง 99% สำหรับคำขอตรวจสอบ - เสียตรงที่ไม่ได้รับเนื้อหาคำตอบ
  • กำจัดรีไดเรกต์ - ประหยัด 10-30% บนเว็บไซต์ที่มีการเปลี่ยนเส้นทาง - เสียเวลาครั้งเดียวในการสร้างแผนที่ที่อยู่
  • แคชคำตอบ - ประหยัดได้ถึง 100% สำหรับการทำซ้ำ - เสียพื้นที่ดิสก์สำหรับแคช
  • กำจัด URL ซ้ำ - ประหยัด 10-40% เมื่อมีรายการซ้ำ - เสียเวลาปรับรายการให้เป็นมาตรฐานครั้งเดียว
  • คำขอแบบมีเงื่อนไขด้วย ETag - ประหยัดได้ถึง 99% เมื่อข้อมูลไม่เปลี่ยน - เสียที่เก็บแท็กเวอร์ชัน

✅ การตรวจสอบ: รวมงบประมาณตามสูตรแล้วเทียบกับยอดคงเหลือในแพ็กเกจ ถ้าสำรองเพียงพอก็เริ่มได้ ถ้าไม่ ให้กลับไปใช้เทคนิคประหยัดและลดน้ำหนักเฉลี่ยต่อหน้าลง

ขั้นตอนที่ 6: เมื่อไหร่ที่แบบไม่จำกัดคุ้มกว่า และเมื่อไหร่ที่จ่ายตามปริมาณคุ้มกว่า

เป้าหมายของขั้นตอนนี้: เลือกแพ็กเกจให้ตรงกับงานจริง ๆ อย่างซื่อสัตย์ ไม่ใช่จ่ายเกินเพราะเลือกรูปแบบการคิดเงินผิด

เมื่อไหร่ที่จ่ายตามกิกะไบต์คุ้ม

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

เมื่อไหร่ที่แบบไม่จำกัดราคาคงที่คุ้ม

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

วิธีคำนวณจุดคุ้มทุน

  1. นำราคาต่อกิกะไบต์จากแพ็กเกจแบบจ่ายตามปริมาณมา
  2. นำราคาแพ็กเกจไม่จำกัดในช่วงเวลาเดียวกันมา
  3. หารราคาไม่จำกัดด้วยราคาต่อกิกะไบต์ จะได้ปริมาณเป็นกิกะไบต์ที่แพ็กเกจทั้งสองเท่ากัน
  4. ถ้าคุณคาดการณ์ปริมาณการใช้สูงกว่าจุดนี้ ให้เลือกแบบไม่จำกัด
  5. ถ้าต่ำกว่า ให้เลือกจ่ายตามปริมาณ

ตัวอย่างเช่น แบบไม่จำกัดมีราคาเทียบเท่ากับ 50 กิกะไบต์ของแบบจ่ายตามปริมาณ หมายความว่าถ้าคุณใช้เกิน 50 กิกะไบต์ แบบไม่จำกัดถูกกว่า ถ้าใช้น้อยกว่า การจ่ายตามปริมาณคุ้มกว่า งบประมาณที่วัดได้จากขั้นตอนที่ 5 จะให้คำตอบทันที

เคล็ดลับ: ปรับแต่งทราฟฟิกก่อนแล้วค่อยเลือกแพ็กเกจ การปรับแต่งที่ดีมักทำให้คุณหลุดจากโซนไม่จำกัดไปสู่โซนจ่ายตามปริมาณที่คุ้มกว่า และประหยัดเงินก้อนโต

กลยุทธ์แบบผสม

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

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

ตรวจสอบผลลัพธ์: เช็กลิสต์

ไล่ตามรายการนี้เพื่อให้แน่ใจว่าคุณตั้งค่าการนับและการประหยัดทราฟฟิกอย่างถูกต้อง

  • ตัวนับทราฟฟิกบน Python หรือ Node รันและแสดงตัวเลขโดยไม่มีข้อผิดพลาด
  • ค่าที่อ่านได้จากตัวนับตรงกับสถิติในแดชบอร์ดเมื่อปรับด้วยโอเวอร์เฮด
  • เปิดการบีบอัดในคำขอ และเห็น Content-Encoding gzip หรือ br ในคำตอบ
  • สำหรับงานตรวจสอบ ใช้ HEAD แทน GET
  • คุณเข้าที่อยู่สุดท้ายโดยตรงโดยไม่มีรีไดเรกต์เกินจำเป็น
  • สำหรับงานข้อความ ใช้ HTTP library แทนเบราว์เซอร์ในกรณีที่ทำได้
  • ในเบราว์เซอร์มีการบล็อกรูปภาพ สื่อ และฟอนต์
  • ตั้งค่าแคชคำตอบแล้ว การรันซ้ำแทบไม่ใช้ทราฟฟิก
  • รายการ URL ถูกกำจัดรายการซ้ำแล้ว
  • คำนวณงบประมาณตามสูตรโดยเผื่อ 15% และ 20%
  • เลือกแพ็กเกจที่สอดคล้องกับปริมาณการใช้ที่คาดการณ์

วิธีทดสอบ

  1. รันสคริปต์ที่ปรับแต่งแล้วกับตัวอย่าง 100 หน้า
  2. บันทึกทราฟฟิกก่อนและหลังในแดชบอร์ด
  3. หารด้วยจำนวนหน้าแล้วเทียบกับน้ำหนักเฉลี่ยที่คำนวณไว้
  4. ถ้าตรงกัน แสดงว่าระบบทำงานได้ ปรับขยายได้เลย

✅ การตรวจสอบ: ถ้าการทดลองรันอยู่ในงบประมาณที่คาดไว้สำหรับ 100 หน้า คุณพร้อมสำหรับการรันเต็มรูปแบบ คูณผลลัพธ์ด้วยสเกลแล้วตรวจสอบว่าเครดิตเพียงพอ

ข้อผิดพลาดทั่วไปและวิธีแก้ไข

ข้อผิดพลาดที่ 1: ตัวนับแสดงน้อยกว่าแดชบอร์ด

สาเหตุ: คุณนับเฉพาะเนื้อหาคำตอบ แต่บริการนับการรับส่งทั้งหมดรวมโอเวอร์เฮด วิธีแก้: เผื่อไว้ 15-20% แล้วถือว่าเป็นเรื่องปกติ ไม่ใช่บั๊ก

ข้อผิดพลาดที่ 2: การบีบอัดไม่ทำงาน

สาเหตุ: ไม่ได้ติดตั้งแพ็กเกจ brotli หรือปิด Accept-Encoding ด้วยตนเอง วิธีแก้: ติดตั้งแพ็กเกจ brotli ตรวจสอบส่วนหัวของคำขอ และดูว่าในคำตอบมี Content-Encoding

ข้อผิดพลาดที่ 3: ข้อมูลหายไปหลังบล็อกทรัพยากร

สาเหตุ: คุณบล็อกสคริปต์หรือสไตล์ที่ใช้โหลดคอนเทนต์ วิธีแก้: นำ script และ stylesheet กลับเข้าไปในรายการที่อนุญาต บล็อกแค่ image, media และ font

ข้อผิดพลาดที่ 4: ทราฟฟิกไม่ลดลงเมื่อใช้แคช

สาเหตุ: การตรวจสอบแคชอยู่หลังการส่งคำขอผ่านเครือข่าย ไม่ใช่ก่อนหน้า วิธีแก้: ตรวจสอบแคชก่อน แล้วค่อยส่งคำขอผ่านเครือข่ายเมื่อไม่มีข้อมูล

ข้อผิดพลาดที่ 5: เบราว์เซอร์ยังใช้ทราฟฟิกแม้มีตัวจัดการ

สาเหตุ: ตัวจัดการเส้นทางผูกกับรูปแบบ URL ผิดที่ หรือตั้งค่าหลังเริ่มโหลดแล้ว วิธีแก้: ตั้งค่าการสกัดกั้นก่อนเปิดหน้า และครอบคลุมทุก URL ด้วยเครื่องหมายดอกจัน

ข้อผิดพลาดที่ 6: ปริมาณการใช้จริงสูงกว่าที่คาดหลายเท่า

สาเหตุ: น้ำหนักเฉลี่ยมาจากทฤษฎี ไม่ได้วัดจากการทดลองรันจริง วิธีแก้: วัดน้ำหนักเฉลี่ยจากตัวอย่างจริงก่อนรันใหญ่เสมอ

ข้อผิดพลาดที่ 7: งบประมาณหมดกลางทาง

สาเหตุ: ไม่ได้เผื่อสำรองสำหรับการทำซ้ำและโอเวอร์เฮด วิธีแก้: เพิ่มสำรองรวม 35% ในประมาณการและติดตามยอดคงเหลือระหว่างดำเนินการ

ข้อผิดพลาดที่ 8: มีคำขอซ้ำ ๆ ไปยังที่อยู่เดียวกัน

สาเหตุ: มีรายการซ้ำในรายการ URL เพราะแท็กต่าง ๆ ที่ท้ายที่อยู่ วิธีแก้: ปรับที่อยู่ให้เป็นมาตรฐาน ตัดพารามิเตอร์ติดตาม และแปลงรายการเป็นเซต

ความสามารถเพิ่มเติมและการปรับแต่งขั้นสูง

เมื่อการประหยัดพื้นฐานเข้าที่แล้ว ก็ยังบีบเพิ่มได้อีก

การประมวลผลคำตอบขนาดใหญ่แบบสตรีม

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

การจำกัดขนาดคำตอบ

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

การประมวลผลแบบชุดและแบบขนาน

คำขอแบบขนานไม่ได้ประหยัดทราฟฟิกด้วยตัวเอง แต่ช่วยให้ทำงานเสร็จเร็วขึ้นและเห็นปัญหาการใช้ได้เร็วขึ้น รักษาจำนวนการเชื่อมต่อพร้อมกันให้สมเหตุสมผล เพื่อไม่ให้ควบคุมทราฟฟิกไม่ได้

การบันทึกและมอนิเตอร์แบบเรียลไทม์

  1. ทำตัวนับทราฟฟิกแบบสดและแสดงผลทุก ๆ ไม่กี่ร้อยคำขอ
  2. กำหนดเกณฑ์ที่เมื่อถึงแล้วสคริปต์จะหยุด
  3. แบบนี้คุณจะไม่มีทางใช้เกินงบโดยไม่รู้ตัว

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

การทำงานกับเฉพาะส่วนที่จำเป็นของ API

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

คำถามที่พบบ่อยเกี่ยวกับการประหยัดทราฟฟิก

ทราฟฟิกขาออกนับรวมเมื่อจ่ายตามกิกะไบต์หรือไม่

โดยปกตินับทั้งขาเข้าและขาออก แต่ขาออก (คำขอของคุณ) น้อยกว่าขาเข้า (คำตอบจากเซิร์ฟเวอร์) หลายเท่า การประหยัดหลักจึงอยู่ที่ทราฟฟิกขาเข้าเสมอ

การนับฝั่งไคลเอนต์แม่นยำแค่ไหน

ความแม่นยำประมาณ 85-95% เทียบกับทราฟฟิกเครือข่ายจริง ส่วนต่างคือโอเวอร์เฮดการเชื่อมต่อ สำหรับการวางแผนงบประมาณถือว่าเพียงพอหากเผื่อไว้

สามารถเลิกใช้เบราว์เซอร์ได้ทั้งหมดหรือไม่

สำหรับงานเก็บข้อมูลข้อความหลายแบบ ตอบว่าได้ ไลบรารี HTTP ง่าย ๆ จัดการได้และประหยัดทราฟฟิกหลายเท่า เบราว์เซอร์จำเป็นเฉพาะที่คอนเทนต์ถูกสร้างด้วยสคริปต์หลังโหลดหน้า

การบีบอัดเปิดใช้งานโดยค่าเริ่มต้นหรือไม่

ในไลบรารีสมัยใหม่ส่วนใหญ่ ตอบว่าใช่ แต่ควรตรวจสอบ สำหรับ brotli อาจต้องติดตั้งแพ็กเกจเพิ่ม ควรตรวจสอบส่วนหัว Content-Encoding ในคำตอบเสมอ

ควรบล็อกอะไรในเบราว์เซอร์เป็นอันดับแรก

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

จะรู้ได้อย่างไรว่างบประมาณเพียงพอ

วัดน้ำหนักเฉลี่ยต่อหน้าจากการทดลองรัน คูณด้วยจำนวนหน้า เผื่ออีก 35% แล้วเทียบกับยอดคงเหลือในแพ็กเกจ ถ้าอยู่ในวงเงินก็เพียงพอ

แคชช่วยในการรันรอบเดียวหรือไม่

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

อะไรคุ้มกว่าสำหรับปริมาณมากที่ต่อเนื่อง

โดยทั่วไปแล้ว แบบไม่จำกัดราคาคงที่คุ้มกว่า คำนวณจุดคุ้มทุน: หารราคาไม่จำกัดด้วยราคาต่อกิกะไบต์แล้วเทียบกับปริมาณการใช้ที่คาดการณ์

จำนวนรีไดเรกต์ส่งผลต่อบิลหรือไม่

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

จะหลีกเลี่ยงการเกินงบประมาณโดยไม่ตั้งใจได้อย่างไร

ตั้งค่าตัวนับแบบสดและการหยุดอัตโนมัติเมื่อถึงเกณฑ์ทราฟฟิก สคริปต์จะหยุดเอง และการใช้เกินจะเกิดขึ้นไม่ได้แม้มีข้อผิดพลาด

บทสรุป

คุณได้เดินทางจากความไม่เข้าใจว่าทราฟฟิกหายไปไหน จนมาถึงการควบคุมปริมาณการใช้อย่างเต็มรูปแบบ ตอนนี้คุณแยกน้ำหนักหน้าตามองค์ประกอบได้ และเห็นว่าน้ำหนักส่วนใหญ่ไม่จำเป็นสำหรับคุณ คุณตั้งค่าตัวนับทราฟฟิกและเทียบกับสถิติในแดชบอร์ด คุณใช้การบีบอัด ใช้ HEAD แทน GET กำจัดรีไดเรกต์ และเลือกใช้ HTTP library ที่เบาบางมากกว่าเบราว์เซอร์ที่หนัก

เมื่อจำเป็นต้องใช้เบราว์เซอร์ คุณบล็อกรูปภาพ สื่อ และฟอนต์ และลดทราฟฟิกได้ 70-90% คุณแคชคำตอบและไม่เรียกซ้ำเพื่อสิ่งเดิม และที่สำคัญที่สุดคือคุณคำนวณงบประมาณด้วยสูตรที่เผื่อไว้ และเลือกแพ็กเกจอย่างมีสติ ไม่ใช่เดาสุ่ม

ทำอะไรต่อ

  1. นำเทคนิคพื้นฐานไปใช้ในโปรเจกต์ปัจจุบันของคุณวันนี้เลย
  2. ทดลองรันและวัดน้ำหนักเฉลี่ยต่อหน้าจริง
  3. คำนวณงบประมาณใหม่และเปลี่ยนแพ็กเกจหากจำเป็น
  4. ตั้งค่าการหยุดอัตโนมัติตามขีดจำกัดเพื่อเป็นประกัน

การประหยัดทราฟฟิกเป็นทักษะที่คุ้มค่ากับทุกโปรเจกต์ เมื่อคุณลงทุนเวลาครั้งเดียวในการตั้งค่าระบบนับและการปรับแต่ง คุณจะจ่ายน้อยลงหลายเท่าในขณะที่ผลลัพธ์เท่าเดิม เริ่มจากเล็ก ๆ วัดผลเป็นตัวเลข แล้วคุณจะแปลกใจว่างานเดียวกันราคาถูกกว่าได้ขนาดไหน