Build the cache-dir listing, bookmark ID set, and saved-post ID set once in on_search_done and reuse in _drain_append_queue. Previously these were rebuilt from scratch on every infinite scroll append — a full directory listing and two DB queries per page load. Caches are invalidated on new search, site change, and bookmark/save operations via invalidate_lookup_caches().