Cache by cloudflare

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


Browser Cache TTL และ Edge Cache TTL ทั้งสองเป็นส่วนหนึ่งของระบบการจัดเก็บข้อมูลชั่วคราวหรือ caching ที่ใช้กับเว็บไซต์ แต่พวกเขาทำงานในระดับที่แตกต่างกัน:

  1. Browser Cache TTL (Time To Live): จะระบุว่าเว็บเบราว์เซอร์ควรจัดเก็บข้อมูล cache บนอุปกรณ์ผู้ใช้เพื่อประหยัดเวลาโหลดหน้าเว็บ และลดการส่งคำขอไปยังเซิร์ฟเวอร์เป็นเวลาเท่าไหร่ หาก TTL หมดอายุ, เว็บเบราว์เซอร์จะส่งคำขอใหม่ไปยังเซิร์ฟเวอร์เพื่อรับข้อมูลที่สมัยที่สุด
  2. Edge Cache TTL (Time To Live): นี้เป็นการตั้งเวลาที่ Content Delivery Network (CDN) จะจัดเก็บข้อมูล cache บน edge server หรือ server ที่ตั้งอยู่ใกล้กับผู้ใช้ที่สุด เมื่อ TTL หมดอายุ, edge server จะส่งคำขอไปยัง origin server เพื่อรับข้อมูลที่สมัยที่สุด

ดังนั้น, ส่วนใหญ่ Edge Cache TTL จะมีช่วงเวลาที่ยาวกว่า Browser Cache TTL ซึ่งอนุญาตให้ edge servers ทำการตอบสนองการส่งคำขอจากเว็บเบราว์เซอร์แทน origin server ลดการส่งผ่านข้อมูลระหว่าง server และสร้างประสบการณ์ที่รวดเร็วขึ้นสำหรับผู้ใช้


สิ่งต่อไปที่ควรมีคือ batch สำหรับเปิดหน้าเว็บทั้งหมดเพื่อให้ระบบทำการแคช

import requests
from xml.etree import ElementTree


def visit_url(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            print(f"Successfully visited {url}")
            return True
        else:
            print(f"Failed to visit {url}, status code: {response.status_code}")
            return False
    except Exception as e:
        print(f"Error visiting {url}: {str(e)}")
        return False


sitemaps = [
    'https://knowlib.app/sitemap-1.xml',
    'https://knowlib.app/sitemap-3.xml',
    'https://knowlib.app/sitemap-4.xml',
    'https://knowlib.app/sitemap-5.xml'
]


for sitemap in sitemaps:
    print(f"Starting to visit urls from {sitemap}")
    response = requests.get(sitemap)
    tree = ElementTree.fromstring(response.content)


    for url in tree.findall('.//{http://www.sitemaps.org/schemas/sitemap/0.9}loc'):
        success = visit_url(url.text)
        if success:
            print(f"Finished visiting {url.text} successfully.")
        else:
            print(f"Failed to visit {url.text}.")
    print(f"Finished visiting all urls from {sitemap}")


1
182