From 60c90bc2e842808c7fbf91d861bcf1a5916fc054 Mon Sep 17 00:00:00 2001 From: g0ldyy <153996346+g0ldyy@users.noreply.github.com> Date: Sun, 11 Jan 2026 14:40:09 +0100 Subject: [PATCH] feat: add manifest and configure page caching settings --- .env-sample | 8 ++++++++ comet/core/logger.py | 2 +- comet/core/models.py | 2 ++ comet/utils/cache.py | 16 +++++++++------- deployment/cloudflare-cache-rules.md | 15 +++++++++++++-- 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/.env-sample b/.env-sample index 83aa61f..66afc91 100644 --- a/.env-sample +++ b/.env-sample @@ -290,3 +290,11 @@ HTTP_CACHE_PRIVATE_STREAMS_TTL=60 # 1 minute (recommended: 30-120) # Stale-While-Revalidate: serve stale content while fetching fresh in background # Improves perceived performance - users get instant response with cached data HTTP_CACHE_STALE_WHILE_REVALIDATE=60 # 1 minute + +# MANIFEST TTL (for /manifest.json and /{config}/manifest.json) +# Manifest rarely changes, can be cached longer +HTTP_CACHE_MANIFEST_TTL=86400 # 24 hours (recommended: 3600-86400) + +# CONFIGURE page TTL (for /configure and /{config}/configure) +# Static page, can be cached for a long time +HTTP_CACHE_CONFIGURE_TTL=86400 # 24 hours (recommended: 3600-86400) diff --git a/comet/core/logger.py b/comet/core/logger.py index 30be3d4..f42e301 100644 --- a/comet/core/logger.py +++ b/comet/core/logger.py @@ -436,7 +436,7 @@ def log_startup_info(settings): logger.log("COMET", f"Custom Header HTML: {bool(settings.CUSTOM_HEADER_HTML)}") http_cache_info = ( - f" - Public Streams TTL: {settings.HTTP_CACHE_PUBLIC_STREAMS_TTL}s - Private Streams TTL: {settings.HTTP_CACHE_PRIVATE_STREAMS_TTL}s - Stale While Revalidate: {settings.HTTP_CACHE_STALE_WHILE_REVALIDATE}s" + f" - Public Streams TTL: {settings.HTTP_CACHE_PUBLIC_STREAMS_TTL}s - Private Streams TTL: {settings.HTTP_CACHE_PRIVATE_STREAMS_TTL}s - Manifest TTL: {settings.HTTP_CACHE_MANIFEST_TTL}s - Configure TTL: {settings.HTTP_CACHE_CONFIGURE_TTL}s - SWR: {settings.HTTP_CACHE_STALE_WHILE_REVALIDATE}s" if settings.HTTP_CACHE_ENABLED else "" ) diff --git a/comet/core/models.py b/comet/core/models.py index 25abd80..18e6d1a 100644 --- a/comet/core/models.py +++ b/comet/core/models.py @@ -141,6 +141,8 @@ class AppSettings(BaseSettings): HTTP_CACHE_PUBLIC_STREAMS_TTL: Optional[int] = 300 HTTP_CACHE_PRIVATE_STREAMS_TTL: Optional[int] = 60 HTTP_CACHE_STALE_WHILE_REVALIDATE: Optional[int] = 60 + HTTP_CACHE_MANIFEST_TTL: Optional[int] = 86400 + HTTP_CACHE_CONFIGURE_TTL: Optional[int] = 86400 @field_validator("INDEXER_MANAGER_TYPE") def set_indexer_manager_type(cls, v, values): diff --git a/comet/utils/cache.py b/comet/utils/cache.py index e3a03b2..46f509f 100644 --- a/comet/utils/cache.py +++ b/comet/utils/cache.py @@ -187,21 +187,23 @@ class CachePolicies: def manifest(): """ For manifest.json responses. - Very short cache as it can change based on config. + Long cache as manifest rarely changes. """ - return CacheControl().private().max_age(60).must_revalidate() + ttl = settings.HTTP_CACHE_MANIFEST_TTL + swr = settings.HTTP_CACHE_STALE_WHILE_REVALIDATE + + return CacheControl().public().max_age(ttl).stale_while_revalidate(swr) @staticmethod def configure_page(): """ For the /configure page. - Cacheable if no custom HTML, otherwise private. + Long cache as the page is mostly static. """ + ttl = settings.HTTP_CACHE_CONFIGURE_TTL + swr = settings.HTTP_CACHE_STALE_WHILE_REVALIDATE - if settings.CUSTOM_HEADER_HTML: - return CacheControl().private().max_age(300) - - return CacheControl().public().max_age(300).s_maxage(3600) + return CacheControl().public().max_age(ttl).stale_while_revalidate(swr) @staticmethod def empty_results(): diff --git a/deployment/cloudflare-cache-rules.md b/deployment/cloudflare-cache-rules.md index f260f30..f7c35df 100644 --- a/deployment/cloudflare-cache-rules.md +++ b/deployment/cloudflare-cache-rules.md @@ -20,12 +20,23 @@ Cache the configuration page. * **Action**: Eligible for Cache * **Edge TTL**: Use cache-control header if present (first option) * **Browser TTL**: Respect origin +* **Serve stale content while revalidating**: On -## 3. Tiered Cache +## 3. Manifest (Cache Rule) +Cache the add-on manifest. + +* **Rule Name**: Manifest +* **Expression**: `(http.request.uri.path contains "/manifest.json")` +* **Action**: Eligible for Cache +* **Edge TTL**: Use cache-control header if present (first option) +* **Browser TTL**: Respect origin +* **Serve stale content while revalidating**: On + +## 4. Tiered Cache Enable **Tiered Cache** in **Caching > Tiered Cache**. This minimizes requests to your origin by checking other Cloudflare datacenters first. -## 4. Network Optimizations +## 5. Network Optimizations In **Speed > Protocol**: * **HTTP/3 (QUIC)**: On (faster connections, especially on mobile)