Jakie są różnice funkcjonalne między NW.js, Brackets-Shell i Electron?

151

Teraz, gdy TideSDK jest faktycznie martwy, szukałem alternatywnych „opakowań” do uruchamiania aplikacji HTML / CSS / JS jako samodzielnych aplikacji komputerowych. Trzy możliwe opcje, z którymi się do tej pory spotkałem , to NW.js (dawniej node-webkit), nawias-powłoka i Electron (dawniej atom-powłoka).

Problem polega na tym, że nie wydaje się, aby było wystarczająco kompletne porównanie między tymi trzema pod względem zestawu funkcji, kompatybilności itp. Mam nadzieję, że zamienię to w mniej lub bardziej kanoniczny wątek dotyczący (obiektywnych) różnic między trzy, w szczególności dotyczące:

  • Wsparcie platformy ; systemy operacyjne, zależności itp.
  • Obsługa funkcji językowych , jeśli chodzi o HTML5, CSS3 i JavaScript. Pomyśl na przykład „Czy wideo HTML5 działa, a jeśli tak, jakie kodeki są dostępne?”
  • Niestandardowe dodatkowe funkcje , takie jak ikony w zasobniku, wyskakujące powiadomienia i paski menu renderowane przez system operacyjny.
  • Rozszerzalność ; na przykład. możliwość „podłączenia” kodu natywnego, rozmawiania z Node.js i tak dalej.
  • Architektura ; w szczególności różnice architektoniczne, które wpływają na codzienne użytkowanie jako deweloper.
  • Debugowanie ; zawiera narzędzia programistyczne, zgodność z powszechnie używanymi narzędziami, takimi jak node-inspectoritp.
  • ... i tak dalej.

Jakie są obiektywne, techniczne różnice, które mają znaczenie przy dokonywaniu wyboru między nimi jako twórca aplikacji?

Sven Slootweg
źródło
Czy w międzyczasie miałeś szczęście, patrząc na różnice? Może trochę kopiemy w ten weekend
stefan
@stefan Jeszcze nie, nie: / Poeksperymentowałem trochę z node-webkit w praktycznym sensie, ale jeszcze nie wyszedłem poza to. Nie
zacząłem
3
Cóż, tutaj są główne różnice między node-webkit i atom-shell przedstawione przez zespół atom-shell, github.com/atom/atom-shell/blob/master/docs/development/… .
pochowany
2
A co ze słoniem w pokoju: debugowanie. Używałem nw.js i odkryłem, że podczas programowania na platformie linux brakuje debugowania. Przy tworzeniu dużych aplikacji debugowanie jest krytyczną funkcją IMO. Czy możemy dodać debugowanie do listy pożądanych funkcji, z którymi warto porozmawiać?
Timothy C. Quinn
@JavaScriptDude Dzięki, dodałem to do listy.
Sven Slootweg

Odpowiedzi:

42

Zrobiłem podobne badania około dwa miesiące temu i ostatecznie wybrałem pakiet node-webkit. Największą zaletą pakietu node-webkit są node.js i npm. Zarządzanie pakietami w npm jest naprawdę fajne, a node ma dobrze wykonany dostęp do systemu plików.

Nawiasy-powłoka wyglądały interesująco, ale poza ładnym IDE tak naprawdę nie rozumiałem, co sprawiło, że ten był tak dobry lub lepszy od pozostałych. Są bardzo jasne, że „Powłoka nawiasów jest utrzymywana tylko do użytku przez projekt Brackets”, a krzyki uciekają do mnie.

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

Wygląda na to, że powłoka atomowa jest ostatnio aktywna, ale wydaje się być bardzo podobna do nawiasów, ponieważ tak naprawdę są one piszą i edytorem / IDE, które akurat jest dołączone do środowiska wykonawczego webkit. Jest również zbudowany na bazie node.js. Ten ma tę wadę, że trudno jest wyszukiwać rzeczy w Internecie bez przypominania o chemii w szkole średniej.

Naprawdę nie chcę nowego edytora, a większość programistów ma już swojego ulubionego. W przypadku faktycznego tworzenia aplikacji działają one prawie tak samo i powinny, ponieważ wszystkie używają zestawu webkit. Zasadniczo piszesz 90-95% tego jak strona internetowa, a następnie zajmujesz się częściami natywnymi i niektórymi konfiguracjami.

Te rzeczy są prawdziwe dla wszystkich trzech z nich - działa na platformach Windows, Mac i Linux - HTML5, CSS3 i Javascript: ponieważ obsługują javascript, możesz pobrać i uruchomić prawie każdą bibliotekę / framework, który chcesz.

Dużym zastrzeżeniem w webkit jest obsługa kodeków. Zazwyczaj będziesz mieć problemy z niewolnymi kodekami wideo, chyba że przebudujesz dll / so, aby je obsługiwać. Na przykład dostarczony zestaw node-webkit nie odtwarza wideo mp4.

John W. Clark
źródło
Czy mógłbyś wyjaśnić, czy jest jakaś różnica w odniesieniu do odtwarzania MP4 w nawiasach-powłoce i atom-powłoce? Z twojej odpowiedzi nie wynika jasno, czy jest to dziwactwo w większości dystrybucji WebKit, czy tylko w node-webkit.
Sven Slootweg
Problem z odtwarzaniem MP4 to problem z zestawem internetowym. Musisz pamiętać, że webkit to naprawdę chrom w sercu i jeśli technologia AV nie jest otwarta i bezpłatna, nie obsługuje jej po wyjęciu z pudełka. Standardową odpowiedzią jest zastąpienie / przebudowanie ffmpegsumo. Zastąpienie go jednym z bieżącej instalacji Chrome wydaje się działać dość dobrze.
John W. Clark,
1
Tak się składa, że ​​Brackets jest zbudowany na bracket-shellBrackets, a Atom jest wbudowany atom-shell, ale możesz użyć dowolnego edytora lub wybranego środowiska IDE, aby stworzyć z nimi kod. Myślę, że to, czego chce OP, to bardziej techniczne różnice między 3. Byłoby miło zobaczyć coś takiego jak TodoMVC w trzech środowiskach podobnych do runtime.
Ehtesh Choudhury
@SvenSlootweg Obsługa kodeków dotyczy bardziej bibliotek używanych z używanym zestawem internetowym. Wszyscy trzej używają Chromium jako podstawy zestawu internetowego, więc wszystkie mają te same problemy z kodekiem i można je rozwiązać w ten sam sposób.
John W. Clark
40

Gram z Atom-Shell przez ostatnie kilka dni i do tej pory to uwielbiam.

Najlepsze w tym jest to, że jest wspierany przez GitHub .. co powinno pozwolić ci osiedlić się na platformie na dłuższą metę, zwłaszcza jeśli zyskuje dużą popularność. Jest to również możliwe dzięki bezpośrednim ulepszeniom Node.js dzięki umowie z StrongLoop , który jest głównym współpracownikiem Node.js (twierdzą, że zatrudniają więcej głównych programistów Node.js niż jakakolwiek inna firma, nawet Joyent).

Uważam również, że rozpoczęcie pracy jest raczej wygodne. Zajęło mi około jednego dnia, zanim nauczyłem się struktury i uruchomiłem mój pierwszy test sprawdzający koncepcję. Bardzo fajny.


Bullet Points:

  • Obsługa platform: Windows, Linux, Mac OSX ( więcej informacji tutaj )
  • Obsługa funkcji językowych: HTML5, CSS3, JS przez Chromium - jak dotąd zero problemów, ale nie testowałem specjalnie wideo.
  • Funkcje natywne: natywne menu aplikacji, obsługa paska zadań, globalne klawisze skrótu, obsługa protokołu obsługi (którą widziałem do tej pory)
  • Rozszerzalność: doskonała integracja z Node.js, zarówno klient, jak i serwer mogą „wymagać” modułów i elementów natywnych Node.js. Z powodzeniem przetestowałem również biblioteki Bower (w tym jQuery) bez problemu.
  • Architektura: Pokryta w innych punktach, ale ogólnie jest bardzo gładka.

Aktualizacja (25.11.14): Nie znalazłem jeszcze przypadku użycia Atom-Shell w żadnym oficjalnym charakterze, ale użyłem go do zbudowania kilku małych aplikacji na własny użytek, z których najbardziej złożona jest aplikacja, która ściąga mój czas loguje się z mojego oprogramowania PM i tworzy faktury Paypal.

Moja opinia o platformie jest pozytywna. To jest niesamowite.

W mojej aplikacji do fakturowania czasu udało mi się wprowadzić przykładowy szablon pulpitu Bootstrap 3 oraz kilka modułów węzłów (bluebird, Paypal SDK, Teamwork PM Client), aby stworzyć lekko złożoną aplikację. Zajęło mi to kilka dni i dobrze spełnia swoje zadanie.

Naprawdę nie przychodzi mi do głowy nic negatywnego do powiedzenia na temat Atom-Shell, jego solidnego, stabilnego, szybkiego i łatwego do zakodowania kodu. Mam nadzieję, że to komuś pomoże.

Luke Chavers
źródło
Czy możesz omówić różnice w szczególności w przypadku pakietu node-webkit? O ile wiem, wszystkie (większość?) Z tych punktów są również oferowane przez node-webkit, ale nie jestem pewien, czy czegoś mi brakuje.
Sven Slootweg,
cześć luke, czy można samodzielnie zaktualizować aplikację powłoki atomowej ...?
Munish Kapoor
@SvenSlootweg Przepraszamy, brakowało mi Twojego komentarza sprzed kilku miesięcy; Niestety nie jestem dobrze zaznajomiony z pakietem node-webkit i nie mogłem skutecznie ich porównać. Ale przeczytałem ten artykuł StrongLoop , który przynajmniej wskazuje, że Atom-Shell otworzył nowe możliwości. : \
Luke Chavers
@MunishKapoor Do rozwoju? Możesz pobrać najnowszą wersję. Po prostu zmieniam nazwę starego katalogu atom i zastępuję go nowym. Mogą mieć jakiś oszałamiający proces, taki jak "aktualizacja npm" - ale nie badałem tego. Jeśli chodzi o aktualizację powłoki aplikacji + atom na kliencie, nie sądzę, aby dotyczyły tego bezpośrednio (w ogóle) i prawdopodobnie spodziewam się, że użyjesz do tego instalatora lub innej zewnętrznej platformy. Jednak uważam, że ten artykuł w ich dokumentach jest interesujący.
Luke Chavers,
1
@Moonwalker Tak, do pakowania używa aplikacji o nazwie „ Asar ”. (patrz: „Opakowanie aplikacji” ). Właśnie znalazłem również porównanie Node-Webkit / Atom-Shell .
Luke Chavers
22

Oprócz pełnej obsługi standardów internetowych, NW.js obsługuje listę niestandardowych funkcji tworzenia aplikacji natywnych, w tym:

Na wiki jest znacznie więcej do zobaczenia, w tym Menu, Tray itp.

Roger Wang
źródło
3
+1 w trybie Kiosk Roger. Widzę, że jest to funkcja, z której będę korzystać w przyszłości. Mam nadzieję, że możliwości debugowania poprawią się, więc mogę pozostać na nw.js, jednak teraz poważnie rozważam przejście na Atom Electron na chwilę, aby przetestować wody. Uważam, że debugowanie w nw.js jest trochę niepotrzebne.
Timothy C. Quinn
Trochę obawiam się włączenia tam „ochrony źródła JS” - jest w tej samej klasie co DRM, w tym sensie, że nie działa. To tylko „chroni” przed tymi, przed którymi nie musiałeś „chronić” na początku. Nie wygląda to na coś, co powinno być reklamowane jako funkcja.
Sven Slootweg
1
To nie jest tak, że DRM dla sieci Web - programiści JS powinni być w stanie zrobić wszystko, co mogą zrobić programiści C ++, w tym kompilować kod źródłowy do kodu maszynowego, kiedy tworzą aplikacje natywne.
Roger Wang
@JavaScriptDude czy masz na myśli devtools? W następnej wersji (0.13) wrażenia będą prawie takie same jak w przeglądarce Chrome.
Roger Wang
@Zrozumiałem. Przepraszam za spóźnioną odpowiedź. Tak, devtools. Zauważyłem, że istnieją następujące ograniczenia, z których niektóre są prawdopodobnie w samych narzędziach dev: 1) Brak debugowania nowych okien. 2) Zdalne debugowanie nigdy nie działało. 3) Brak możliwości przywołania punktów przerwania, obserwowania zmiennych i otwartych źródeł (za każdym razem, gdy ponownie uruchomisz aplikację, wszystkie ustawienia są wyczyszczone) 4) (prawdziwy biggie) Brak możliwości debugowania kodu załadowanego za pomocą require ().
Timothy C. Quinn
10

Od jakiegoś czasu pracuję z powłoką zamków, oto niektóre z moich ustaleń:

  • brackets-shell jest głównie rozwijany jako powłoka pod projektem IDE nawiasów, ale projekt może uruchamiać dowolną aplikację internetową. Wystarczy wskazać go na własną stronę HTML. Clint Berry napisał doskonały samouczek dotyczący robienia tego właśnie: http://clintberry.com/2013/html5-desktop-apps-with-brackets-shell/
  • Projekt jest wspierany przez Adobe i ma dużą aktywność
  • Dokumentacja mogłaby być lepsza

  • wsparcie platformy Obsługują systemy Windows, Mac i Linux. Można również utworzyć pakiet instalatora. Testowałem go tylko na Win i Mac, działa świetnie.

  • obsługa funkcji html5, css3, js. Wideo HTML5 nie działa po wyjęciu z pudełka, ale jest bardzo łatwe do włączenia (domyślnie ffmpegsumo.dll nie jest kopiowany do instalatora, jeśli zmienisz skrypt, aby go skopiować, zadziała).
  • natywny pasek menu funkcji , „otwórz plik za pomocą”, dostęp do systemu plików. Nie używam żadnego z nich, ponieważ potrzebuję tylko komunikacji z procesem węzła.
  • rozszerzalność a nodejs jest wbudowany i możesz komunikować się z węzłem z poziomu aplikacji internetowej. W ten sposób możesz użyć node, aby uzyskać dostęp do systemu plików itp.
  • architektura Projekt jest dobrze skonfigurowany, zachowując ładną separację między projektem powłoki a działającą w nim własną aplikacją internetową. We własnej aplikacji dostępny jest globalny obiekt Appshell, który zapewnia dostęp do funkcji nawiasów (dostęp do systemu plików, komunikacja z procesem węzła, ...).
Karel Braeckman
źródło
6
Jedyną rzeczą, która skłoniła mnie do trzymania się z daleka od powłoki Brackesa, był ich własny pogląd. github.com/adobe/brackets-shell "Uwaga: powłoka nawiasów jest obsługiwana tylko do użytku przez projekt Brackets . Chociaż niektórym osobom z pewnością udało się użyć jej jako powłoki aplikacji w innych projektach, nie udostępniamy żadnych oficjalnych obsługuje to i nie włożyliśmy zbyt wiele pracy, aby powłoka aplikacji była łatwa do ponownego użycia. Wiele osób prawdopodobnie będzie łatwiej korzystać z projektu takiego jak node-webkit, który jest bardziej ogólny z założenia ”.
John W. Clark
5

Jedna rzecz, na którą należy zwrócić uwagę (jeśli Cię to obchodzi), to fakt, że Electron oficjalnie nie obsługuje systemu Windows Vista. Udział Visty w rynku jest mniej więcej w połowie między OSX 10.9 a 10.10 (oba są w pełni obsługiwane przez Electron). Vista jest nadal obsługiwana przez Microsoft do 2017 roku.

NW.js działa dobrze w Vista, a także OSX 10.9+. NW.js działa na systemach Ubuntu, Debian, Zorin, Manjaro, Arch i większości innych systemów operacyjnych Linux opartych na Debianie. Electron odmówił PR'owi naprawienia konkretnych błędów Ubuntu na ich platformie, co jest niepokojące.

NW.js działa również w XP. Obecnie 18% rynku jest nadal na XP. Więc jeśli jesteś aplikacją komputerową o bardziej ogólnym przeznaczeniu lub chcesz mieć dostęp do późnych użytkowników, którzy nadal korzystają z XP, prawdopodobnie lepiej będzie z NW.js (0.14.7), ponieważ Electron obsługuje tylko Win 7 i nowsze.

Jeśli używasz NW.js 0.12.3, możesz również obsługiwać OSX 10.6+ i bardzo stare wersje systemów operacyjnych Linux opartych na Debianie, takie jak Ubuntu i Win XP +. Zaleca się jednak tworzenie specjalnych kompilacji tylko dla starszych systemów i używanie nowszych wersji NW.js dla nowszych systemów operacyjnych.

Jaredcheeda
źródło
1
Chrome nie powstrzymało wsparcie po MS to zrobił - wsparcie zostało przedłużone do końca 2015 roku - chrome.blogspot.com/2015/04/...
Karol Klepacki
electron (atom-shell) nie działa na RHEL 6.6 i niższych, a kod źródłowy nie może być skompilowany na tych dystrybucjach.
Michael Kruglos
Możesz użyć nw-builder do tworzenia wersji MAS. Istnieje ramię buduje dla NW.js również.
Jaredcheeda