The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск почтового клиента Geary 3.34, opennews (??), 22-Сен-19, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


18. "Выпуск почтового клиента Geary 3.34"  +/
Сообщение от Аноним (10), 22-Сен-19, 22:12 
Ну, у меня где-то сохранились естественно скриншоты профилировщика.

Не думаю, что стоит тратить время чтобы их найти. Основная переписка с разработчиками велась в IRC, ибо только там до них достучаться.

Вот здесь, в переписке, есть скриншоты приложения (естественно прототипа) https://gitlab.gnome.org/GNOME/gtk/issues/1081

Вот квадратики - это thumbnail, куда должна грузиться превью изображения. Я хотел полностью отказаться от фоток, раскинутых по директориям (как сделано сейчас), и сделать поиск исключительно по метатегам и искусственному интеллекту (как Google Photos).

Оказалось, что это сраное говно, не умеет не то что грузить фотки. Оно даже не способно просто отрисовать 10 000 вот таких серых квадратиков (элементов / виджетов). Мне это нужно, чтобы сразу показать все потенциальные фотки (и не менять скролинг, а потом их реально подгружать). Они не могут, блять, отрисовать даже 1 000 таких элементов - это заняло 5 минут на мощном компьютере!

Ответить | Правка | Наверх | Cообщить модератору

27. "Выпуск почтового клиента Geary 3.34"  +2 +/
Сообщение от Аноним (27), 23-Сен-19, 07:39 
А где, собсно, ссылка на ишшью, где ты что-то там ускоряешь в 800 раз?

> Оно даже не способно просто отрисовать 10 000 вот таких серых квадратиков (элементов / виджетов)

Еще в детстве, изучая борланд дельфи по какой-то там книжке, я узнал, что создавая свою реализацию сапёра, нужно таблицу с клетками рисовать самостоятельно, а не создавать плеяду полноценных TButton-ов. По твоему тексту не понятно, действительно ли ты создавал 10,000 полноценных Gtk-виджетов.

Да и зачем пытаться рисовать всё? Очевидно, что из этих 10,000 одновременно будут видны только некоторые; на твоем скрине так и вообще виднеются лишь 20 квадратов. Зачем рисовать все остальное? Ну сделай упреждающую загрузку, типа если пользователь скроллит вниз, то, предугадывая, загружаем следующие 20 картинок. И скролл при этом вполне можно оставить "реального" размера, как если бы реально скроллировались 10,000 картинок.

Да и почему бы просто не посмотреть, как сделано в аналогичных Gtk-шных программах? Я бы в первую очередь посмотрел, как это реализовано в gThumb. Идеальная программа состоит из нуля строчек кода, поэтому стремись к этому значению, максимально переиспользуя уже написанный кем-то код (в данном случае "виджет с превьюхами").

Ответить | Правка | Наверх | Cообщить модератору

36. "Выпуск почтового клиента Geary 3.34"  +/
Сообщение от Аноним (10), 23-Сен-19, 12:17 
Я ещё ниже на комментарий ответил, у вас схожие вопросы.

1. Я действительно создавал 10,000 полноценных Gtk-виджетов (компонентов)
2. Конечно же я посмотрел как сделано у других. Но какие "другие"? Только Gnome Nautilus и Shotwell. Так же и сделано.
3. Разве есть хоть какие-то приличные нетривиальные приложения на GTK? И которые не тормозят? Их нет.
4. Именно по этой причине Gnome Nautilus безбожно тормозит при открытии директории с большим количеством файлов (или при поиске). Или вы не замечали как он виснет на 30 секунд?

Ответить | Правка | Наверх | Cообщить модератору

61. "Выпуск почтового клиента Geary 3.34"  +/
Сообщение от Ivan_83 (ok), 24-Сен-19, 01:03 
Это не хороший путь.
Хороший это создавать и отображать только то, что реально видно.
Это сложно но и более правильно.

Классический пример в венде это ListView.
Можно попробовать туда загрузить лог файл целиком, но теже 10к вызовов AddListItem займут кучу времени, а можно поставить хук чтобы он сам запрашивать содержимое нужного элемента по индексу и установить только количество элементов. Тогда получается мгновенная загрузка лог файла хоть на 1м записей и моментальный скролл.

Ответить | Правка | Наверх | Cообщить модератору

65. "Выпуск почтового клиента Geary 3.34"  +/
Сообщение от VICTOR MALOVemail (?), 24-Сен-19, 04:38 
Это самый правильный путь, чтобы не только начать, но и дописать приложение в реальном мире. Взять готовые компоненты, которые должны иметь такую поддержку. И, кажется, эта возможность есть везде. Например в React Native - FlatList. В Android тоже есть.

В GTK такой поддержки нет. Тогда хотя бы рендериться компоненты должны быстро - этого тоже нет.
Мне, фактически, предложили написать свой https://gitlab.gnome.org/GNOME/gtk/blob/master/gtk/gtkflowbox.c.
Серьезно? Т.е. взять - и отложить разработку на пару месяцев, пока я буду писать (и разбираться) свой компонент?
Который во всю использует внутренности вроде Cairo / GSK. Они сами пилят свой компонент уже 6 лет!

Конечно нет. Я возьму классный Electron JS, поиском найду нужный компонент за 15 секунд http://shama.github.io/view-list/ и мои пользователи получать офигенно быстрое классное решение. А за эти несколько месяцев я наклепаю кучу функционала, который они ждут.

Ответить | Правка | Наверх | Cообщить модератору

54. "Выпуск почтового клиента Geary 3.34"  +/
Сообщение от VICTOR MALOVemail (?), 23-Сен-19, 17:23 
issue нет. Я с ними переписывался в IRC.  Вот ссылки на скриншоты профилировщика.
https://drive.google.com/open?id=16ccqcSSdr4p1LYmItqThAOjtEo...
Вот ссылка на ветку кода https://github.com/likern/gtk-patched/commits/custom-flowbox
Ответить | Правка | К родителю #27 | Наверх | Cообщить модератору

33. "Выпуск почтового клиента Geary 3.34"  +/
Сообщение от Школьник (ok), 23-Сен-19, 11:29 
>Оно даже не способно просто отрисовать 10 000 вот таких серых квадратиков (элементов / виджетов)

Пихать 10000 полноценных виджетов на одну форму? Мне кажется, это крайне сомнительный подход. Подозреваю, что проблемы тут будут не только и даже не столько в UI-библиотеке, сколько в оконной системе. Не знаю насчет иксов, а на винде есть действующий даже на уровне голого WinAPI лимит всех USER-объектов, включая окна, меню, элементы управления (виджеты), хоткеи и т.п., и по умолчанию он равен 10000 штук на процесс. И 65536 на сессию.

Вероятнее всего, именно по этой причине разработчики GTK не очень-то беспокоятся по поводу работоспособности приложений с 10000 виджетов на форме. Кроссплатформенным такой подход точно не будет.

Здесь надо либо уходить на библиотеки, которые используют windowless виджеты (т.е. грубо говоря, сами занимаются их рендерингом и обработкой событий - насколько я понимаю, это WPF на .net, QML на Qt, либо электрон), либо конкретно для этого окна отрисовывать и обрабатывать события самому.

Ответить | Правка | К родителю #18 | Наверх | Cообщить модератору

35. "Выпуск почтового клиента Geary 3.34"  +1 +/
Сообщение от Аноним (10), 23-Сен-19, 12:08 
Сначала пишется прототип, а уже потом оптимизируется. Иначе так можно никогда приложение и не написать.

Всё верно. Никто и не собирался по-настоящему их отрисовывать. Я  взял стандартный, базовый элемент - контейнер https://developer.gnome.org/gtk3/stable/GtkFlowBox.html. Естественно я рассчитывал что он умеет это делать, ведь это базовая потребность. И альтернатив этому контейнеру нет.

И оказалось что он этого делать не умеет! И никаких обходных путей! И добавлять эту поддержку они не собираются. Хочешь частично отрисовывать - пиши свой (!) GtkFlowBox (который на 5 000 кода, это очень низкоуровневый базовый элемент).

Кстати, в Gnome Nautilus ( файловый менеджер) они используют именно этот GtkFlowBox. И именно поэтому всё начинает безбожно тормозить, когда открываешь директорию с большим количеством файлов или делаешь поиск.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру