Por que no aplicativo Slack para desktop, provavelmente, existe um driver para o controlador de jogos do Xbox funcionar e o que é realmente ruim no uso do Electron para criar aplicativos para desktop.

Na captura de tela abaixo, de acordo com o criador de perfil, o Slack ocupa quase todos os recursos do processador. Eu me pergunto o que ele está fazendo lá?

O processo foi iniciado em segundo plano quando isso aconteceu. Eu nem interagi com o Slack - eu estava em uma reunião. E notei isso apenas por causa do ruído do sistema de refrigeração do meu laptop. Reiniciar o Slack desta vez resolveu o problema.
Mas isso é normal para o Slack. Em segundo plano, o Slack geralmente consome 5% do processador. O que ele esta fazendo? Eu não tenho ideia.
Aposto que a equipe de desenvolvimento do Slack também não sabe. Quantas linhas de código eles precisaram escrever para fazer o cliente funcionar? Eu acho que cerca de 50 mil. Talvez 100 mil. Mas o Slack não é um aplicativo nativo. Ou não é um aplicativo nativo comum. Ele roda em cima do
Electron , o que significa que, quando você o baixa, você efetivamente baixa uma cópia completa do Google Chrome (em
vez disso, Chromium - aprox. Trans. ). O Chrome no momento da redação contém
15 milhões de linhas de código que não são comentários. Código diretamente O Slack é inferior a 1% do volume do download.
O próprio Chrome ainda é um porco. Ele é grande e complexo. Ele usa a RAM e o processador como se ninguém mais os reivindicasse e reduz bastante a vida útil da bateria.
Você pode pensar no Slack como um pequeno programa JavaScript executado em outro sistema operacional Chrome (máquina virtual) que você executa para usar essencialmente o análogo do IRC. Mesmo que o próprio Chrome já esteja em execução, cada aplicativo da Electron implementa sua própria cópia adicional.
E chamar o Chrome de sistema operacional não é um exagero. Pelo número de linhas de código, o Chrome tem quase o mesmo tamanho
do kernel do Linux . Como o kernel do Linux, ele possui uma API para vários hardwares, incluindo OpenGL, VR, MIDI. Ele contém uma cópia interna do SQLite, um sistema de gerenciamento de memória e seu próprio gerenciador de tarefas. No macOS, ele ainda possui um driver USB para o controlador de jogo do Xbox 360. (Eu sei que ele existe porque eu o escrevi. Desculpe.)
O Slack contém meu código para o controle do Xbox? A equipe do Slack sabe disso? Alguém sabe disso? O Slack ocupa 160 MB de espaço em disco. São cerca de 70 cópias não compactadas de O Senhor dos Anéis. Outras aplicações da Electron no meu computador são Spotify (200 MB) e Atom (260 MB). Eu instalei o Linux pela primeira vez usando disquetes. São necessários 450 disquetes para gravar essas três aplicações simples. Juntos, eles pesam como uma distribuição de desktop Ubuntu. Que, eu acho, contém um cliente de IRC, um editor de texto e um music player. Sistema operacional completo,
ambiente do usuário e navegador da web.
Você dirá que o espaço em disco agora não vale nada. Sim, mas não RAM. O novo e brilhante MacBook Pro está equipado com 8 GB de RAM por padrão. Devido à vida útil da bateria, você
não pode comprar um modelo com mais de 16 GB. E agora, o Slack está entre 300 MB e 1 GB na memória do meu laptop:

Vamos lá. Este é um aplicativo de compartilhamento de texto.
Outra coisa que sempre falta é a energia da bateria. Os processadores modernos economizam energia, parando sempre que possível (quando não há tarefas). A maldição do gerenciamento de energia são os programas que usam constantemente o processador por alguns por cento. Eles fazem o processador constantemente acordar, fazer overclock e parar novamente. Esta é a maneira perfeita de destruir a preciosa energia da bateria. Se alguém tiver tempo (apenas deixe-o funcionando) - eu veria quanto o Spotify, Slack e Atom reduzem a vida da bateria nos laptops modernos. Isso é inacreditável.

E não, o Spotify não toca música. Ele está apenas ... correndo. Ele faz seus misteriosos negócios cromados. E ele também usa alguns por cento do processador. Apenas para existir.
(Enquanto escrevia esta nota, o Chrome decidiu reter 100% dos recursos do processador. No gerenciador de tarefas interno, era um processo misterioso de "Navegador". Obrigado, Chrome.)
Para ser honesto, o JavaScript fora do navegador não é um problema. Na verdade, acho que as APIs fornecidas pela Web moderna são muito melhores que as APIs existentes do sistema operacional. Nós devemos usá-los.
Mas precisamos encontrar a oportunidade de usar esses novos paradigmas (React e seus amigos) em plataformas de desktop sem precisar executar mais cópias sangrentas do Chrome. Não estou tão interessado no seu aplicativo para justificar o início de outra instância do Chrome. É fácil para um desenvolvedor cair na armadilha de achar que seu aplicativo ou site é um presente para a humanidade e a coisa mais importante que ele pode fazer. Por que não aproveitar o excesso de recursos? Precisamos lutar contra esse modo de pensar. Esse caminho leva a um mundo onde não podemos ter coisas boas. Esse caminho leva a um mundo em que as baterias de nossos laptops precisam crescer para fornecer energia aos processadores, para que eles executem um trabalho ainda mais inútil. Esse caminho leva ao retorno do Shockwave Flash e de telefones que esquentam nos bolsos, que misteriosamente são descarregados quando queremos usá-los. Paranoia em relação à carga da bateria e fechamento de aplicativos assim que terminamos de trabalhar com elas. (Eu olho para você, iTunes e Malícia.)
Apenas diga Electron NO
Desenvolvedores, não deixe seus amigos escreverem aplicativos no Electron. Se você deseja usar JS e React, use
React Native . É como o Electron, mas você não precisa distribuir uma cópia do Chrome para todos os usuários e executar outra cópia do Chrome para usar seu aplicativo. Acontece que os sistemas operacionais modernos já possuem boas e rápidas bibliotecas de UI. Use-os, peitos!
Outro fato triste é que mesmo muitos desenvolvedores não têm idéia do que está acontecendo em seus computadores. Eles usam o Slack, mas não sabem o quanto é glutão. É sua responsabilidade, como desenvolvedor, saber tudo isso. Prática. Explore as ferramentas de criação de perfil. Use
iStatMeters ou um dos análogos gratuitos. Você não pode melhorar o que não está medindo.
Talvez devêssemos comprar computadores mais lentos para sentir a dor.
O Facebook limitou deliberadamente a velocidade da Internet em seus escritórios uma vez por semana, a fim de simpatizar com seus usuários em outros países do terceiro mundo (khe-Australia-khe). Talvez, como desenvolvedores, também devamos fazer isso com nossos computadores, por exemplo, fazer com que o código funcione muito mais devagar do que o normal, a fim de nos armar com intuição de desempenho. Há alguns anos, deixei meu laptop no trabalho por um longo fim de semana. Em vez de ir atrás dele, decidi conectar o meu Raspberry Pi (muito lento de 1ª geração) e usá-lo para o desenvolvimento. De repente, as muitas operações realizadas instantaneamente no meu laptop i7 regular tornaram-se terrivelmente lentas. E passei o fim de semana para tornar meu fluxo de trabalho mais suave. Todos esses ajustes de desempenho também são transferidos para dispositivos comuns. Reduzir o tempo de lançamento de 5 segundos para 2x no Raspberry Pi foi um salto incrível. Essa correção também se tornou um salto de 0,5 segundos para 0,2, ou algo assim. Isso ainda é muito perceptível para o usuário. Uma hora de início de 0,5 segundos é curta o suficiente para não ser percebida durante o desenvolvimento, mas uma queda para 0,2 obviamente parece muito mais rápida.
Usuários : Por favor, reclame sobre programas lentos. No quintal de 2016 (
... - aprox. Por. ). Carregamos supercomputadores nos bolsos. É inaceitável que os programas sejam lentos.
Desenvolvedores : o desempenho importa. A memória importa. Não me importo que você seja a garota mais atraente na pista de dança, Slack. Eu fecho você assim que sair do escritório. Eu o excluo do computador assim que tiver a oportunidade. Lentidão é um erro. O programa mais rápido é aquele que você não executa. Portanto, pare de incorporar todo o Chrome no seu aplicativo.
E todos vocês desenvolvedores da Web: Aprenda C ou Rust ou algo assim. Seus programas são
executados em um computador . Até você saber como o computador funciona, você estará condenado. E saia do meu gramado até descobrir!
* punho trêmulo *E sim, leia sobre a
crise dos sites de obesidade (
tradução em Habr ). Isso é muito engraçado. E muito triste. E muito vital.
Editar: o Spotify realmente usa o Chromium Embedded Framework em vez de iniciar através do Electron. Mas ele ainda incorpora o Chrome. Eu não sabia disso quando escrevi o artigo, mas não retiro minhas palavras sobre o desempenho final.