One nice feature of ProcessWire is how data fields and layout can be managed separately for each kind of content. Typically a URL selects a page, ProcessWire sees what kind it is, gets its data and loads code which renders that kind of page. But what about pages which combine content from multiple pages? Flexo helps sytematize this kind of thing.
The Flexo Renderer supports context based layout and relationships between pages. When a URL points to a Flexo page the renderer explores those relationships to find the other pages. Those are rendered according to what kind they are and how many hops away they are. Flexo manages this recursive process but each kind of content handles details in its own way.
Let's say we have a catalog of kitchen gadgets. Each is represented by a ProcessWire page. The Kitchen page where we list all of them together is another ProcessWire page. If you view one of the gadgets via its own URL Flexo renders it as a full page. When the Kitchen page is rendered Flexo renders each of the related gadgets as a block and then incorporates those results into the full page render of the Kitchen page.
The Flexo Renderer is pretty quick but sites favoring big pages can benefit from caching so we've given it a cache system.
It's a hybrid of two approaches commonly used in ProcessWire plus a cache invalidation scheme to automatically clear caches affected by page updates and deletions. Pages can be added or rearranged too though so we also do age based cache expiration.
FYI: Look closely at the footer and you'll find page production time and, if caching is turned on, whether the content is cached or fresh.