Хабрахабр

[Перевод] Electron это Flash для десктопа

Почему в настольном приложении Slack, скорее всего, есть драйвер для работы игрового контроллера Xbox и чего, действительно, плохого в использовании Electron для построения настольных приложений.

image

Интересно, чем это он там занимается? На скриншоте ниже, согласно профайлеру, Slack занимает почти все ресурсы процессора.

image

Я даже не взаимодействовал со Slack — я был на встрече. Процесс был запущен в фоне когда это произошло. Перезапуск Slack в этот раз решил проблему. И заметил я это только из-за шума системы охлаждения моего ноутбука.

В фоновом режиме Slack часто потребляет 5% процессора. Но это нормально для Slack. Я без понятия. Что он делает?

Сколько тысяч строк кода им пришлось написать чтобы их клиент работал? Я готов поспорить, что команда разработчиков Slack тоже не знает. Возможно, 100. Я думаю в районе 50. Или не обычное нативное приложение. Но Slack — не нативное приложение. пер.). Он работает поверх Electron, а это значит, что когда вы его скачиваете, вы на самом деле скачиваете полную копию Google Chrome (скорее, Chromium — прим. Код непосредственно Slack составляет менее 1% объема загрузки. Chrome на момент написания содержит 15 миллионов строк кода, не являющимися комментариями.

Он большой и сложный. Chrome сам по себе — тот ещё боров. Он использует ОЗУ и процессор как будто больше на них никто не претендует и сильно уменьшает время жизни от батареи.

Даже если сам Chrome у вас уже запущен, то каждое приложение на Electron разворачивает свою, дополнительную копию. Вы можете думать о Slack как о маленькой программе на JavaScript, которая работает внутри другой операционной системы (виртуальной машины) Chrome, которую вы запускаете чтобы, в сущности, пользоваться аналогом IRC.

По количеству строк кода Chrome практически такого же размера как ядро Linux. И называть Chrome операционной системой — это не преувеличение. Он содержит встроенную копию SQLite, систему управления памятью и свой собственный диспетчер задач. Как и у ядра Linux у него есть API для различного оборудования, включая OpenGL, VR, MIDI. (Я знаю что он там, потому что я его и написал. На macOS в нём даже есть драйвер USB для игрового контроллера Xbox 360. Извините.)

Знает ли команда Slack об этом? Содержит ли Slack мой код для контроллера Xbox? Slack занимает 160 Мб на диске. Знает ли об этом хоть кто-то? Другие приложения Electron на моем компьютере — Spotify (200 Мб) и Atom (260 Мб). Это порядка 70 несжатых копий Властелина Колец. Понадобится 450 дискет, чтобы записать эти три простых приложения. Linux я впервые установил при помощи дискет. Который, думаю, содержит в себе клиент IRC, текстовый редактор и музыкальный проигрыватель. Все вместе они весят как настольный дистрибутив Ubuntu. Полноценная операционная система, пользовательское окружение и веб-браузер.

Да, но не оперативная память. Вы скажете, что дисковое пространство сейчас ничего не стоит. В связи с продолжительностью работы от батареи вы не можете приобрести модель с более чем 16 Гб. Новенький блестящий MacBook Pro по умолчанию укомплектован 8 Гб ОЗУ. И прямо сейчас Slack находится где-то между 300 Мб и 1 Гб в памяти моего ноутбука:

image

Это приложение для обмена текстом. Come on.

Современные процессоры сохраняют заряд путём остановки когда это возможно (когда нет никаких задач). Другая вещь, которой всегда не хватает — заряд батареи. Они заставляют процессор постоянно просыпаться, разгоняться и снова останавливаться. Проклятие power management это программы, которые постоянно используют процессор всего на пару процентов. Если у кого-то есть время (просто оставьте их запущенными) — я бы посмотрел как сильно Spotify, Slack и Atom уменьшают время работы от батареи на современных ноутбуках. Это идеальный способ уничтожить драгоценный заряд батареи. Это невероятно.

image

Он просто… запущен. И нет, Spotify не проигрывает музыку. И он тоже использует несколько процентов процессора. Делает свои загадочные хромовские дела. Просто, чтобы существовать.

Во встроенном диспетчере задач это был загадочный процесс «Browser». (Во время написания этой заметки Chrome в отместку решил занять 100% ресурсов процессора. Спасибо, Chrome.)

На самом деле я думаю, что API, которые предоставляет современный веб гораздо лучше существующих API операционных систем. Если быть честным, то JavaScript вне браузера не является проблемой. Мы должны ими пользоваться.

Мне просто не настолько интересно ваше приложение, чтобы это оправдывало запуск очередного инстанса Chrome. Но нам необходимо найти возможность использовать эти новые парадигмы (React и его друзья) на настольных платформах без необходимости запускать больше чертовых копий Chrome. Почему бы не воспользоваться избыточными ресурсами? Разработчику легко попасть в ловушку ощущения того, что ваше приложение или сайт это подарок человечеству и самое важное, чем они могут заниматься. Такой путь приводит к миру, где у нас не может быть хороших вещей. Нам нужно бороться с таким образом мышления. Такой путь приводит к возвращению Shockwave Flash и нагревающихся в карманах телефонов, которые загадочным образом оказываются разряжены когда мы хотим ими воспользоваться. Такой путь приводит к миру, где батареи наших ноутбуков должны вырасти, чтобы обеспечивать питанием процессоры, чтобы они выполняли ещё больше бесполезной работы. (Я смотрю на вас, iTunes и Mischief.) К паранойе по отношению к заряду батареи и закрытию приложений как только мы закончили с ними работать.

Просто скажите Electron НЕТ

Если вы хотите использовать JS и React — воспользуйтесь React Native. Разработчики, не позволяйте своим друзьям писать приложения на Electron. Оказывается, современные операционные системы уже имеют хорошие и быстрые UI библиотеки. Это как Electron, но только у вас нет необходимости распространять копию Chrome всем пользователям и запускать ещё одну копию Chrome чтобы использовать ваше приложение. Используйте их, олухи!

Они пользуются Slack, но не знают насколько он прожорлив. Другой печальный факт это то, что даже многие разработчики и понятия не имеют что происходит в их компьютерах. Практикуйтесь. Это твоя ответственность, как разработчика, знать всё это. Воспользуйтесь iStatMeters или одним из бесплатных аналогов. Изучите средства для профилирования. Вы не можете улучшить то, что не измеряете.

Facebook намеренно ограничивала скорость интернета в своих офисах раз в неделю, чтобы вызвать сочувствие их пользователям в других странах третьего мира (кхе-Австралия-кхе). Может, мы должны покупать более медленные компьютеры, чтобы почувствовать боль. Пару лет назад я оставил свой ноутбук на работе на долгие выходные. Может, как разработчики, мы должны тоже делать это со своими компьютерами, например, заставлять код работать гораздо медленнее, чем обычно, чтобы вооружиться интуицией в отношении производительности. Внезапно, множество операций, которые осуществлялись мгновенно на моём обычном ноутбуке с i7 стали ужасно медленными. Вместо поездки за ним я решил подключить мой Raspberry Pi (чертовски медленное 1 поколение) и использовать его для разработки. Все эти твики производительности также переносятся и на обычные устройства. И я потратил выходные, чтобы сделать свой рабочий процесс более гладким. Это исправление точно так же стало прыжком с 0. Уменьшение времени запуска с 5ти секунд до 2х на Raspberry Pi ощущалось невероятным прыжком. 2 или вроде того. 5 секунд до 0. Время запуска в 0. Это всё равно очень заметно для пользователя. 2 очевидно ощущается как намного быстрее. 5 секунд достаточно мало, чтобы упустить этот факт при разработке, но падение до 0.

На дворе 2016 год (… — прим. Пользователи: Пожалуйста, жалуйтесь на медленные программы. Мы носим суперкомпьютеры в наших карманах. пер.). Для программ недопустимо быть медлительными.

Память имеет значение. Разработчики: Производительность имеет значение. Я закрываю тебя как только покидаю офис. Мне не важно, что ты самая привлекательная девушка на танцполе, Slack. Медлительность это баг. Я удаляю тебя с компьютера как только имею такую возможность. Так что хватит встраивать целый Chrome в своё приложение. Самая быстрая программа это та, которую ты не запускаешь.

Ваши программы выполняются на компьютере. И все вы, веб-разработчики: Выучите С или Rust или что-то в этом духе. И убирайтесь с моей лужайки пока не узнаете! Пока вы не знаете как работает компьютер вы обречены. *трясёт кулаком*

Это очень смешно. И да, почитайте про кризис ожирения сайтов (перевод на Habr). И очень жизненно. И очень грустно.

Но он всё равно встраивает Chrome. Edit: Spotify на самом деле использует Chromium Embedded Framework вместо запуска через Electron. Я не знал об этом когда писал статью, но не забираю свои слова по поводу конечной производительности.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»