How about this, then?
In site_node::get_children, at the top or somewhere more global, add this:
array set site_nodes_all [nsv_array get site_nodes]
.. then in the "filter loop" replace
array set site_node [get_from_url -exact -url $child_url]
with
if { [catch { array set site_node $site_nodes_all($child_url) } errmsg] } {
error "$errmsg"
}
That may be quicker. Again, I haven't tested 😟