tloncorp / landscape

14 stars 16 forks source link

docket: add glob contents into eyre cache #260

Open Fang- opened 5 months ago

Fang- commented 5 months ago

Globs contain big, static blobs of data, that only get updated periodically. Eyre has an affordance for caching responses at specified urls.

Here we update docket to, whenever a glob gets added, updated or removed, manage the eyre response cache to match. We call +new-cache in every place where either +new-docket or +new-chad gets called, making sure to pass in the old $charge so that we can clear potentially-stale entries from the cache.

Note that docket's dynamic request serving behavior would respond to both /path.ext and /path/ext with the glob entry for the (clay-style) path /path/ext. However, we only add a response for the '/path.ext' url into the cache. This is the common case, and doing so avoids adding twice the amount of cache pressure.

For the %groups desk, whose initial pageload requests 32 files, this takes initial load time down from ~0.5s to ~0.1s (on localhost, so no "real networking" overhead).

About half of that remaining time is spent on the initial page request, which usually dynamically falls back to serving ./index.html. About a fifth is spent on loading ./desk.js and /session.js, which are served by docket independent of glob contents. Adding those into the cache could bring additional performance gains.

This should be considered soft-blocked on urbit/urbit#6909 and urbit/vere#603. Without those changes, docket may make /apps/* urls permanently unusable for dynamic binding.

(Targets #259 because the changes there are a prerequisite for getting docket to compile in the first place...)

Closes LAND-1539.

linear[bot] commented 5 months ago

LAND-1539 docket: should create cache entries for glob contents