Broadway render nodes are clipping inefficiently
These days GskRenderNodes are created for the whole widget hiearchy, i.e. not applying clipping from parent nodes to the children during snapshot. This means that for a List view with a lot of rows will create render nodes even for non-visible rows.
In the other backends we can easily avoid doing anything for these nodes during rendering. However, the broadway backend relies on the immutability of rendernodes to optimize the syncing of the trees between client and broadwayd, as well as broadwayd and dom tree.
Basically it goes like:
if (node_was_already_sent (node))
send_reuse (node.id);
else
send_node_and_children (node);
This works, but it means we send all nodes the the dom tree, which could mean a lot of data, including for instance rendered text for all the labels in the non-visible rows.
However, if we start clipping what nodes we send, then the above algorithm doesn't work and we have to keep track of which nodes are already sync:ed, essentially adding mutable state to each node.