📈 Umstieg auf Node.js LTS 16/18 + Ende von Open-Zwave

Hallo @contributors!

Ich habe den PR gemerged, der die Open-Zwave-Integration entfernt (Remove Open-Zwave integration by Pierre-Gilles · Pull Request #1617 · GladysAssistant/Gladys · GitHub), was uns eine ganze Menge Projekte freischaltet :slight_smile:

Was ich im Kopf habe:

  1. Umstieg auf Node.js 16/18
  2. Umstieg auf die Webcrypto API fĂŒr Gladys Plus statt des Polyfills, den wir bisher verwendet haben
  3. Aktualisierung der ServerabhÀngigkeiten
  4. Aktualisierung der Frontend-AbhÀngigkeiten
  5. Aktualisierung der Github Actions
  6. Aktualisierung von Cypress

Was ich bisher gemacht habe:

1., 2., 3. (teilweise) und 5. in diesem PR:

Bisher wechsle ich zu Node.js 18 auf dem Server und Node.js 16 auf dem Frontend, da preact-cli unter Webpack 4 lÀuft, das derzeit nicht mit Node.js 18 kompatibel ist.

@Pti_Nico Ich habe mich auf deine Arbeit in deinem PR basiert (ci: update Cypress to 10 by NickDub · Pull Request #1630 · GladysAssistant/Gladys · GitHub), könntest du eventuell einen separaten PR fĂŒr Cypress machen? (Warte im Grunde nur darauf, dass ich meinen Node 18 PR merge)

Vorher/Nachher

Ich dachte nicht, dass es so beeindruckend sein wĂŒrde, aber im Grunde ist das die AusfĂŒhrungsgeschwindigkeit der PR-Tests:

Vorher (Beispiel auf dem letzten PR)

Jetzt (Auf meinem PR):

Dass man Software und Technologien auf dem neuesten Stand halten sollte, ist wirklich wichtig und lohnt sich :blush:

Ich gebe zu, der Leistungsgewinn ist schon verrĂŒckt!

Mehrere GrĂŒnde fĂŒr diese Verbesserung, es ist nicht nur der Wechsel zu Node.js 16/18, der der SchlĂŒssel ist:

  • Open-Zwave war eine auf C+±Bindings basierende Bibliothek, die bei jedem npm install + docker build fĂŒr jede Architektur kompiliert werden musste. Das Entfernen dieser Bibliothek hat viel beigetragen.
  • Vor Node.js 16 war die Webcrypto-API in Node.js nicht verfĂŒgbar, daher habe ich einen Polyfill verwendet, der bei jedem npm install + jedem docker build fĂŒr jede Architektur kompiliert werden musste.

In dem Code des Gateways sieht die Änderung so aus:

Dadurch wird node-webcrypto-ossl entfernt, das eine Qual zum Kompilieren war, und wir nutzen die native Node.js-API.

Potenziell verbessert dies die Leistung und StabilitÀt des Gladys Plus-Teils, da wir eine offizielle und robuste native API nutzen.

  • Wir wechseln zu einer neueren Version von sqlite3, die die richtigen Bindings mit der Node-API hat und normalerweise fĂŒr jede Architektur vorkompiliert ist. Auch hier sparen wir uns ein Build pro npm install + Docker-Build pro Architektur.

Im Großen und Ganzen hat sich das Ökosystem stark weiterentwickelt, und die Tatsache, dass wir nicht die neueste Version von Node verwenden, hat uns daran gehindert, viele neue Optimierungen zu nutzen.

Ein weiterer Vorteil all dessen ist, dass wir einen viel einfacheren Entwickler-Onboarding-Prozess haben werden, und dadurch wird ein Hindernis fĂŒr die Entwicklung des Gladys-Dienstes entfernt.

Wir werden die Tutorials aktualisieren können, und es wird viel einfacher sein :slight_smile:

Ich habe ein erstes Docker-Image, das unter Node.js 18 lÀuft:

gladysassistant/gladys:upgrade-node-18

Ich freue mich ĂŒber Feedback :slight_smile:

Edit: Tag dev jetzt:

Ich gebe zu, dass das Kompilieren des zwave-Moduls fĂŒr die Entwicklungsumgebung eine echte Plage war!

Ich kĂŒmmere mich darum, sobald es geht :wink:

Zur Info, ich habe die verschiedenen RĂŒckmeldungen zur PR integriert und die PR in master gemerged, damit sich alle laufenden PRs anpassen und von den Build-Geschwindigkeitsverbesserungen profitieren können! :partying_face:

Ich habe die Entwicklerdokumentation fĂŒr Linux/MacOS aktualisiert, die meiner Meinung nach jetzt viel klarer ist, open-zwave ist Geschichte :slight_smile:

Zur Info, ich bin schließlich auf Node.js 18 fĂŒr Backend und Frontend umgestiegen, also kein Node 16 mehr.

FĂŒr die Windows-Dokumentation, könnte jemand eine ÜberprĂŒfung vornehmen und sicherstellen, dass alles mit Node.js 18 LTS auf WSL funktioniert und die Dokumentation aktualisieren? Danke!

Das Docker-Image mit dem Tag :dev basiert nun auf Node.js 18 LTS:

gladysassistant/gladys:dev

Auf dem Apple M1 Pro ist das wirklich beeindruckend, jetzt laufen die 1785 Backend-Tests in nur 1 Minute :sweat_smile: Ich spare so viel Entwicklungszeit!

Und das ist noch nicht alles, es gibt noch Verbesserungspotenzial. Es gibt 4-5 Tests fĂŒr die MQTT- und Zigbee2mqtt-Dienste, die jeweils 10 Sekunden dauern, also fast die HĂ€lfte der Tests wird auf diesen Integrationen ausgefĂŒhrt.

Ich habe GitHub-Issues fĂŒr diese Tests erstellt:

@pierre-gilles ich habe meinen PR ĂŒberarbeitet :wink:

Erledigt

Toll! FĂŒr mich ist es okay, gemerged :slight_smile:

Effizient :smiley: Es ist gemerged, der neue Windows-Anleitung ist live auf der Website: