Quais são as diferenças funcionais entre NW.js, Brackets-Shell e Electron?

151

Agora que o TideSDK está efetivamente morto, estive pesquisando 'wrappers' alternativos para executar aplicativos HTML / CSS / JS como aplicativos de desktop independentes. As três opções viáveis ​​que encontrei até agora são o NW.js (anteriormente node-webkit), brackets-shell e Electron (anteriormente atom-shell).

O problema é que não parece haver uma comparação suficientemente completa entre os três em termos de conjunto de recursos, compatibilidade, etc. Espero transformar isso em uma discussão canônica mais ou menos sobre as diferenças (objetivas) entre os três, em particular no que diz respeito:

  • Suporte de plataforma ; sistemas operacionais, dependências etc.
  • Suporte a recursos de idiomas , no que diz respeito ao HTML5, CSS3 e JavaScript. Pense em coisas como "o vídeo HTML5 funciona e, se sim, quais codecs estão disponíveis?"
  • Recursos extras não padrão , como ícones de bandeja, notificações pop-up e barras de menus renderizadas pelo sistema operacional.
  • Extensibilidade ; por exemplo. capacidade de 'conectar' o código nativo, conversar com o Node.js e assim por diante.
  • Arquitetura ; em particular as diferenças arquitetônicas que afetam o uso diário como desenvolvedor.
  • Depuração ; ferramentas de desenvolvimento incluídas, compatibilidade com ferramentas mais usadas, como node-inspectoretc.
  • ... e assim por diante.

Quais são as diferenças técnicas e objetivas que são importantes ao fazer uma escolha entre elas como desenvolvedor de aplicativos?

Sven Slootweg
fonte
Você teve alguma sorte olhando as diferenças enquanto isso? Pode fazer algumas escavações neste fim de semana
Stefan
@stefan Ainda não, não: / Eu experimentei um pouco o node-webkit no sentido prático, mas ainda não superei isso. Já não chegado a cerca de procura de documentação formal das diferenças ...
Sven Slootweg
3
Bem, aqui estão as principais diferenças entre o node-webkit e o atom-shell, descritas pela equipe atom-shell, github.com/atom/atom-shell/blob/master/docs/development/… .
sepulchered
2
Que tal o elefante na sala: depuração. Eu tenho usado o nw.js e descobri que a depuração é insuficiente ao usar a plataforma linux para desenvolver. Para desenvolver aplicativos grandes, a depuração é um recurso crítico da IMO. Podemos adicionar depuração à lista de recursos desejáveis ​​com os quais conversar?
Timothy C. Quinn
@JavaScriptDude Obrigado, adicionei isso à lista.
Sven Slootweg

Respostas:

42

Fiz pesquisas semelhantes há cerca de dois meses e, no final, fui com o node-webkit. A maior vantagem do node-webkit é o node.js e o npm. O gerenciamento de pacotes do npm é muito bom, e o nó fez um bom acesso ao sistema de arquivos.

Brackets-shell parecia interessante, mas, além de um bom IDE, eu realmente não entendi o que o tornou tão bom ou melhor que o resto. Eles são muito claros: "O brackets-shell é mantido apenas para uso pelo projeto Brackets", que grita para mim.

https://github.com/adobe/brackets-shell#overview

O Atom-shell parece estar ativo recentemente, mas parece muito com parênteses, na verdade eles estão realmente escrevendo e editando / IDE que, por acaso, estão anexados a um tempo de execução do webkit. Também é construído sobre o node.js. Este tem a desvantagem de ser difícil pesquisar coisas on-line sem ser lembrado da química do ensino médio.

Eu realmente não quero um novo editor, e a maioria dos programadores já tem o seu favorito. Para o desenvolvimento real do aplicativo, eles funcionam da mesma maneira e devem, pois todos usam o webkit. Você basicamente escreve de 90 a 95% como um site e depois lida com as partes nativas e algumas configurações.

Essas coisas são verdadeiras para todas as três plataformas - executadas no suporte à linguagem Windows, Mac e Linux - HTML5, CSS3 e Javascript: uma vez que executam javascript, você pode baixar e executar praticamente qualquer biblioteca / estrutura que desejar.

A grande ressalva no webkit é o suporte a codec. Normalmente, você terá problemas com codecs de vídeo não livres, a menos que você reconstrua a dll / so para suportá-los. Por exemplo, o node-webkit enviado não reproduz vídeo em mp4.

John W. Clark
fonte
Você poderia explicar se há alguma diferença no que diz respeito à reprodução de MP4 no shell brackets e atom-shell? Não está claro em sua resposta se isso é um problema na maioria das distribuições do WebKit ou apenas no node-webkit.
Sven Slootweg
A reprodução de MP4, sendo um problema, é um problema do webkit. Você deve se lembrar que o webkit é realmente o cromo no coração e, a menos que a tecnologia AV seja aberta e gratuita, eles não o suportam imediatamente. A resposta padrão é substituir / reconstruir ffmpegsumo. Substituí-lo por um da sua instalação atual do Chrome parece funcionar bastante bem.
11114 John John Clark
1
Acontece que o Brackets é construído bracket-shelle o Atom atom-shell, mas você pode usar qualquer editor ou IDE de sua escolha para criar código com eles. Acho que o que o OP quer é mais sobre as diferenças técnicas entre os 3. Seria ótimo ver algo como TodoMVC nos três ambientes semelhantes ao tempo de execução.
Ehtesh Choudhury
@SvenSlootweg, o suporte a codec é mais sobre as bibliotecas usadas com o webkit que você está usando. Todos os três estão usando o Chromium como base do kit da web, para que todos tenham os mesmos problemas de codec e possam ser resolvidos da mesma maneira.
John W. Clark
40

Eu tenho jogado com o Atom-Shell nos últimos dias e estou adorando até agora.

A melhor parte é que é apoiado pelo GitHub .. o que deve permitir que você se instale na plataforma a longo prazo, especialmente se obtiver muitos seguidores. Também é possível graças a melhorias diretas no Node.js., cortesia de um contrato com o StrongLoop , , que é uma das principais colaboradoras do Node.js. (eles afirmam empregar mais desenvolvedores principais do Node.js. do que qualquer outra empresa, até a Joyent).

Também achei bastante confortável começar. Levei cerca de um dia para aprender a estrutura e executar minha primeira prova de conceito. Muito legal.


Tópicos:

  • Suporte de plataforma: Windows, Linux, Mac OSX ( Mais informações aqui )
  • Suporte a recursos de idiomas: HTML5, CSS3, JS via Chromium - até agora, zero problemas, mas não testei o vídeo especificamente.
  • Recursos nativos: menus de aplicativos nativos, suporte da bandeja de tarefas, teclas de atalho globais, suporte ao manipulador de protocolos (que eu já vi até agora)
  • Extensibilidade: excelente integração ao Node.js., o cliente e o servidor podem "exigir" módulos e nativos do Node.js. Também testei com sucesso as bibliotecas Bower (incluindo jQuery) sem problemas.
  • Arquitetura: Coberto nos outros pontos, mas em geral é muito suave.

Atualização (25/11/14): ainda não encontrei o caso de uso do Atom-Shell em nenhuma capacidade oficial, mas usei-o para criar alguns aplicativos pequenos para meu próprio uso, sendo o mais complexo um aplicativo que puxa meu tempo registra no meu software PM e cria faturas Paypal.

Minha opinião sobre a plataforma permanece positiva. É bem legal.

No meu aplicativo de faturamento de tempo, trouxe com sucesso o Bootstrap 3 Modelo de exemplo de painel e alguns módulos de nó (bluebird, Paypal SDK, Teamwork PM Client) para criar um aplicativo levemente complexo. Demorei alguns dias e faz bem o seu trabalho.

Realmente não consigo pensar em nada negativo a dizer sobre o Atom-Shell, seu sólido, estável, rápido e fácil de codificar. Espero que isso ajude alguém.

Luke Chavers
fonte
Você pode elaborar as diferenças com o node-webkit em particular? Tanto quanto posso dizer, todos (a maioria?) Desses pontos também são oferecidos pelo node-webkit, mas não tenho certeza se algo está faltando.
Sven Slootweg 12/08/14
oi luke é possível atualizar o aplicativo atom-shell ele mesmo ...?
Munish Kapoor
@SvenSlootweg Desculpe, eu perdi seu comentário de alguns meses atrás; Infelizmente, eu não sou bem versado com o node-webkit e não pude comparar os dois efetivamente. Mas eu li este artigo do StrongLoop , que pelo menos indica que o Atom-Shell abriu novos caminhos. : \
Luke Chavers
@MunishKapoor Para o desenvolvimento? Você pode baixar a versão mais recente. Eu, mais ou menos, apenas renomeio o diretório atom antigo e o substitui pelo novo. Eles podem ter algum processo sofisticado como "atualização do npm" - mas eu não o investiguei. Para atualizar seu aplicativo + shell atom no cliente, não acho que eles endereçam isso diretamente (presumivelmente) e, presumivelmente, espero que você use um instalador ou outra plataforma externa para isso. Eu achei este artigo interessante nos documentos deles .
Luke Chavers
1
@ Moonwalker Sim, ele usa um aplicativo chamado " Asar " para embalagem. (consulte: "Empacotamento de aplicativo" ). Também encontrei essa comparação Node-Webkit / Atom-Shell .
Luke Chavers 03/02
22

Além de oferecer suporte completo aos padrões da Web, o NW.js. suporta uma lista de recursos não padrão para o desenvolvimento de aplicativos nativos, incluindo:

Há muito mais para ver no wiki, incluindo Menu, Bandeja, etc.

Roger Wang
fonte
3
+1 no modo quiosque Roger. Percebo que esse é um recurso que usarei no futuro. Espero que os recursos de depuração melhorem para que eu possa permanecer no nw.js. No entanto, neste momento, estou pensando seriamente em mudar para o Atom Electron por um tempo para testar as águas. Eu achei a depuração no nw.js um pouco difícil.
Timothy C. Quinn
Estou um pouco preocupado com a inclusão de "proteger a fonte JS" lá - está na mesma classe que DRM, no sentido de que não funciona. Ele apenas "protege" daqueles contra os quais você não precisava "proteger". Não parece algo que deve ser anunciado como um recurso para mim.
Sven Slootweg
1
Não é como o DRM para Web - os programadores JS devem fazer o que os programadores de C ++, incluindo a compilação do código-fonte no código da máquina, quando desenvolvem aplicativos nativos.
Roger Wang
@JavaScriptDude, você quer dizer devtools? Na próxima versão (0,13), a experiência será quase a mesma do navegador Chrome.
Roger Wang
@Roger. Desculpe pelo atraso na resposta. Sim, ferramentas. Eu descobri que as seguintes limitações estavam presentes, algumas das quais provavelmente no próprio devtools: 1) Nenhuma depuração de novas janelas ativadas. 2) Depuração remota nunca funcionou. 3) Incapacidade de recuperar pontos de interrupção, observar variáveis ​​e fontes abertas (toda vez que o aplicativo for reiniciado, todas as configurações são limpas) 4) (o verdadeiro verdadeiro) Incapacidade de depurar códigos carregados com require ().
Timothy C. Quinn
10

Estou trabalhando com shell-colchetes há algum tempo, aqui estão algumas das minhas descobertas:

  • brackets-shell é desenvolvido principalmente como um shell no projeto IDE de brackets, mas o projeto pode executar qualquer aplicativo da web. Você só precisa apontar para sua própria página html. Clint Berry escreveu um excelente tutorial sobre como fazer exatamente isso: http://clintberry.com/2013/html5-desktop-apps-with-brackets-shell/
  • O projeto é apoiado pela Adobe e tem muita atividade
  • A documentação poderia ser melhor

  • suporte à plataforma Eles suportam Windows, Mac e Linux. Um pacote de instalação também pode ser criado. Eu só testei no Win e Mac, funciona muito bem.

  • suporte a recursos html5, css3, js. O vídeo HTML5 não funciona imediatamente, mas é muito fácil de ativar (por padrão, o ffmpegsumo.dll não é copiado no instalador, se você alterar o script para copiá-lo, ele funcionará).
  • barra de menus de recursos nativos , 'abrir arquivo com', acesso ao sistema de arquivos. Não estou usando nenhum deles, pois tudo o que preciso é a comunicação com o processo do nó.
  • extensibilidade em que um nodejs está embutido, e você pode se comunicar com o nó a partir do seu aplicativo da web. Dessa forma, você pode usar o nó para acessar o sistema de arquivos etc.
  • arquitetura O projeto está bem configurado, mantendo uma boa separação entre o projeto do shell e o seu próprio aplicativo Web em execução nele. Em seu próprio aplicativo, está disponível um objeto global appshell, que fornece acesso à funcionalidade de colchetes (acesso ao sistema de arquivos, comunicação com o processo do nó, ...).
Karel Braeckman
fonte
6
O que me levou a ficar longe da Brackes-shell foi sua própria visão geral. github.com/adobe/brackets-shell "Nota: o brackets-shell é mantido apenas para uso pelo projeto Brackets. Embora algumas pessoas tenham tido sucesso em usá-lo como um aplicativo shell para outros projetos, não fornecemos nenhum documento oficial. suporte para isso e não fizemos muito trabalho para tornar o shell do aplicativo facilmente reutilizável. Muitas pessoas provavelmente acharão mais fácil usar um projeto como o node-webkit, que é mais genérico por design ".
John W. Clark
5

Uma coisa a observar (se você se importa), é que o Electron oficialmente não suporta o Windows Vista. A participação de mercado do Vista está aproximadamente na metade do caminho entre o OSX 10.9 e 10.10 (ambos totalmente suportados pela Electron). O Vista também ainda é suportado pela Microsoft até 2017.

O NW.js funciona bem no Vista, assim como no OSX 10.9+. O NW.js funciona no Ubuntu, Debian, Zorin, Manjaro, Arch e na maioria dos outros sistemas operacionais Linux baseados no Debian. A Electron recusou os PRs para corrigir bugs específicos do Ubuntu em sua plataforma, o que é preocupante.

O NW.js também funciona no XP. Atualmente, 18% do mercado ainda está no XP. Portanto, se seu aplicativo de desktop é de uso mais geral ou deseja ter acesso aos adotantes tardios ainda no XP, provavelmente você está melhor com o NW.js (0.14.7), pois o Electron suporta apenas o Windows 7 e superior.

Se você usa o NW.js 0.12.3, também pode suportar o OSX 10.6+ e versões muito antigas de sistemas operacionais Linux baseados no Debian como Ubuntu e Win XP +. É recomendável que você faça builds especiais apenas para esses sistemas legados e use as versões mais recentes do NW.js para sistemas operacionais mais recentes.

Jaredcheeda
fonte
1
O Chrome não interrompeu o suporte depois que a MS o fez - o suporte foi estendido até o final de 2015 - chrome.blogspot.com/2015/04/…
Karol Klepacki 07/07
O elétron (atom-shell) não roda no RHEL 6.6 e abaixo, e o código fonte não pode ser compilado nessas distros.
Michael Kruglos
Você pode usar o nw-builder para criar as versões do MAS. Há braço constrói para NW.js também.
Jaredcheeda 02/09