วิธีคำนวณและลดการใช้ทราฟฟิกเมื่อใช้งานพร็อกซีแบบจ่ายตามกิกะไบต์
บทความ
- บทนำ: ทำไมต้องนับทราฟฟิกไว้ล่วงหน้า
- การเตรียมตัวเบื้องต้น: เครื่องมือและการเข้าถึง
- แนวคิดพื้นฐานแบบเข้าใจง่าย
- น้ำหนักของหน้าเว็บประกอบด้วยอะไรบ้าง: วิเคราะห์จากของจริง
- ขั้นตอนที่ 1: วัดปริมาณการใช้จริงของงานของคุณ
- ขั้นตอนที่ 2: เทคนิคพื้นฐานในการลดทราฟฟิก
- ขั้นตอนที่ 3: การใช้งาน headless browser และการบล็อกทรัพยากร
- ขั้นตอนที่ 4: การแคชและการกำจัดคำขอที่ซ้ำกัน
- ขั้นตอนที่ 5: การคำนวณงบประมาณทราฟฟิก
- ขั้นตอนที่ 6: เมื่อไหร่ที่แบบไม่จำกัดคุ้มกว่า และเมื่อไหร่ที่จ่ายตามปริมาณคุ้มกว่า
- ตรวจสอบผลลัพธ์: เช็กลิสต์
- ข้อผิดพลาดทั่วไปและวิธีแก้ไข
- ความสามารถเพิ่มเติมและการปรับแต่งขั้นสูง
- คำถามที่พบบ่อยเกี่ยวกับการประหยัดทราฟฟิก
- บทสรุป
เมื่อคุณจ่ายเงินทุกๆ กิกะไบต์ที่ส่งออกไป ทราฟฟิกก็ไม่ใช่แค่ตัวเลขนามธรรมอีกต่อไป แต่กลายเป็นเงินจริงๆ สคริปต์ที่ไม่ได้ระวังตัวซึ่งดึงรูปภาพและวิดีโอหนักๆ มา อาจกินงบประมาณทั้งเดือนในคืนเดียว ข่าวดีคือคุณสามารถควบคุมปริมาณการใช้ได้ และมันไม่ยากถ้าได้ทำความเข้าใจกลไกสักครั้ง
คู่มือนี้จะสอนวิธีนับทราฟฟิกก่อนเริ่มงาน วัดปริมาณการใช้จริง และลดมันลงได้หลายเท่าด้วยเทคนิคง่ายๆ เราจะพูดถึงเรื่องการประหยัดทราฟฟิกที่ใช้ได้กับทุกแพ็กเกจที่คิดตามปริมาณ ไม่ว่าพร็อกซีแบบไหน
บทนำ: ทำไมต้องนับทราฟฟิกไว้ล่วงหน้า
เมื่อจ่ายตามกิกะไบต์ ทุกคำขอมีต้นทุน ปัญหาคือต้นทุนนี้มองไม่เห็นจนกว่าจะถึงเวลาที่บิลมา หรือเครดิตหมด คนส่วนใหญ่ที่เริ่มต้นมักนับยอดทีหลัง แต่จริงๆ แล้วควรทำกลับกัน: ประเมินงบประมาณก่อนเริ่มงานและเผื่อไว้
สิ่งที่คุณจะได้จากคู่มือนี้
หลังจากอ่านคู่มือจบ คุณจะสามารถแยกเว็บเพจออกเป็นส่วนประกอบตามน้ำหนัก เขียนตัวนับทราฟฟิกง่ายๆ ด้วย 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
สิ่งที่ต้องติดตั้งและตั้งค่า
- ดาวน์โหลดและติดตั้ง Python จากเว็บไซต์ทางการ ตอนติดตั้งให้ติ๊กตัวเลือกเพิ่มลงใน PATH
- เปิดเทอร์มินัลแล้วตรวจสอบการติดตั้งด้วยคำสั่ง python --version
- ติดตั้งไลบรารี requests ด้วยคำสั่ง pip install requests
- หากวางแผนจะใช้เบราว์เซอร์ ให้ติดตั้ง Playwright ด้วยคำสั่ง pip install playwright แล้วตามด้วย playwright install chromium
- ตรวจสอบให้แน่ใจว่าคุณมีข้อมูลการเชื่อมต่อพร็อกซีพร้อม: ที่อยู่ พอร์ต ชื่อผู้ใช้ และรหัสผ่าน
เคล็ดลับ: สร้างโฟลเดอร์แยกสำหรับทดลองเรื่องทราฟฟิก เพื่อไม่ให้ไฟล์ปนกัน และย้อนกลับการเปลี่ยนแปลงได้ง่ายหากมีอะไรผิดพลาด
⚠️ คำเตือน: อย่าเก็บชื่อผู้ใช้และรหัสผ่านพร็อกซีไว้ในโค้ดที่คุณจะส่งให้ใครเด็ดขาด ให้ใช้ตัวแปรสภาพแวดล้อมหรือไฟล์คอนฟิกแยกต่างหากที่จะไม่ตกถึงมือคนอื่น
✅ การตรวจสอบ: ถ้าคำสั่ง 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 กิโลไบต์ ซึ่งไม่ใช่การพูดเกินจริง แต่เป็นภาพที่พบได้ทั่วไป
วิธีแยกวิเคราะห์หน้าด้วยตนเอง
- เปิดหน้าเว็บในเบราว์เซอร์
- กด F12 เพื่อเปิดเครื่องมือนักพัฒนา
- ไปที่แท็บ Network
- รีเฟรชหน้าด้วยปุ่ม F5
- ที่ด้านล่างของแผง คุณจะเห็นขนาดข้อมูลที่โหลดทั้งหมดและจำนวนคำขอ
- จัดเรียงคำขอตามคอลัมน์ Size เพื่อดูทรัพยากรที่หนักที่สุด
- สังเกตคอลัมน์ Type: img คือรูปภาพ script คือสคริปต์ font คือฟอนต์
เคล็ดลับ: ในแผง Network มีตัวกรองตามประเภททรัพยากร กดปุ่ม Img เพื่อดูน้ำหนักรวมของรูปภาพทั้งหมด ซึ่งตัวเลขนี้มักทำให้ตกใจ
✅ การตรวจสอบ: คุณควรจะเห็นว่าเอกสาร HTML หนักน้อยกว่าผลรวมของรูปภาพและสคริปต์หลายสิบเท่า ซึ่งยืนยันว่าแหล่งประหยัดหลักคือการตัดสื่อต่างๆ ออก
ขั้นตอนที่ 1: วัดปริมาณการใช้จริงของงานของคุณ
เป้าหมายของขั้นตอนนี้: เรียนรู้วิธีคำนวณอย่างแม่นยำว่าสคริปต์ของคุณใช้ทราฟฟิกไปเท่าไร เพื่อจัดการปริมาณการใช้งานอย่างมีสติ
การนับทราฟฟิกด้วย Python
ไลบรารี requests ช่วยให้คุณทราบขนาดของแต่ละคำตอบ เราจะรวมความยาวของเนื้อหาและขนาดโดยประมาณของส่วนหัว
- สร้างไฟล์ traffic_counter.py ในโฟลเดอร์ทำงานของคุณ
- ใส่บรรทัด import requests ในไฟล์
- กำหนดค่าพร็อกซีในรูปแบบดิกชันนารีที่มีคีย์ http และ https
- ก่อนลูปคำขอ ให้สร้างตัวแปร total_bytes เท่ากับศูนย์
- หลังจากแต่ละคำขอ ให้นำความยาวของ response.content มาบวกเพิ่ม
- เพื่อความแม่นยำ ให้เพิ่มขนาดส่วนหัวโดยนับความยาวของสตริงที่แสดง
- สุดท้ายหาร total_bytes ด้วย 1048576 เพื่อให้ได้หน่วยเมกะไบต์
ตรรกะง่ายๆ: len(response.content) จะคืนจำนวนไบต์ในเนื้อหาคำตอบ ส่วนหัวคำนวณจากผลรวมความยาวของคีย์และค่า สำหรับงานส่วนใหญ่ เนื้อหาคำตอบคือส่วนหลักของทราฟฟิก ดังนั้นแม้จะนับแค่ content ก็ได้ความแม่นยำประมาณ 95%
จุดสำคัญ: response.content จะคืนข้อมูลที่แตกซิปแล้ว หากเซิร์ฟเวอร์ส่งคำตอบที่ถูกบีบอัดมา ทราฟฟิกจริงในเครือข่ายอาจน้อยกว่าเนื่องจากการบีบอัด เพื่อวัดจำนวนไบต์ที่ส่งจริง ให้ดูส่วนหัว Content-Length จากคำตอบ ซึ่งแสดงขนาดเนื้อหาตามที่ส่งผ่านเครือข่าย
การนับไบต์ที่ส่งจริงอย่างแม่นยำ
- หลังคำขอ ให้เข้าถึง response.headers.get('Content-Length')
- ถ้ามีค่า ให้นำมาใช้เป็นน้ำหนักจริงของเนื้อหาเป็นไบต์
- ถ้าไม่มีส่วนหัวนี้ (เช่นในกรณีสตรีมมิ่ง) ให้ใช้ความยาวของ content โดยจำไว้ว่านี่คือขนาดที่แตกซิปแล้ว
การนับทราฟฟิกด้วย Node.js
ใน Node คุณสามารถใช้โมดูล https ในตัวหรือไลบรารี axios หลักการเดียวกัน: รวมขนาดข้อมูลที่ได้รับ
- สร้างไฟล์ traffic_counter.js
- เชื่อมต่อไปยังไลบรารีสำหรับส่งคำขอ
- สร้างตัวแปร totalBytes โดยมีค่าเป็นศูนย์
- สำหรับแต่ละคำตอบ ให้นำส่วนหัว content-length หรือนับความยาวของบัฟเฟอร์ข้อมูล
- บวกค่านั้นเข้ากับ totalBytes
- สุดท้ายแสดง totalBytes หารด้วย 1048576 เพื่อให้ได้เมกะไบต์
เคล็ดลับ: บันทึกน้ำหนักของแต่ละคำขอแยกกัน อย่าเห็นแต่ยอดรวม แล้วคุณจะเห็นทันทีว่า URL ไหนกินเยอะที่สุด และจะได้ปรับให้ตรงจุด
เทียบกับสถิติในแดชบอร์ด
ตัวนับของคุณเองกับสถิติของบริการพร็อกซีอาจคลาดเคลื่อนเล็กน้อย ซึ่งเป็นเรื่องปกติ สาเหตุที่คลาดเคลื่อน:
- บริการนับทราฟฟิกทั้งหมดของการเชื่อมต่อ รวมถึงแพ็กเก็ตควบคุมและการสร้างช่องทางที่ปลอดภัย
- ตัวนับของคุณพิจารณาเฉพาะน้ำหนักของคำตอบที่มีประโยชน์
- ส่วนหัวของคำขอ การแลกเปลี่ยน DNS และการสร้างการเชื่อมต่อใหม่เพิ่มโอเวอร์เฮดเล็กน้อย
- รันสคริปต์ของคุณ 100 คำขอแล้วบันทึกยอดจากตัวนับของคุณ
- เข้าแดชบอร์ดของบริการพร็อกซีก่อนและหลังรัน
- บันทึกความแตกต่างของตัวเลขในแดชบอร์ด
- เปรียบเทียบกับตัวนับของคุณ ความคลาดเคลื่อน 10-20% เป็นเรื่องปกติ นั่นคือค่าใช้จ่ายเพิ่มเติมของการเชื่อมต่อ
⚠️ คำเตือน: ควรเผื่อโอเวอร์เฮดของการเชื่อมต่อไว้ในงบประมาณเสมอ ปริมาณการใช้จริงมักสูงกว่าที่ตัวนับฝั่งไคลเอนต์คำนวณไว้ 10-20%
✅ การตรวจสอบ: ถ้าตัวนับของคุณแสดงตัวเลขใกล้เคียงกับผลต่างในแดชบอร์ดเมื่อปรับด้วยโอเวอร์เฮด แสดงว่าการนับถูกต้องและคุณเชื่อถือการวัดของคุณได้
ขั้นตอนที่ 2: เทคนิคพื้นฐานในการลดทราฟฟิก
เป้าหมายของขั้นตอนนี้: ใช้เทคนิคง่ายๆ ที่ช่วยลดปริมาณการใช้โดยไม่ต้องเขียนโค้ดซับซ้อน เริ่มจากวิธีที่เข้าถึงได้ง่ายที่สุด
เทคนิคที่ 1: เปิดการบีบอัดผ่าน Accept-Encoding
ข้อมูลแบบข้อความ (HTML, JSON, สคริปต์) ถูกบีบอัดได้ดีมาก เมื่อขอให้เซิร์ฟเวอร์ส่งคำตอบที่บีบอัด คุณจะลดทราฟฟิกได้ 3-5 เท่า
- เพิ่ม Accept-Encoding ในส่วนหัวคำขอด้วยค่า gzip, br, deflate
- ไลบรารี requests ใน Python ทำสิ่งนี้ให้อัตโนมัติและแตกซิปคำตอบให้เอง
- ตรวจสอบให้แน่ใจว่าคุณไม่ได้ปิดตัวเลือกนี้ด้วยตนเอง
- ตรวจสอบส่วนหัวของคำตอบ Content-Encoding: ถ้ามี gzip หรือ br แสดงว่าการบีบอัดทำงาน
br ในที่นี้หมายถึง brotli ซึ่งเป็นอัลกอริทึมที่ทันสมัยกว่าที่บีบอัดได้แน่นกว่า gzip เซิร์ฟเวอร์ส่วนใหญ่รองรับ สำหรับการใช้งาน brotli ใน Python ให้ติดตั้งแพ็กเกจ brotli ด้วยคำสั่ง pip install brotli
เคล็ดลับ: การบีบอัดฟรีในแง่ของทราฟฟิก และแทบไม่กินทรัพยากรซีพียู ควรเปิดไว้เสมอ นี่คือสิ่งแรกที่ต้องตรวจสอบเมื่อมีการใช้งานสูง
เทคนิคที่ 2: ใช้ HEAD แทน GET
เมื่อคุณต้องการแค่ส่วนหัว เช่น ตรวจสอบว่าหน้านั้นมีอยู่จริง รู้ขนาดหรือวันที่แก้ไข ให้ใช้ HEAD request ซึ่งจะคืนส่วนหัวโดยไม่มีเนื้อหา
- แทนที่จะใช้ requests.get ให้เรียก requests.head
- ตรวจสอบส่วนหัวที่ต้องการใน response.headers
- เนื้อหาจะไม่ถูกส่งมา การประหยัดได้ถึง 99% ในการตรวจสอบแบบนี้
สถานการณ์ทั่วไปสำหรับ HEAD: ตรวจสอบสถานะลิงก์ หาขนาดไฟล์ก่อนดาวน์โหลด ตรวจสอบวันที่แก้ไขล่าสุดสำหรับแคช
เทคนิคที่ 3: หลีกเลี่ยงรีไดเรกต์ที่ไม่จำเป็น
การรีไดเรกต์แต่ละครั้งคือคำขอและคำตอบเต็มรูปแบบเพิ่มเติม หากเว็บไซต์เปลี่ยนเส้นทางจาก http ไป https หรือจากที่อยู่หนึ่งไปอีกที่อยู่หนึ่งตลอดเวลา คุณก็จ่ายเงินเพื่อการวนซ้ำที่เกินจำเป็น
- ใช้ที่อยู่สุดท้ายโดยตรง: มี https และไม่มีสแลชเกินจำเป็น
- ถ้ารู้ว่าที่อยู่รีไดเรกต์ไป www ให้เรียกเวอร์ชัน www ทันที
- ในไลบรารี คุณสามารถปิดการตามรีไดเรกต์อัตโนมัติด้วยพารามิเตอร์ allow_redirects เท่ากับ False เพื่อควบคุมกระบวนการด้วยตนเอง
- สร้างแผนที่รีไดเรกต์ครั้งเดียว แล้วต่อไปก็เข้าที่อยู่สุดท้ายโดยตรง
เทคนิคที่ 4: ปิดการโหลดรูปภาพและสื่อในการส่งคำขอแบบง่าย
เมื่อคุณทำงานผ่านไลบรารี requests แทนเบราว์เซอร์ คุณจะไม่โหลดรูปภาพโดยอัตโนมัติอยู่แล้ว requests ดึงเฉพาะ URL ที่คุณระบุ นี่เป็นข้อได้เปรียบมหาศาลเหนือเบราว์เซอร์
ถ้าคุณต้องการแค่ HTML requests.get จะคืน HTML ที่ไม่มีรูปภาพ เพราะรูปภาพถูกโหลดโดยเบราว์เซอร์เป็นคำขอแยกตามลิงก์ภายใน HTML ไลบรารีจะไม่ทำเช่นนั้นเว้นแต่คุณจะขอ
เคล็ดลับ: สำหรับงานเก็บข้อมูลแบบข้อความ ให้เลือกใช้ไลบรารี HTTP ง่ายๆ มากกว่าเบราว์เซอร์ การประหยัดทราฟฟิกจะเกิดขึ้นหลายเท่าอัตโนมัติ เพราะคุณไม่ได้โหลดสื่อ ฟอนต์ และตัวติดตาม
✅ การตรวจสอบ: เปรียบเทียบน้ำหนักของหน้าเดียวกันที่โหลดผ่าน requests และผ่านเบราว์เซอร์ ความแตกต่างปกติอยู่ที่ 10-30 เท่า โดยการส่งคำขอแบบง่ายชนะขาด
ขั้นตอนที่ 3: การใช้งาน headless browser และการบล็อกทรัพยากร
เป้าหมายของขั้นตอนนี้: เรียนรู้วิธีบล็อกทรัพยากรประเภทหนักๆ ในเบราว์เซอร์ นี่คือการประหยัดทราฟฟิกที่ได้ผลที่สุดเมื่อจำเป็นต้องใช้เบราว์เซอร์
เมื่อไหร่ที่จำเป็นต้องใช้เบราว์เซอร์
บางครั้งเลี่ยงเบราว์เซอร์ไม่ได้: ข้อมูลถูกโหลดด้วยสคริปต์หลังจากเปิดหน้า มีการป้องกันคำขอธรรมดา หรือคอนเทนต์ถูกสร้างแบบไดนามิก ในกรณีนี้ เบราว์เซอร์จะโหลดทุกอย่างที่ขวางหน้า ทราฟฟิกจึงพุ่งสูง วิธีแก้คือสกัดกั้นและบล็อกทรัพยากรประเภทที่ไม่จำเป็น
การบล็อกทรัพยากรใน Playwright
Playwright ช่วยให้คุณสกัดกั้นทุกคำขอของเบราว์เซอร์และตัดสินใจว่าจะปล่อยผ่านหรือยกเลิก เราจะยกเลิกรูปภาพ ฟอนต์ สื่อ และสไตล์ชีต
- สร้างไฟล์ browser_saver.py
- นำเข้า sync_playwright จาก playwright.sync_api
- รันเบราว์เซอร์ในโหมด headless
- สร้าง context พร้อมตั้งค่าพร็อกซีผ่านพารามิเตอร์ proxy
- ตั้งค่าตัวจัดการเส้นทางผ่าน page.route ครอบคลุมทุก URL
- ภายในตัวจัดการ ให้ตรวจสอบประเภททรัพยากรผ่าน request.resource_type
- ถ้าประเภทอยู่ในรายการที่บล็อก ให้เรียก route.abort
- มิฉะนั้นให้เรียก route.continue_
ตัวอย่างตรรกะของตัวจัดการ
ตัวจัดการได้รับออบเจกต์คำขอ คุณนำ request.resource_type มาเปรียบเทียบกับรายการที่บล็อก ถ้าทรัพยากรเป็นรูปภาพหรือฟอนต์ คุณจะยกเลิกมัน และเบราว์เซอร์จะไม่ใช้ทราฟฟิกกับมัน ถ้าเป็นเอกสารหรือสคริปต์ที่จำเป็น คุณก็ปล่อยผ่าน
จุดสำคัญ: การบล็อก image, media และ font แทบจะไม่ทำให้การเก็บข้อมูลข้อความพัง แต่ช่วยประหยัดทราฟฟิกส่วนใหญ่ได้ เริ่มจากสิ่งเหล่านี้ก่อน ส่วนการบล็อกสคริปต์และสไตล์ชีตให้เพิ่มทีหลังหลังจากตรวจสอบแล้วว่าหน้ายังให้ข้อมูลที่ต้องการอยู่
การบล็อกทรัพยากรใน Puppeteer บน Node
- เปิดการสกัดกั้นคำขอด้วย page.setRequestInterception เท่ากับ true
- สมัครรับอีเวนต์ request
- ในตัวจัดการ ให้ตรวจสอบ request.resourceType
- สำหรับรูปภาพ ฟอนต์ และสื่อ ให้เรียก request.abort
- สำหรับอย่างอื่นให้เรียก request.continue
⚠️ คำเตือน: การบล็อกสไตล์ชีตบางครั้งอาจรบกวนคอนเทนต์แบบไดนามิกที่ขึ้นอยู่กับการมองเห็นองค์ประกอบ หากข้อมูลหายไปหลังบล็อกสไตล์ ให้ใส่ stylesheet กลับเข้าไปในรายการที่อนุญาต
เคล็ดลับ: เพิ่มตัวนับคำขอที่ถูกบล็อกและที่ปล่อยผ่าน คุณจะเห็นเป็นตัวเลขว่ามีคำขอถูกบล็อก 80-90% และนั่นคือการประหยัดเงินโดยตรง
การประหยัดเพิ่มเติมในเบราว์เซอร์
- ปิดการโหลดรูปภาพในการตั้งค่า context ถ้าเอนจินรองรับ
- อย่าเปิดแท็บเกินจำเป็น แต่ละแท็บโหลดทรัพยากรชุดของตัวเอง
- ปิดหน้าทันทีหลังจากได้ข้อมูล อย่าเปิดค้างไว้
- ใช้ context เดียวกันซ้ำสำหรับหลายหน้า แทนที่จะรีสตาร์ทใหม่
✅ การตรวจสอบ: รันเบราว์เซอร์ที่มีและไม่มีการบล็อกบนหน้าเดียวกัน เปรียบเทียบทราฟฟิกผ่านตัวนับของคุณ การประหยัดควรอยู่ที่ 70-90% ถ้าน้อยกว่านั้น ให้ตรวจสอบว่าตัวจัดการเส้นทางทำงานจริงหรือไม่
ขั้นตอนที่ 4: การแคชและการกำจัดคำขอที่ซ้ำกัน
เป้าหมายของขั้นตอนนี้: หยุดการเรียกซ้ำเพื่อสิ่งเดิม การส่งคำขอซ้ำสำหรับข้อมูลที่ไม่เปลี่ยนคือการทิ้งเงิน
ทำไมถึงเกิดการซ้ำ
ในงานขนาดใหญ่ ทรัพยากรเดียวกันถูกขอซ้ำแล้วซ้ำเล่า: สคริปต์ร่วมในทุกหน้า ลิงก์ที่ซ้ำกัน การรีสตาร์ทสคริปต์ที่พังตั้งแต่ต้น การซ้ำแต่ละครั้งคือทราฟฟิกที่คุณจ่ายอีกครั้ง
การแคชคำตอบแบบง่าย
- สร้างดิกชันนารีหรือฐานข้อมูลในเครื่อง โดยมีคีย์เป็น URL และค่าเป็นคำตอบ
- ก่อนส่งคำขอ ให้ตรวจสอบว่า URL อยู่ในแคชหรือไม่
- ถ้ามี ให้นำข้อมูลจากแคชมาใช้ โดยไม่ต้องส่งคำขอผ่านเครือข่าย
- ถ้าไม่มี ให้ส่งคำขอและบันทึกคำตอบลงแคช
- สำหรับแคชถาวรระหว่างการรันหลายครั้ง ให้บันทึกคำตอบลงไฟล์หรือฐานข้อมูลในเครื่อง
แคชแบบนี้มีประสิทธิภาพมากเมื่อคุณดีบักสคริปต์และรันซ้ำหลายครั้งติดต่อกัน การรันครั้งที่สองและครั้งต่อไปจะดึงข้อมูลจากดิสก์และไม่ใช้ทราฟฟิกเครือข่ายแม้แต่ไบต์เดียว
การกำจัด URL ซ้ำในรายการ
- ก่อนเริ่มงาน ให้รวบรวม URL ทั้งหมดไว้ในรายการเดียว
- แปลงรายการเป็นเซตเพื่อลบรายการซ้ำ
- ปรับที่อยู่ให้เป็นมาตรฐาน: เอาพารามิเตอร์เกินจำเป็นออก ปรับให้เป็นรูปแบบเดียวกันกับสแลช
- ประมวลผลเฉพาะที่อยู่ที่ไม่ซ้ำ
เคล็ดลับ: บ่อยครั้งที่ URL ซ้ำกันถูกซ่อนด้วยพารามิเตอร์ต่าง ๆ ที่ท้ายที่อยู่ ซึ่งไม่ได้เปลี่ยนเนื้อหา ตัดแท็กติดตามและตัวเลือกเรียงลำดับออกก่อนเปรียบเทียบ จำนวน URL ที่ไม่ซ้ำจะลดลงอย่างเห็นได้ชัด
คำขอแบบมีเงื่อนไขเพื่อการประหยัด
หากคุณตรวจสอบหน้าเดิมเป็นระยะ ให้ใช้คำขอแบบมีเงื่อนไข เซิร์ฟเวอร์จะส่งคำตอบเต็มรูปแบบก็ต่อเมื่อข้อมูลมีการเปลี่ยนแปลงเท่านั้น
- ในคำขอครั้งแรก ให้บันทึกส่วนหัว ETag และ Last-Modified จากคำตอบ
- ในคำขอครั้งถัดไป ส่งกลับไปในส่วนหัว If-None-Match และ If-Modified-Since
- ถ้าข้อมูลไม่เปลี่ยน เซิร์ฟเวอร์จะคืนคำตอบสั้น ๆ ด้วยสถานะ 304 โดยไม่มีเนื้อหา
- คุณประหยัดน้ำหนักของเนื้อหาทั้งหมด โดยจ่ายแค่ส่วนหัวเล็ก ๆ เท่านั้น
✅ การตรวจสอบ: หลังใช้แคช การรันสคริปต์ซ้ำกับข้อมูลเดิมควรแสดงทราฟฟิกใกล้ศูนย์ ถ้าทราฟฟิกยังสูงอยู่ ให้ตรวจสอบว่าการตรวจสอบแคชอยู่ก่อนการส่งคำขอผ่านเครือข่าย ไม่ใช่ทีหลัง
ขั้นตอนที่ 5: การคำนวณงบประมาณทราฟฟิก
เป้าหมายของขั้นตอนนี้: เรียนรู้วิธีคาดการณ์ปริมาณการใช้และเผื่องบ เพื่อไม่ให้เครดิตหมดกลางทาง
สูตรพื้นฐาน
สูตรหลักนั้นง่าย: ทราฟฟิกทั้งหมดเท่ากับจำนวนหน้าคูณน้ำหนักเฉลี่ยต่อหน้า แต่ปีศาจอยู่ในรายละเอียด และเราจะจัดการมัน
- หาน้ำหนักเฉลี่ยของหนึ่งหน้าหลังการปรับแต่งทั้งหมด
- คูณด้วยจำนวนหน้าที่วางแผนไว้
- บวกโอเวอร์เฮดการเชื่อมต่อ - ประมาณ 15% เพิ่มขึ้น
- บวกสำรองสำหรับการทำซ้ำและข้อผิดพลาด - อีก 20%
- ตัวเลขที่ได้คืองบประมาณทราฟฟิกที่สมจริงของคุณ
วิธีวัดน้ำหนักเฉลี่ย
- รันสคริปต์ที่ปรับแต่งแล้วกับตัวอย่าง 50-100 หน้า
- นับทราฟฟิกรวมด้วยตัวนับของคุณ
- หารด้วยจำนวนหน้า จะได้น้ำหนักเฉลี่ยต่อหน้า
- ใช้ตัวเลขนี้ในสูตร ไม่ใช่การเดาตามทฤษฎี
ตัวอย่างการคำนวณ
สมมติว่าหลังบล็อกสื่อ น้ำหนักเฉลี่ยต่อหน้าอยู่ที่ 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: เมื่อไหร่ที่แบบไม่จำกัดคุ้มกว่า และเมื่อไหร่ที่จ่ายตามปริมาณคุ้มกว่า
เป้าหมายของขั้นตอนนี้: เลือกแพ็กเกจให้ตรงกับงานจริง ๆ อย่างซื่อสัตย์ ไม่ใช่จ่ายเกินเพราะเลือกรูปแบบการคิดเงินผิด
เมื่อไหร่ที่จ่ายตามกิกะไบต์คุ้ม
- งานเป็นแบบครั้งเดียวหรือไม่บ่อย ปริมาณไม่มาก
- คุณปรับแต่งทราฟฟิกอย่างดีและรู้ปริมาณการใช้ที่แน่นอน
- น้ำหนักเฉลี่ยต่อหน้าต่ำเพราะบล็อกสื่อ
- โหลดสูงสุดเกิดขึ้นน้อยครั้ง ช่วงที่เหลือทราฟฟิกน้อย
- คุณให้ความสำคัญกับความโปร่งใส: จ่ายเท่าที่ใช้จริง
เมื่อไหร่ที่แบบไม่จำกัดราคาคงที่คุ้ม
- งานต่อเนื่อง ปริมาณมากและสม่ำเสมอ
- จำเป็นต้องใช้เบราว์เซอร์และโหลดหน้าที่หนัก
- ต้องใช้รูปภาพ วิดีโอ หรือสื่อหนักอื่น ๆ เป็นส่วนหนึ่งของงาน
- ปริมาณการใช้คาดเดายากและอาจพุ่งสูงขึ้นกระทันหัน
- คุณต้องการความสบายใจ: จ่ายคงที่โดยไม่มีความเสี่ยงใช้เกิน
วิธีคำนวณจุดคุ้มทุน
- นำราคาต่อกิกะไบต์จากแพ็กเกจแบบจ่ายตามปริมาณมา
- นำราคาแพ็กเกจไม่จำกัดในช่วงเวลาเดียวกันมา
- หารราคาไม่จำกัดด้วยราคาต่อกิกะไบต์ จะได้ปริมาณเป็นกิกะไบต์ที่แพ็กเกจทั้งสองเท่ากัน
- ถ้าคุณคาดการณ์ปริมาณการใช้สูงกว่าจุดนี้ ให้เลือกแบบไม่จำกัด
- ถ้าต่ำกว่า ให้เลือกจ่ายตามปริมาณ
ตัวอย่างเช่น แบบไม่จำกัดมีราคาเทียบเท่ากับ 50 กิกะไบต์ของแบบจ่ายตามปริมาณ หมายความว่าถ้าคุณใช้เกิน 50 กิกะไบต์ แบบไม่จำกัดถูกกว่า ถ้าใช้น้อยกว่า การจ่ายตามปริมาณคุ้มกว่า งบประมาณที่วัดได้จากขั้นตอนที่ 5 จะให้คำตอบทันที
เคล็ดลับ: ปรับแต่งทราฟฟิกก่อนแล้วค่อยเลือกแพ็กเกจ การปรับแต่งที่ดีมักทำให้คุณหลุดจากโซนไม่จำกัดไปสู่โซนจ่ายตามปริมาณที่คุ้มกว่า และประหยัดเงินก้อนโต
กลยุทธ์แบบผสม
บางครั้งการมีสองแนวทางจึงเหมาะสม: งานเบาแบบข้อความใช้แพ็กเกจจ่ายตามปริมาณ ส่วนงานหนักที่ต้องใช้เบราว์เซอร์ใช้แบบไม่จำกัด การแยกตามประเภทงานมักคุ้มกว่าการใช้แพ็กเกจเดียวสำหรับทุกอย่าง
✅ การตรวจสอบ: คำนวณทั้งสองตัวเลือกเป็นเงินตามการคาดการณ์จริงของคุณ คุณควรได้ตัวเลขการประหยัดที่ชัดเจนจากการเลือกที่ถูกต้อง ถ้าต่างกันแค่นิดเดียว ให้เลือกแพ็กเกจที่จัดการง่ายกว่า
ตรวจสอบผลลัพธ์: เช็กลิสต์
ไล่ตามรายการนี้เพื่อให้แน่ใจว่าคุณตั้งค่าการนับและการประหยัดทราฟฟิกอย่างถูกต้อง
- ตัวนับทราฟฟิกบน Python หรือ Node รันและแสดงตัวเลขโดยไม่มีข้อผิดพลาด
- ค่าที่อ่านได้จากตัวนับตรงกับสถิติในแดชบอร์ดเมื่อปรับด้วยโอเวอร์เฮด
- เปิดการบีบอัดในคำขอ และเห็น Content-Encoding gzip หรือ br ในคำตอบ
- สำหรับงานตรวจสอบ ใช้ HEAD แทน GET
- คุณเข้าที่อยู่สุดท้ายโดยตรงโดยไม่มีรีไดเรกต์เกินจำเป็น
- สำหรับงานข้อความ ใช้ HTTP library แทนเบราว์เซอร์ในกรณีที่ทำได้
- ในเบราว์เซอร์มีการบล็อกรูปภาพ สื่อ และฟอนต์
- ตั้งค่าแคชคำตอบแล้ว การรันซ้ำแทบไม่ใช้ทราฟฟิก
- รายการ URL ถูกกำจัดรายการซ้ำแล้ว
- คำนวณงบประมาณตามสูตรโดยเผื่อ 15% และ 20%
- เลือกแพ็กเกจที่สอดคล้องกับปริมาณการใช้ที่คาดการณ์
วิธีทดสอบ
- รันสคริปต์ที่ปรับแต่งแล้วกับตัวอย่าง 100 หน้า
- บันทึกทราฟฟิกก่อนและหลังในแดชบอร์ด
- หารด้วยจำนวนหน้าแล้วเทียบกับน้ำหนักเฉลี่ยที่คำนวณไว้
- ถ้าตรงกัน แสดงว่าระบบทำงานได้ ปรับขยายได้เลย
✅ การตรวจสอบ: ถ้าการทดลองรันอยู่ในงบประมาณที่คาดไว้สำหรับ 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 เพราะแท็กต่าง ๆ ที่ท้ายที่อยู่ วิธีแก้: ปรับที่อยู่ให้เป็นมาตรฐาน ตัดพารามิเตอร์ติดตาม และแปลงรายการเป็นเซต
ความสามารถเพิ่มเติมและการปรับแต่งขั้นสูง
เมื่อการประหยัดพื้นฐานเข้าที่แล้ว ก็ยังบีบเพิ่มได้อีก
การประมวลผลคำตอบขนาดใหญ่แบบสตรีม
ถ้าคำตอบมีขนาดใหญ่ แต่คุณต้องการแค่บางส่วน ให้อ่านแบบสตรีมและหยุดอ่านทันทีที่ได้สิ่งต้องการ วิธีนี้คุณจะไม่ดาวน์โหลดไฟล์ทั้งหมด ซึ่งมีประโยชน์เมื่อข้อมูลอยู่ตอนต้นของเอกสารขนาดใหญ่
การจำกัดขนาดคำตอบ
กำหนดขนาดสูงสุดของคำตอบที่คุณยอมรับได้ ถ้าเซิร์ฟเวอร์ส่งเกิน ให้หยุดโหลด นี่คือการป้องกันหน้าเว็บที่หนักเกินคาดซึ่งอาจกินทราฟฟิกเยอะในครั้งเดียว
การประมวลผลแบบชุดและแบบขนาน
คำขอแบบขนานไม่ได้ประหยัดทราฟฟิกด้วยตัวเอง แต่ช่วยให้ทำงานเสร็จเร็วขึ้นและเห็นปัญหาการใช้ได้เร็วขึ้น รักษาจำนวนการเชื่อมต่อพร้อมกันให้สมเหตุสมผล เพื่อไม่ให้ควบคุมทราฟฟิกไม่ได้
การบันทึกและมอนิเตอร์แบบเรียลไทม์
- ทำตัวนับทราฟฟิกแบบสดและแสดงผลทุก ๆ ไม่กี่ร้อยคำขอ
- กำหนดเกณฑ์ที่เมื่อถึงแล้วสคริปต์จะหยุด
- แบบนี้คุณจะไม่มีทางใช้เกินงบโดยไม่รู้ตัว
เคล็ดลับ: การหยุดอัตโนมัติตามขีดจำกัดทราฟฟิกคือประกันที่ดีที่สุด สคริปต์จะหยุดเองเมื่อถึงเกณฑ์ที่ตั้งไว้ และการใช้เกินจะเกิดขึ้นไม่ได้แม้จะมีข้อผิดพลาดในตรรกะ
การทำงานกับเฉพาะส่วนที่จำเป็นของ API
ถ้าข้อมูลเข้าถึงได้ผ่าน API ให้ขอเฉพาะฟิลด์ที่จำเป็นในจุดที่รองรับ อินเทอร์เฟซหลายตัวอนุญาตให้ระบุว่าต้องการคืนฟิลด์ใด และนี่ช่วยลดน้ำหนักคำตอบได้อย่างมากเมื่อเทียบกับการดึงทั้งหมด
คำถามที่พบบ่อยเกี่ยวกับการประหยัดทราฟฟิก
ทราฟฟิกขาออกนับรวมเมื่อจ่ายตามกิกะไบต์หรือไม่
โดยปกตินับทั้งขาเข้าและขาออก แต่ขาออก (คำขอของคุณ) น้อยกว่าขาเข้า (คำตอบจากเซิร์ฟเวอร์) หลายเท่า การประหยัดหลักจึงอยู่ที่ทราฟฟิกขาเข้าเสมอ
การนับฝั่งไคลเอนต์แม่นยำแค่ไหน
ความแม่นยำประมาณ 85-95% เทียบกับทราฟฟิกเครือข่ายจริง ส่วนต่างคือโอเวอร์เฮดการเชื่อมต่อ สำหรับการวางแผนงบประมาณถือว่าเพียงพอหากเผื่อไว้
สามารถเลิกใช้เบราว์เซอร์ได้ทั้งหมดหรือไม่
สำหรับงานเก็บข้อมูลข้อความหลายแบบ ตอบว่าได้ ไลบรารี HTTP ง่าย ๆ จัดการได้และประหยัดทราฟฟิกหลายเท่า เบราว์เซอร์จำเป็นเฉพาะที่คอนเทนต์ถูกสร้างด้วยสคริปต์หลังโหลดหน้า
การบีบอัดเปิดใช้งานโดยค่าเริ่มต้นหรือไม่
ในไลบรารีสมัยใหม่ส่วนใหญ่ ตอบว่าใช่ แต่ควรตรวจสอบ สำหรับ brotli อาจต้องติดตั้งแพ็กเกจเพิ่ม ควรตรวจสอบส่วนหัว Content-Encoding ในคำตอบเสมอ
ควรบล็อกอะไรในเบราว์เซอร์เป็นอันดับแรก
เริ่มจากรูปภาพ สื่อ และฟอนต์ นี่คือการได้ผลมากที่สุดและปลอดภัยที่สุด ส่วนสคริปต์และสไตล์ให้บล็อกหลังจากตรวจสอบแล้วว่าข้อมูลยังโหลดอยู่
จะรู้ได้อย่างไรว่างบประมาณเพียงพอ
วัดน้ำหนักเฉลี่ยต่อหน้าจากการทดลองรัน คูณด้วยจำนวนหน้า เผื่ออีก 35% แล้วเทียบกับยอดคงเหลือในแพ็กเกจ ถ้าอยู่ในวงเงินก็เพียงพอ
แคชช่วยในการรันรอบเดียวหรือไม่
ในการรันรอบเดียวที่ไม่มีการทำซ้ำ แคชมีประโยชน์น้อย แต่ช่วยประหยัดได้มากในการดีบักและรีสตาร์ท ส่วนคำขอแบบมีเงื่อนไขและการกำจัดรายการซ้ำช่วยได้แม้รอบเดียว
อะไรคุ้มกว่าสำหรับปริมาณมากที่ต่อเนื่อง
โดยทั่วไปแล้ว แบบไม่จำกัดราคาคงที่คุ้มกว่า คำนวณจุดคุ้มทุน: หารราคาไม่จำกัดด้วยราคาต่อกิกะไบต์แล้วเทียบกับปริมาณการใช้ที่คาดการณ์
จำนวนรีไดเรกต์ส่งผลต่อบิลหรือไม่
ใช่ ทุกรีไดเรกต์คือคำขอและคำตอบเพิ่มเติม บนเว็บไซต์ที่มีห่วงโซ่รีไดเรกต์ การกำจัดการเปลี่ยนเส้นทางที่ไม่จำเป็นช่วยประหยัดทราฟฟิกได้ส่วนหนึ่งที่เห็นได้ชัด
จะหลีกเลี่ยงการเกินงบประมาณโดยไม่ตั้งใจได้อย่างไร
ตั้งค่าตัวนับแบบสดและการหยุดอัตโนมัติเมื่อถึงเกณฑ์ทราฟฟิก สคริปต์จะหยุดเอง และการใช้เกินจะเกิดขึ้นไม่ได้แม้มีข้อผิดพลาด
บทสรุป
คุณได้เดินทางจากความไม่เข้าใจว่าทราฟฟิกหายไปไหน จนมาถึงการควบคุมปริมาณการใช้อย่างเต็มรูปแบบ ตอนนี้คุณแยกน้ำหนักหน้าตามองค์ประกอบได้ และเห็นว่าน้ำหนักส่วนใหญ่ไม่จำเป็นสำหรับคุณ คุณตั้งค่าตัวนับทราฟฟิกและเทียบกับสถิติในแดชบอร์ด คุณใช้การบีบอัด ใช้ HEAD แทน GET กำจัดรีไดเรกต์ และเลือกใช้ HTTP library ที่เบาบางมากกว่าเบราว์เซอร์ที่หนัก
เมื่อจำเป็นต้องใช้เบราว์เซอร์ คุณบล็อกรูปภาพ สื่อ และฟอนต์ และลดทราฟฟิกได้ 70-90% คุณแคชคำตอบและไม่เรียกซ้ำเพื่อสิ่งเดิม และที่สำคัญที่สุดคือคุณคำนวณงบประมาณด้วยสูตรที่เผื่อไว้ และเลือกแพ็กเกจอย่างมีสติ ไม่ใช่เดาสุ่ม
ทำอะไรต่อ
- นำเทคนิคพื้นฐานไปใช้ในโปรเจกต์ปัจจุบันของคุณวันนี้เลย
- ทดลองรันและวัดน้ำหนักเฉลี่ยต่อหน้าจริง
- คำนวณงบประมาณใหม่และเปลี่ยนแพ็กเกจหากจำเป็น
- ตั้งค่าการหยุดอัตโนมัติตามขีดจำกัดเพื่อเป็นประกัน
การประหยัดทราฟฟิกเป็นทักษะที่คุ้มค่ากับทุกโปรเจกต์ เมื่อคุณลงทุนเวลาครั้งเดียวในการตั้งค่าระบบนับและการปรับแต่ง คุณจะจ่ายน้อยลงหลายเท่าในขณะที่ผลลัพธ์เท่าเดิม เริ่มจากเล็ก ๆ วัดผลเป็นตัวเลข แล้วคุณจะแปลกใจว่างานเดียวกันราคาถูกกว่าได้ขนาดไหน