Я выше написал комментарии по отрисовку 10к элементов. Почитай, будет интересно)По производительности: отрисовка и 10к, и 100к, и даже 1млн на чистом С - это копеечные операции. Ну секунду, ну максимум 10 секунд должно занимать.
Более того, я всех деталей не помню. Но! кажется я предложил им добавить такую поддержку (отрисовку только того, что видно на экране) в GtkFlowBox, притом я сам готов был это сделать, т.к. для меня это был блокер. И...они отказались)))
Лезть в CSS движок - это крайняя мера, от безысходности. Я потратил уже 3 месяца на разработку. И боролся за проект до последнего. Но такое наплевательское отношение во всём. Я же там столкнулся ещё с десятком проблем. Например, они даже не умеют изменять размер виджетов - слайдера.
По поводу правильно ли это: вообще, сначала пишется приложение, его каркас. Ведь это всё время и деньги. Я не могу заниматься такими мелочами в самом начале. А уже потом идёт более детальная оптимизация.
Я ведь не вручную отрисовываю эти элементы. Я кладу их в абстрактный контейнер, который отвечает за отрисовку https://developer.gnome.org/gtk3/stable/GtkFlowBox.html.
И рендерить только то, что попадает на экран - это оптимизация, её можно написать потом, попозже. Более того, это должен поддерживать стандартный GtkFlowBox - это абсолютно базовая и критичная функциональность. С ней столкнется любой, кто отрисовывает длинный список / дерево.
В React Native есть FlatList который рендерит только то, что попадает на экран. И это идёт из коробки.