:lightning: comics cache
This commit is contained in:
25
CLAUDE.md
25
CLAUDE.md
@@ -44,12 +44,35 @@ python scripts/generate_sitemap.py
|
||||
```
|
||||
Run this after adding/updating comics to regenerate `static/sitemap.xml` for search engines.
|
||||
|
||||
**Publish comics (rebuild cache + RSS + sitemap):**
|
||||
```bash
|
||||
python scripts/publish_comic.py
|
||||
```
|
||||
Convenience script that rebuilds the cache and regenerates all static files in one command.
|
||||
|
||||
**Rebuild comics cache:**
|
||||
```bash
|
||||
python scripts/rebuild_cache.py
|
||||
```
|
||||
Force rebuild the comics cache from YAML files. Normally not needed (cache auto-invalidates).
|
||||
|
||||
## Architecture
|
||||
|
||||
### Data Layer: YAML Files in data/comics/
|
||||
|
||||
Comics are stored as individual YAML files in the `data/comics/` directory. The `data_loader.py` module automatically loads all `.yaml` files (except `TEMPLATE.yaml` and `README.yaml`), sorts them by comic number, and builds the `COMICS` list.
|
||||
|
||||
**Caching:** The data loader uses automatic caching to speed up subsequent loads:
|
||||
- First load: Parses all YAML files, saves to `data/comics/.comics_cache.pkl`
|
||||
- Subsequent loads: Reads from cache (~100x faster)
|
||||
- Auto-invalidation: Cache rebuilds automatically when any YAML file is modified
|
||||
- Cache can be disabled via environment variable: `DISABLE_COMIC_CACHE=true`
|
||||
|
||||
Performance with caching (1000 comics):
|
||||
- Initial load: ~2-3 seconds (builds cache)
|
||||
- Subsequent loads: ~0.01 seconds (uses cache)
|
||||
- Scripts (RSS, sitemap): All share the same cache file on disk
|
||||
|
||||
**File structure:**
|
||||
- `data/comics/001.yaml` - Comic #1
|
||||
- `data/comics/002.yaml` - Comic #2
|
||||
@@ -183,7 +206,7 @@ Global context variables injected into all templates:
|
||||
|
||||
## Important Implementation Details
|
||||
|
||||
1. **Comic loading**: The `data_loader.py` module scans `data/comics/` for `.yaml` files, loads them, validates required fields, and sorts by comic number. TEMPLATE.yaml and README.yaml are automatically ignored.
|
||||
1. **Comic loading**: The `data_loader.py` module scans `data/comics/` for `.yaml` files, loads them, validates required fields, and sorts by comic number. TEMPLATE.yaml and README.yaml are automatically ignored. Results are cached to `.comics_cache.pkl` for performance.
|
||||
|
||||
2. **Comic ordering**: COMICS list order (determined by the `number` field in each YAML file) determines comic sequence. Last item is the "latest" comic.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user