- ahserver/cache_sync.py: Redis Pub/Sub triggered + local process cache
- Each process maintains local cache (zero-latency reads)
- Cache invalidation via Redis Pub/Sub broadcast
- TTL fallback to prevent stale cache on missed messages
- Global singleton via get_cache_sync()
- Callback registration for auto-reload on invalidation
- Already depends on redis.asyncio (used by auth_api.py)
- Add fast path in processorResource._handle() for static assets (.js/.css/.png/.jpg/.gif/.ico/.svg/.woff etc)
Static files skip auth closures, i18n, url2processor, isHtml overhead
- Remove info() call in checkAuth() middleware that logged on EVERY request
(was causing disk flush on every request, blocking the async event loop)
- Log output now only uses debug() for timecost, exception() for errors
Changed from reading full file content to reading first 512 bytes in
binary mode, significantly improving static file serving performance
for large files like echarts.min.js (1MB+).
Before: async with aiofiles.open(fn,'r',encoding='utf-8') as f: b = await f.read()
After: async with aiofiles.open(fn,'rb') as f: b = await f.read(512)