The OpenNET Project / Index page

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



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

Оглавление

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

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


13. "Выпуск почтового клиента Geary 3.34"  –1 +/
Сообщение от Гномик (?), 22-Сен-19, 16:22 
Товарищ, какие будут ваши доказательства?

"Гюльчатай, открой личико!"(С)

Прокудин это ты тут инкогнито пописываешь?

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

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ообщить модератору

19. "Выпуск почтового клиента Geary 3.34"  +/
Сообщение от Аноним (10), 22-Сен-19, 22:21 
Я начал разбираться - нашёл профилировщиком функцию, которая отжирает время (внутри GTK). А я использовал их стандартные виджеты. Я им говорю - что делать? А они мне - пиши свой низкоуровневый виджет на С, который заменяет их базовый (!) стандартный.

Так их стандартный сраный виджет - это 5 000 строчек низкоуровнего забористого С, который дёргает Cairo / Pango и это уже очень advanced level. Как такое писать знает ОЧЕНЬ мало человек - фактически разработчики GTK только. Свой виджет они писали 5 лет!

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

20. "Выпуск почтового клиента Geary 3.34"  +2 +/
Сообщение от Аноним (10), 22-Сен-19, 22:30 
Конечно, заниматься этим я не собирался.

Разобрался что это за функция - оказалось, тарам-там-там (!!!), у них есть свой криво-написанный CSS джижок (очень маленькое подмножество), только стилизует не HTML (div, a, IMG), а их виджеты (как раз на фотках тени, скругления и т.п.).

И вот у них там квадратичный алгоритм (!) добавления элементов в этом движке. После 100 элементов уже начинает тормозить.

Я переписал на O(N*log N) - стало в 800 раз быстрее. 100 000 элементов отрисовывал за 0.1 секунду кажется.

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

28. "ссылка"  +1 +/
Сообщение от big dick (?), 23-Сен-19, 08:17 
Ссылку на патч, пожалуйста.
Ответить | Правка | Наверх | Cообщить модератору

31. "ссылка"  +2 +/
Сообщение от Аноним (10), 23-Сен-19, 11:01 
Вы правда думаете, что я полезу искать эти никому ненужные наработки только чтобы доказать что-то на форуме с 1.5 калеки?

Если бы от этого что-то изменилось, я бы потратил время и нашёл этот патч.

Я с ними общался напрямую в IRC. ISSUES месяцами висят. Патч они даже не стали смотреть. Поэтому и до создания формального issue дело не дошло.

Потом главный разработчик этого CSS (кажется Matias Clasen) движка перестал отвечать на вопросы, чтобы помочь разобраться с их движком. Видимо, начал ревновать что я полез в их код.

Вы что, типа хотите уличить во лжи?))) Но тут столько подробностей, что проверить несложно.

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

32. "ссылка"  +/
Сообщение от Аноним (10), 23-Сен-19, 11:12 
Вот здесь https://gitlab.gnome.org/GNOME/gtk/blob/master/gtk/gtkcssnode.c
используется связный список.

У вас 1000 элементов. Чтобы добавить элемент в середину, вы пробегаете (начиная с начала) половину списка. И так для всей 1000 элементов. Вот и квадратичный алгоритм.


А надо вместо связного списка https://developer.gnome.org/glib/stable/glib-Doubly-Linked-L... использовать дерево https://developer.gnome.org/glib/stable/glib-Balanced-Binary....
Вот именно это я и сделал.

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

38. "ссылка"  –1 +/
Сообщение от big dick (?), 23-Сен-19, 13:41 
Просто интересно.

Я не шарю в асимптотическом анализе алгоритмов, но твой довод выглядит здорово.

Кстати, ты реально думаешь, что рендеринг одновременно 10к item-ов - это хорошая идея? Я думаю именно из-за этого они и не стали отвечать, боясь получить ответ, заведомо стрёмный.

А вообще не разбираюсь в программировании на gtk, и было интересно тебя почитать.

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

40. "ссылка"  +/
Сообщение от Аноним (10), 23-Сен-19, 14:10 
Я выше написал комментарии по отрисовку 10к элементов. Почитай, будет интересно)

По производительности: отрисовка и 10к, и 100к, и даже 1млн на чистом С - это копеечные операции. Ну секунду, ну максимум 10 секунд должно занимать.

Более того, я всех деталей не помню. Но! кажется я предложил им добавить такую поддержку (отрисовку только того, что видно на экране) в GtkFlowBox, притом я сам готов был это сделать, т.к. для меня это был блокер. И...они отказались)))
Лезть в CSS движок - это крайняя мера, от безысходности. Я потратил уже 3 месяца на разработку. И боролся за проект до последнего. Но такое наплевательское отношение во всём. Я же там столкнулся ещё с десятком проблем. Например, они даже не умеют изменять размер виджетов - слайдера.

По поводу правильно ли это: вообще, сначала пишется приложение, его каркас. Ведь это всё время и деньги. Я не могу заниматься такими мелочами в самом начале. А уже потом идёт более детальная оптимизация.

Я ведь не вручную отрисовываю эти элементы. Я кладу их в абстрактный контейнер, который отвечает за отрисовку https://developer.gnome.org/gtk3/stable/GtkFlowBox.html.

И рендерить только то, что попадает на экран - это оптимизация, её можно написать потом, попозже. Более того, это должен поддерживать стандартный GtkFlowBox - это абсолютно базовая и критичная функциональность. С ней столкнется любой, кто отрисовывает длинный список / дерево.

В React Native есть FlatList который рендерит только то, что попадает на экран. И это идёт из коробки.

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

41. "ссылка"  +/
Сообщение от big dick (?), 23-Сен-19, 14:25 
> По производительности: отрисовка и 10к, и 100к, и даже 1млн на чистом С - это копеечные операции. Ну секунду, ну максимум 10 секунд должно занимать.

Грубая неправда. Как я понимаю, даже код на С использует API библиотек, которые рисуют эти 100500 элементов. И эта библиотека не может, ни в каком случае, нарисовать столько элементов быстро.

> В React Native есть FlatList который рендерит только то, что попадает на экран. И это идёт из коробки.

chunking and lazy loading, так победим.

Если серьёзно - что за проект? Pet, за деньги?

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

42. "ссылка"  +1 +/
Сообщение от Аноним (10), 23-Сен-19, 14:48 
Ну как не может? У меня смогла нарисовать, а у них не может? Вы тред читали?

Отрисовка занимает очень мало время даже 100 000 элементов, даже миллиона. Библиотеки отрисовки (это Cairo) вообще этого не замечают. Проблема исключительно в GTK, в их CSS движке.

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

43. "ссылка"  +1 +/
Сообщение от Аноним (10), 23-Сен-19, 14:51 
Свой проект, коммерческий (планировался). Фотоменеджер с искусственным интеллектом а-ля Google Photos.
Ответить | Правка | К родителю #41 | Наверх | Cообщить модератору

53. "ссылка"  +/
Сообщение от VICTOR MALOVemail (?), 23-Сен-19, 17:21 
Вот ссылки на скриншоты профилировщика.
https://drive.google.com/open?id=16ccqcSSdr4p1LYmItqThAOjtEo...

Прошу прощения, я ошибся. Я улучшил производительность конкретного use-case не в 800 раз, а в 6750 раз - с 82 секунд до 0.012 секунд (функция gtk_box_update_child_css_position). А если бы эти клоуны мне помогли, то я бы улучшил и gtk_css_node_propogate_pending_changes.

И тогда бы общая производительность выросла бы в эти самые 6750 раз. С 333 секунд до 0.05 секунд для отрисовки 100 000 элементов.

И Gnome Nautilus тоже перестал бы тормозить =)))

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

58. "ссылка"  +/
Сообщение от Фанат ГТК (?), 23-Сен-19, 22:58 
Они серьезно для поиска и формирования набора стилей элемента используют связанный список? Это как-то... Странно! Маразматически странно, хотя алгоритм с деревом среднестатистического разработчика поставит на некоторое время в тупик, но это же основа, которой пользуются сотни тысячи человек. Теперь понятно, в чем основная проблема этого тулкита -- неграмотные люди у руля, понятно, почему шапка продалась...
Ответить | Правка | К родителю #32 | Наверх | Cообщить модератору

59. "ссылка"  +/
Сообщение от Аноним (10), 24-Сен-19, 00:56 
Я сам был шокирован. Как это возможно, им же пользуются сотни тысяч людей?

И люди-то неглупые. Никто в мире не напишет сразу оптимальный CSS движок. И я написал бы не лучше с первого раза. Я думаю большинство его вообще не сможет написать.

Короче, очень токсичное сообщество. Худшее, что я встречал.

И создали они HTML5, только очень плохой ;) Тот же CSS. UI описывается через XML:) Код логики пишется через биндинги на JavaScript или Python

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

60. "ссылка"  +/
Сообщение от Аноним (10), 24-Сен-19, 00:59 
Маразматически - что им это написали, объяснили почему алгоритм квадратичный. Написали патч (потратив кучу времени). Проверили профилировщиком до и после для доказательства.

А они...просто блин в чате мне перестали отвечать)) Поднадоел я им, наверное. Вот это трэш)

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

57. "ссылка"  +/
Сообщение от VICTOR MALOVemail (?), 23-Сен-19, 17:33 
https://github.com/likern/gtk-patched/tree/custom-flowbox
Ответить | Правка | К родителю #28 | Наверх | Cообщить модератору

22. "Выпуск почтового клиента Geary 3.34"  +3 +/
Сообщение от Аноним (10), 22-Сен-19, 22:38 
Радостный написал им в IRC. Ноль реакции. Приложил скриншоты профилировщика - ноль реакции.

В итоге я понял, что выкинул 2 месяца своей жизни на GTK зря. Им это было не нужно, не интересно. Никто не собирался смотреть патчи, даже не поинтересовались.

Они просто сказали - сорян, чувак. У нас все приложения (которые они пишут, все базовые утилиты Gnome пилятся чуваками из Red Hat / Ubuntu) максимум содержат 100 виджетов.

А то, что это абсолютно критично для тех, кто пишет приложения на их говняном GTK - это им похер. GTK ТОЛЬКО для внутренней разработки.

Столкнетесь с блокирующей проблемой - и никто не будет её фиксить, и даже. (!!!) принимать патчи с исправлениями!

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

23. "Выпуск почтового клиента Geary 3.34"  +/
Сообщение от Аноним (10), 22-Сен-19, 22:51 
Ну я понял, что занимаюсь какой-то хернёй. Ведь на Electron JS я бы написал всё бы давно, а не сидел профилируя и отлаживая GTK (а для этого надо фактически стать вровень с разработчиками GTK, и научиться отлаживать сам GTK).

Просто я хотел именно настоящее нативное приложение под Linux.

Поэтому линуксойды - вы должны на Electron JS молиться. Это ваш (и мой) единственный шанс получить нормальные, приличные качественные приложения под Linux (как часть кросс-платформенности). А проблемам с тем, что он много жрёт памяти - техническая и дело не в качестве приложений. Как только станет больше таких приложений - её пофиксят. И всё будет летать.


GTK мертв. Нативная разработка под Linux абсолютно мертва. C++/Qt практически умер. Как в целом Desktop разработка.

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

24. "Выпуск почтового клиента Geary 3.34"  +2 +/
Сообщение от улыбнуло (?), 23-Сен-19, 00:42 
Забористая история. И, если верить тексту, написана продвинутым челом. Но есть одно НО. Логика где? Вывод связан с текстом не больше чем асфальт с зимним солнцестоянием. Ущербность gtk-тима не делает скриптовые поделки лучше чем они есть. Вот ни разу.
Ответить | Правка | Наверх | Cообщить модератору

34. "Выпуск почтового клиента Geary 3.34"  +1 +/
Сообщение от Аноним (10), 23-Сен-19, 11:52 
Вывод:

1. Внутри GTK те же самые технологии что и в HTML. CSS движок для стилизации и дерево элементов. (В QT с QML тоже).

2. С ресурсами GTK они уже безнадежно отстали по всем фронтам. Это всё стагнирует. А значит в целом нативная разработка под Gnome мертва.

3. Шаг влево, шаг вправо от Hello World - и всё работает очень плохо и медленно. Гораздо хуже связки HTML / JS. В отличие от пропаганды на форумах.

4. Написать программу требует просто невероятных усилий на борьбу со всем и вся. Это очень медленно. А значит приложений с богатым функционалом не появится.

5. Никто не пишет на чистом GTK. Всё используют либо Python, либо JavaScript обвязки ;)) Те под Linux нативной разработки в привычном понимании слова уже нет, от слова совсем. И Gnome Shell написан на JavaScript.

6. JavaScript невероятно быстрый интерпретируемый язык. И это лишь язык, его можно скомпилировать в бинарный формат. https://hermesengine.dev/.

7. В оптимизацию JavaScript и HTML вложено столько сил и средств! И дальше будет только лучше с WebGPU https://gpuweb.github.io/gpuweb/ и BinaryAST
https://github.com/tc39/proposal-binary-ast.

8. Проблема с Electron только в потреблении памяти. Сам по себе он очень быстрый.

9. Проблема с памятью решается легко - не тащить с каждым приложением свой Chrome, а использовать системный движок.
https://medium.com/dailyjs/put-your-electron-app-on-a-diet-w...
https://github.com/pojala/electrino

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

37. "Выпуск почтового клиента Geary 3.34"  –2 +/
Сообщение от Аноним (10), 23-Сен-19, 12:24 
Сейчас я пишу на JavaScript. И самая передовая разработка и самые большие инновации происходят именно среди JavaScript / Web разработчиков.

Они, по ощущениям, в целом сильнее как программисты. Более открыты к передовому опыту.

Например, они вовсю используют SVG графику. А в Android и iOS до сих пор пихают растровые картинки.

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

25. "Выпуск почтового клиента Geary 3.34"  +3 +/
Сообщение от Аноним (25), 23-Сен-19, 01:53 
Ну про GTK понятно, а с Qt что не так?
Ответить | Правка | К родителю #23 | Наверх | Cообщить модератору

30. "Выпуск почтового клиента Geary 3.34"  –3 +/
Сообщение от Аноним (10), 23-Сен-19, 10:27 
С ним я не работал. В целом разработка desktop приложений стагнирует и потихонечку умирает  . Всё ушло в Web / Mobile.

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

26. "Выпуск почтового клиента Geary 3.34"  +2 +/
Сообщение от Аноним (26), 23-Сен-19, 05:49 
На qt не звезди, с ним всё нормально.
Ответить | Правка | К родителю #23 | Наверх | Cообщить модератору

51. "Выпуск почтового клиента Geary 3.34"  +/
Сообщение от VICTOR MALOVemail (?), 23-Сен-19, 16:45 
Вот ссылка на ветку с изменениями - https://github.com/likern/gtk-patched/commits/custom-flowbox.
Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

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

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




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

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