LINUX.ORG.RU

JavaScript и утечки памяти

 , , ,


0

2

Есть некоторое говноприложение на Electron 1.6.x/1.7.x. Оно при определенных условиях начинает жрать память со страшной силой. Так, что сжирает её всю. Каким образом можно запустить профилировщик памяти в главном процессе Electron? Как вообще нормально отлаживать приложения под Electron? Про https://github.com/electron/electron/blob/master/docs/tutorial/debugging-main... я в курсе — не работает вообще (https://github.com/electron/electron/issues/9401 предложенный workaround тоже не работает). v8-profiler собирается и его можно подключить, но при попытке сделать снимок программно приложение странным образом завершается.

★★★★★

Последнее исправление: asaw (всего исправлений: 1)

Сначала эти люди отказываются от управления памятью, а потом не знают что делать с её утечками. Вот поэтому-то Си до сих пор жив и альтернативы ему нет. Ну кроме как в мечтах хипстеров с рогатыми лупоглазыми пони a la Назар.

MimisGotAPlan
()

Я думаю отлаживать их надо так же как и жс в хроме - открой дев тулс (он же там есть?) - вкладки memory/perfomance

umren ★★★★★
()
Последнее исправление: umren (всего исправлений: 1)

Скорее всего проблема не в само Electron. Надо понимать, что он такое как платформа. Давайте разберемся. По своей сути - Electron есть просто браузер,без большей части декораций и функциональности. По сути - имея установленную NodeJS вы можете обходиться без него, а взять биндинг к какому-нибудь GUI-фреймворку. Хоть к Qt (вроде проект даже видел где-то) и использовать его блага. Утечка Electron возможно в двух случаях: подтекание v8 (оно свойственно всем ВМ) или подтекание того стека frontend-библиотек которы пользуются. Ну или кривость рук если использовался чисты ES6/JS. Все дело в том, что JS - язык прототипный и сборщик мусора в протатипах работает немного по другому. Если взять поделия на React/Redux - они могут очень хорошо сжирать память. Это плата за удобство разработки. Дебаг скорее всего вырублен специально, дабы усложнить уровень модификации. Electron в отличи от NW не умеет закрывать свой код. я бы посоветовал выдрать приложение и запустить его через хром, и там дебажить (может быть даже модуль стоит, который отрубает отладку).

silver-bullet-bfg ★★
()
Ответ на: комментарий от MimisGotAPlan

А давайте не придерживаться стандартов борщехлебов и теоретиков и посмотрим на нужды бизнеса. Electron дал возможность быстро клепать прикладные штуки на простых технологиях. Но, чтобы продукт был качественный - надо его знать. Почему-то сложилось мнение, что JS имеет мало нюансов и подводных каменй (первый порог вхождения очень низок), поэтому много людей кто не хочет разбираться ни в чем. Да, управлять памятью вручную для морде к БД - дичь, еще со времен Smalltalk (а это далеко даже не цать лет назад). И когда человек работает с C# и у него подтекает программа - говорят говнокодер он. А вот со случаем Electron - все шишки почему-то на него только сугубо.

Чем мне нравится стало современное положение - раньше Илитой считали себя борщехлебы, с переходом мейнстрима в веботу - к ней себя причислять стали нативщики. И при этом никто не думает - что нужно пользователю. Его потребности не ложваться в написание только натива. Более того, это в основном как раз вебота. Следуешь мейнстриму - ты хипстор и недопрограммист, а твои поделия (которые может по факту использовать большее количество юзверей, чем пресловутой Илитки) - ненужно. Давайте будем последовательны. Если мы говорим о программистах - суть работы, формализация в логике понятной конечному автомату задачи. И тут нет разницы на UI и стек техналогий, если ты плохо ориентируешься в математике и построяниях алгоритмов, не соблюдаешь парадигмы и пишешь говнокод - то тут вина не технологии. По таким меркам можно закидать тухлыми яйцами всё, что угодно. Я работаю часто с Django и Python и вижу такой блевотный код и подход, что просто плохо становится. Но это не значит что Python столь ужасен, это значит лишь, что программист его писавший - религиозный фанатик (для некоторых использовать Flask и набрать три раза pip install - реальная проблема, т.к. в Django все же уже есть, олололо) или не знающий практики идиот (наследование? не, не слышали).

Опять же - человек без знания стека берется отлаживать программу, пытаясь понять как она работает в обход ВМ. Ну удачи, чё.

И самое забавное - давайте вспомним ынтырпрайзные решения. Почему они пишутся на том, что быстрее? Всё просто - вкладывать пару лет на идеальную программу деньги - не целесообразно в рамках настоящего мира. Втентаклик и книголицо разрабатывались итерационно и на легаси-технологиях на момент выхода именно поэтому. Любой сложный функционал - риски, что вложеня просто лишние. Поэтому прототипирование приложения на каком-нибудь Elcetron вполне оправдано. Нужна будет скорость и производительность, бизнес вложит деньги на разработку нормально на Electron или заплатит за разработку на каком-нибудь .Net, GTK или Qt.

silver-bullet-bfg ★★
()
Ответ на: комментарий от silver-bullet-bfg

Smalltalk

Ну и где он? Где он вообще был? А был ли он вообще?

Илитой

Хм, тут не про элитизм или пафос. Это была ирония. Все эти упрощения (типы, память) ведут к тому, что программист хуже понимает что происходит, не дают никаких преимуществ, мешают компилятору помогать программисту, но создают потенциально опасные ситуации. Причём ситуации, которые невозможно решить без «колдунства».

MimisGotAPlan
()
Ответ на: комментарий от MimisGotAPlan

ну так течет все, потому что на ваших ссах с крестами написано. на говне сметану не сделаешь.

anonymous
()
Ответ на: комментарий от anonymous

А вот из сметаны говно — легко. Что и демонстрируют эти ваши ЯваГоПитоны.

MimisGotAPlan
()
Ответ на: комментарий от umren

Я думаю отлаживать их надо так же как и жс в хроме - открой дев тулс (он же там есть?) - вкладки memory/perfomance

Для renderer process (процесса, который рисует окошки) так и делается, а для main process (процесса, где, собственно, располагается точка входа) этого нет. В этом и проблема.

asaw ★★★★★
() автор топика
Ответ на: комментарий от silver-bullet-bfg

Дебаг скорее всего вырублен специально, дабы усложнить уровень модификации. Electron в отличи от NW не умеет закрывать свой код. я бы посоветовал выдрать приложение и запустить его через хром, и там дебажить (может быть даже модуль стоит, который отрубает отладку).

К.О. подсказывает, что в хроме нет API Electron, поэтому приложение там просто не поднимется.

asaw ★★★★★
() автор топика

говноприложение
Electron
утечки памяти

Это норма.

h578b1bde ★☆
()

ВАЖНО

Забыл написать, что я на 99 процентов уверен, что проблема с GC, ибо если запустить приложение в виртуалке с меньшим количеством памяти, то ситуация, как ни странно, улучшается: память сжирается не так быстро и нагрузка на процессор уменьшается.

asaw ★★★★★
() автор топика
Ответ на: ВАЖНО от asaw

Запускай в виртуалке. Круто же. Можно даже виртуалку таскать, для того, чтоб запускать его.

anonymous
()
Ответ на: комментарий от anonymous

А виртуалку в контейнер. Без контейнера вся идея устареет ещё до второго стакана смузи.

MimisGotAPlan
()
Ответ на: комментарий от silver-bullet-bfg

Молодой человек, давайте придерживаться общепринятых на ЛОРе терминов: борщехлёбами тут всегда называли лисперов, хаскеллистов — штангистами, всяческие эрланги — динамическими опердениями. Ну просто дискуссию трудно поддерживать иначе, без единой понятийной базы-то.

fluorite ★★★★★
()

Эксперементально выявить место, выяснить что её жрёт, починить. Если течёт не у тебя - смириться. Нормальных отладчиков нет, хипстерам это не нужно, у них есть GC, который решает все их проблемы.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от menangen

Я не про это. Я про интерфейс к БД в лоб на электроне и дельфях. И сравнить скорость и удобство написания.

Shadow ★★★★★
()
Ответ на: комментарий от menangen

У нас есть отделение в Дании. Где гуйню, и некоторую другую херь таки, клепают на делфях. причем не сказал бы что старичье, а вполне новые разработки на ней начинают.

anonymous
()

Вот интересно, может у мозилы есть что-то подобное электрону? Вроде же у них были похожие проекты, отдельно движок js, какой-то кусок фокса портативный. Или я путаю?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.