Por que escolhemos Electron

Antecedentes


Somos uma pequena equipe de desenvolvimento, estamos criando uma nova ferramenta para trabalhar com a API Testmace . Na verdade, este é um cliente de descanso avançado, com a capacidade de criar testes de API automatizados usando uma interface gráfica, equipada com coisas legais como um mecanismo variável avançado, preenchimento automático em todos os campos de entrada e destaque total da sintaxe.

Quero falar sobre como chegamos à Electron como uma tecnologia para escrever nossa aplicação.

Por que o desktop


Nos últimos 10 a 15 anos, a web experimentou um crescimento explosivo e continua a crescer rapidamente. Constantemente, existem mais e mais novas ferramentas para criar aplicativos da Web cada vez mais funcionais e complexos. Até mesmo linguagens de programação inteiras são criadas, aprimoradas para escrever aplicativos da Web e quase sem soluções prontas fora desta área. E em nossa vida cotidiana, já substituímos parcialmente o microsoft office e thunderbird pelo google docs e pela interface do gmail.

No entanto, a Web ainda não pode suplantar completamente os aplicativos da área de trabalho e pelos seguintes motivos:

  • Falta de capacidade de resposta dos aplicativos da web. Em algum lugar, a culpa é da sincronização cliente-servidor e da Internet lenta, em algum lugar a natureza de javascript de thread único e em algum lugar apenas a gula do navegador em sua máquina não muito poderosa. Vale ressaltar que a solução para os problemas acima é apenas uma questão de tempo. Em particular, os trabalhadores da Web já são suportados por todos os navegadores modernos, que resolvem parcialmente o problema da multithreading, e recursos como o SharedArrayBuffer podem reduzir a sobrecarga da memória de cópia entre o thread principal e os trabalhadores.
  • Acesso a recursos do sistema local. Existem classes inteiras de aplicativos (gerenciadores de arquivos, tweakers, daemons e serviços) que não podem ser implementados como aplicativos da Web (pelo menos neste estágio de desenvolvimento).
  • Limitações dos recursos do próprio navegador. Por exemplo, a interação de rede é limitada apenas enviando uma solicitação http e conectando-se através de soquetes da web. Coisas de nível inferior (tcp, sockets de atualização), infelizmente, não estão disponíveis.
  • Limitações artificiais dos navegadores por motivos de segurança. CORS, trabalhe com cookies, restrições nos cabeçalhos enviados.
  • Um conjunto limitado de idiomas e abordagens. Diferentemente dos aplicativos da Web, onde o javascript continua sendo o único idioma para aplicativos de gravação, os aplicativos de desktop permitem que você use qualquer linguagem de programação até os montadores, use efetivamente os recursos do sistema usando programação multithread e instruções de baixo nível. Vale a pena notar que a situação está melhorando sobre esse problema - os transpilers de alguns idiomas aparecem em javascript. Além disso, a compilação no webassembly permite transferir o tempo de operação de outros idiomas (C ++, C #, ferrugem etc.), obtendo frequentemente um bom aumento de desempenho.

Considerando os motivos listados acima, podemos concluir que o TestMace deve ser um aplicativo de desktop típico:

  • Precisamos de acesso ao sistema de arquivos para trabalhar com o projeto.
  • As limitações da busca não permitem controle total sobre a configuração e execução da solicitação.
  • No futuro, podemos precisar de otimizações de baixo nível para melhorar o desempenho do aplicativo.

Seleção de tecnologia


Decidimos que nosso aplicativo será desktop; no entanto, ainda não decidimos o idioma e as tecnologias nas quais implementaremos isso. Quanto às linguagens de programação, temos os seguintes requisitos para elas:

  1. Deve ser uma linguagem de tipo estático.
  2. A linguagem deve ter uma infraestrutura grande e madura - deve haver bibliotecas e suporte comprovados do IDE e de outras ferramentas.
  3. O idioma deve ser familiar para a maioria dos membros da equipe.

O último ponto também é importante. Como startup, estamos interessados ​​no lançamento mais rápido (dentro de seis meses) do produto no mercado, aproveitando ao máximo os recursos internos da equipe. O aprendizado de um novo idioma e infraestrutura reduz a previsibilidade do planejamento e está repleto de erros na adoção de determinadas decisões.

Seja como for, a lista de requisitos não parece muito rígida e linguagens como C #, TypeScript, Go a satisfazem. Faremos a seleção adicional de tecnologias, levando em consideração a disponibilidade de implementações dos componentes necessários para esses idiomas.

As coisas são muito mais interessantes com a escolha de soluções para o desenvolvimento de uma interface do usuário. Os requisitos para eles são os seguintes:

  1. Plataforma cruzada (Windows, Linux, MacOS)
  2. Um rico conjunto de componentes internos e de terceiros
  3. Personalização de componentes
  4. Linguagem de marcação para descrição da interface
  5. Bom suporte

Considere quais soluções são adequadas para esses requisitos.

Qt (Qml)


O Qt é um poderoso kit de ferramentas para escrever aplicativos de plataforma cruzada. Nas versões mais recentes dessa estrutura, o componente Qt Quick apareceu para escrever aplicativos usando a linguagem declarativa de descrição de marcação QML. O Qt em geral, e o QML em particular, são soluções comprovadas em batalha que encontraram sua aplicação em quase todas as áreas - desde embutidos a shells de software de sistemas operacionais.

A principal linguagem de programação no Qt é C ++ (você pode usar javascript no QML). No entanto, para Qt e QML, existem ligantes para outras linguagens de programação (por exemplo, para C # ). No entanto, apenas a integração python é oficialmente suportada. Tudo o resto são implementações de terceiros. Concordo, não gostaria de confiar na parte mais básica do aplicativo na biblioteca, que é desenvolvida como um hobby por um pequeno grupo de entusiastas.

Há também um projeto Brig . Esses são os ligadores do NodeJS para QML. Uma característica distintiva deste projeto é uma demonstração impressionante . No entanto, como geralmente acontece em projetos de código aberto, os autores não prestam a devida atenção ao projeto e, portanto, também estão perdendo o controle.

GTK


Uma biblioteca para a construção de uma interface do usuário, iniciada como parte de um projeto GIMP e posteriormente separada em um projeto separado. Existe uma ferramenta Glade para o rápido desenvolvimento da interface do usuário. A linguagem principal para o desenvolvimento do GTK é C, mas existem pastas para muitas linguagens de programação populares . Além disso, usando ligantes de C # , foi criado o MonoDevelop - um dos IDEs mais poderosos para desenvolvimento em C #. No entanto, após um estudo mais cuidadoso, entendemos que o projeto GTK # está em um estado semi-abandonado - o último commit foi em fevereiro de 2018, o próximo em janeiro de 2017 e 2016. Por commit por ano. Não é espesso, considerando que o repositório principal do gtk está em desenvolvimento. E a felicidade estava tão perto ...

Elétron


Recentemente, muito ruído está associado a essa estrutura. Alguém o elogia pela oportunidade de transferir as conquistas dos aplicativos da web para a área de trabalho, alguém odeia a gula excessiva. Ambos podem ser entendidos. Electron sob o capô usa node.js e a biblioteca de renderização do Chromium. De fato, um aplicativo Web comum é criado e agrupado em um arquivo executável. Além disso, cada aplicativo vem com sua própria versão do Node.js e do Chrome.

De fato, há apenas um sinal de menos, mas é bastante sério - esse é um grande consumo de memória (em comparação com outras tecnologias): um projeto vazio ocupa 100-200 megabytes de memória. Para alguns, esse é o motivo de se recusar a usar esses aplicativos (olá, Skype). No entanto, vamos analisar a situação no mercado. Atualmente, muitos aplicativos populares são escritos em elétron (Slack, Skype, Discord, VSCode, Atom, Postman, Insomnia etc.). Muitos deles são padrões em seu campo ou estão conquistando rapidamente os corações dos usuários (como o mesmo VSCode e Insomnia). As pessoas simplesmente usam ferramentas que resolvem bem suas tarefas diárias, apesar de alguns efeitos colaterais. Por outro lado, os computadores estão se tornando mais poderosos (pelo menos o crescimento da RAM não parou ) e você ouve cada vez menos comentários de clientes insatisfeitos de que "seu cromo consumiu toda a minha memória". Em resumo, acreditamos que o aumento do consumo de RAM não terá um grande papel se o produto for realmente bom em seu campo.

As vantagens desta tecnologia são óbvias:

  1. A capacidade de usar as melhores práticas da web.
  2. É mais fácil encontrar especialistas nesse campo.
  3. O fluxo de trabalho gasto "designer" - "designer de layout" - "programador", repleto de ferramentas convenientes em todas as etapas.

Além disso, incluímos o fato de que a equipe possui uma vasta experiência na criação de aplicativos front-end.

Como resultado, decidimos pela Electron como a principal ferramenta para o desenvolvimento de nosso projeto. Automaticamente, escolhemos o TypeScript como a linguagem para o desenvolvimento do aplicativo.

Conclusão


Uma das principais tarefas de uma startup é o rápido lançamento de um produto no mercado. Legal se você puder fazê-lo com um custo mínimo. O objetivo desta análise foi encontrar uma ferramenta que nos permitisse resolver esses problemas. Em nossa opinião, Electron nos convém perfeitamente. Três meses após o início do desenvolvimento, ele ainda está fora de competição e parece que tudo é sério conosco.

Source: https://habr.com/ru/post/pt439946/


All Articles