Warum in der Slack-Desktop-Anwendung höchstwahrscheinlich ein Treiber für den Xbox-Gamecontroller vorhanden ist und was bei der Verwendung von Electron zum Erstellen von Desktop-Anwendungen wirklich schlecht ist.

Im folgenden Screenshot belegt Slack laut Profiler fast alle Prozessorressourcen. Ich frage mich, was er dort macht.

Der Prozess wurde im Hintergrund gestartet, als dies geschah. Ich habe nicht einmal mit Slack interagiert - ich war in einer Besprechung. Und das ist mir nur am Geräusch des Kühlsystems meines Laptops aufgefallen. Diesmal wurde Slack neu gestartet, um das Problem zu beheben.
Aber das ist normal für Slack. Im Hintergrund verbraucht Slack häufig 5% des Prozessors. Was macht er? Ich habe keine ahnung
Ich wette, das Slack-Entwicklungsteam weiß es auch nicht. Wie viele Codezeilen mussten sie schreiben, damit ihr Client funktioniert? Ich denke ungefähr 50.000. Vielleicht 100.000. Aber Slack ist keine native Anwendung. Oder keine gewöhnliche native Anwendung. Es läuft auf
Electron , was bedeutet, dass Sie beim Herunterladen tatsächlich eine vollständige Kopie von Google Chrome herunterladen (
eher Chromium - ca. Per. ). Chrome enthält zum Zeitpunkt des Schreibens
15 Millionen Codezeilen , die keine Kommentare sind. Code direkt Slack macht weniger als 1% des Download-Volumens aus.
Chrome selbst ist immer noch ein Schwein. Er ist groß und komplex. Es verwendet RAM und den Prozessor, als ob niemand anderes sie beansprucht, und verkürzt die Akkulaufzeit erheblich.
Sie können sich Slack als ein kleines JavaScript-Programm vorstellen, das in einem anderen Chrome-Betriebssystem (virtuelle Maschine) ausgeführt wird, das Sie ausführen, um im Wesentlichen das Analogon von IRC zu verwenden. Selbst wenn Chrome selbst bereits ausgeführt wird, stellt jede Anwendung auf Electron eine eigene zusätzliche Kopie bereit.
Und Chrome als Betriebssystem zu bezeichnen, ist keine Übertreibung. In Bezug auf die Anzahl der Codezeilen hat Chrome fast die gleiche Größe wie
der Linux-Kernel . Wie der Linux-Kernel verfügt er über eine API für verschiedene Hardware, einschließlich OpenGL, VR, MIDI. Es enthält eine integrierte Kopie von SQLite, ein Speicherverwaltungssystem und einen eigenen Task-Manager. Unter macOS gibt es sogar einen USB-Treiber für den Xbox 360-Gamecontroller. (Ich weiß, dass er vorhanden ist, weil ich ihn geschrieben habe. Entschuldigung.)
Enthält Slack meinen Code für den Xbox-Controller? Weiß das Slack-Team davon? Weiß jemand davon? Slack belegt 160 MB Speicherplatz. Dies sind ungefähr 70 unkomprimierte Exemplare von Der Herr der Ringe. Andere Electron-Anwendungen auf meinem Computer sind Spotify (200 MB) und Atom (260 MB). Ich habe Linux zuerst mit Disketten installiert. Zum Brennen dieser drei einfachen Anwendungen sind 450 Disketten erforderlich. Zusammen wiegen sie wie eine Ubuntu-Desktop-Distribution. Was meiner Meinung nach einen IRC-Client, einen Texteditor und einen Musikplayer enthält. Vollständiges Betriebssystem,
Benutzerumgebung und Webbrowser.
Sie werden sagen, dass Speicherplatz jetzt wertlos ist. Ja, aber kein RAM. Das brandneue, glänzende MacBook Pro ist standardmäßig mit 8 GB RAM ausgestattet. Aufgrund der Akkulaufzeit können Sie
kein Modell mit mehr als 16 GB kaufen. Und im Moment ist Slack irgendwo zwischen 300 MB und 1 GB im Speicher meines Laptops:

Komm schon. Dies ist eine Textfreigabeanwendung.
Eine andere Sache, die immer fehlt, ist die Batterieleistung. Moderne Prozessoren sparen Strom, indem sie nach Möglichkeit anhalten (wenn keine Aufgaben vorhanden sind). Der Fluch der Energieverwaltung sind Programme, die den Prozessor ständig für ein paar Prozent nutzen. Sie lassen den Prozessor ständig aufwachen, übertakten und wieder anhalten. Dies ist der perfekte Weg, um wertvolle Batterieleistung zu zerstören. Wenn jemand Zeit hat (lassen Sie ihn einfach laufen) - ich würde sehen, wie viel Spotify, Slack und Atom die Akkulaufzeit auf modernen Laptops verkürzen. Das ist unglaublich.

Und nein, Spotify spielt keine Musik ab. Er rennt nur. Er erledigt seine mysteriösen Chromangelegenheiten. Außerdem nutzt er einige Prozent des Prozessors. Nur um zu existieren.
(Beim Schreiben dieser Notiz hat Chrome beschlossen, 100% der Ressourcen des Prozessors als Vergeltungsmaßnahme zu verwenden. Im integrierten Task-Manager war dies ein mysteriöser „Browser“ -Prozess. Vielen Dank, Chrome.)
Um ehrlich zu sein, ist JavaScript außerhalb des Browsers kein Problem. Tatsächlich denke ich, dass die APIs, die das moderne Web bereitstellt, viel besser sind als die vorhandenen Betriebssystem-APIs. Wir müssen sie benutzen.
Wir müssen jedoch die Möglichkeit finden, diese neuen Paradigmen (React und seine Freunde) auf Desktop-Plattformen zu verwenden, ohne mehr blutige Kopien von Chrome ausführen zu müssen. Ich bin einfach nicht so an Ihrer Anwendung interessiert, um das Starten einer anderen Chrome-Instanz zu rechtfertigen. Für Entwickler ist es leicht, in die Falle zu tappen, dass Ihre Anwendung oder Website ein Geschenk an die Menschheit ist und das Wichtigste, was sie tun können. Warum nicht überschüssige Ressourcen nutzen? Wir müssen diese Denkweise bekämpfen. Ein solcher Weg führt zu einer Welt, in der wir keine guten Dinge haben können. Ein solcher Weg führt zu einer Welt, in der die Batterien unserer Laptops wachsen müssen, um die Prozessoren mit Strom zu versorgen, damit sie noch mehr nutzlose Arbeit leisten können. Ein solcher Weg führt zur Rückkehr von Shockwave Flash und Telefonen, die sich in den Taschen erwärmen und auf mysteriöse Weise entladen werden, wenn wir sie verwenden möchten. Zu Paranoia in Bezug auf die Batterieladung und das Schließen von Anwendungen, sobald wir mit ihnen fertig sind. (Ich sehe dich an, iTunes und Mischief.)
Sagen Sie einfach Electron NO
Entwickler, lassen Sie Ihre Freunde keine Anwendungen auf Electron schreiben. Wenn Sie JS und React verwenden möchten, verwenden Sie
React Native . Es ist wie bei Electron, aber Sie müssen keine Kopie von Chrome an alle Benutzer verteilen und eine weitere Kopie von Chrome ausführen, um Ihre Anwendung zu verwenden. Es stellt sich heraus, dass moderne Betriebssysteme bereits über gute und schnelle UI-Bibliotheken verfügen. Benutze sie, Dummköpfe!
Eine weitere traurige Tatsache ist, dass selbst viele Entwickler keine Ahnung haben, was auf ihren Computern passiert. Sie benutzen Slack, wissen aber nicht, wie viel es gefräßig ist. Es liegt in Ihrer Verantwortung als Entwickler, dies alles zu wissen. Übe. Entdecken Sie Profiling-Tools. Verwenden Sie
iStatMeters oder eines der kostenlosen Analoga. Sie können nicht verbessern, was Sie nicht messen.
Vielleicht sollten wir langsamere Computer kaufen, um den Schmerz zu spüren.
Facebook hat die Geschwindigkeit des Internets in seinen Büros einmal pro Woche
bewusst begrenzt , um mit seinen Nutzern in anderen Ländern der Dritten Welt (khe-Australia-khe) zu sympathisieren. Vielleicht sollten wir als Entwickler dies auch mit unseren Computern tun, um beispielsweise den Code viel langsamer als gewöhnlich arbeiten zu lassen, um uns mit der Leistungsintuition zu bewaffnen. Vor ein paar Jahren habe ich meinen Laptop für ein langes Wochenende bei der Arbeit gelassen. Anstatt ihm nachzulaufen, habe ich beschlossen, meinen Raspberry Pi (verdammt langsame 1. Generation) anzuschließen und für die Entwicklung zu verwenden. Plötzlich wurden die vielen Operationen, die sofort auf meinem normalen i7-Laptop ausgeführt wurden, furchtbar langsam. Und ich habe das Wochenende damit verbracht, meinen Workflow reibungsloser zu gestalten. All diese Leistungsverbesserungen werden auch auf normale Geräte übertragen. Die Verkürzung der Startzeit von 5 Sekunden auf 2x auf dem Raspberry Pi war ein unglaublicher Sprung. Dieser Fix wurde auch ein Sprung von 0,5 Sekunden auf 0,2 oder so ähnlich. Dies ist für den Benutzer immer noch sehr auffällig. Eine Startzeit von 0,5 Sekunden ist kurz genug, um diese Tatsache während der Entwicklung zu übersehen, aber ein Abfall auf 0,2 fühlt sich offensichtlich viel schneller an.
Benutzer : Bitte beschweren Sie sich über langsame Programme. Auf dem Hof 2016 (
... - ca. Per. ). Wir haben Supercomputer in der Tasche. Es ist nicht akzeptabel, dass Programme langsam sind.
Entwickler : Leistung ist wichtig. Gedächtnis ist wichtig. Es ist mir egal, dass du das attraktivste Mädchen auf der Tanzfläche bist, Slack. Ich schließe dich, sobald ich das Büro verlasse. Ich lösche Sie vom Computer, sobald ich die Gelegenheit dazu habe. Langsamkeit ist ein Fehler. Das schnellste Programm ist eines, das Sie nicht ausführen. Hören Sie also auf, das gesamte Chrome in Ihre Anwendung einzubetten.
Und alle von euch Webentwicklern: Lerne C oder Rust oder so ähnlich. Ihre Programme
laufen auf einem Computer . Bis Sie wissen, wie der Computer funktioniert, sind Sie zum Scheitern verurteilt. Und raus aus meinem Rasen, bis du es herausfindest!
* Faust schütteln *Und ja, lesen Sie über die
Krise der Adipositas-Websites (
Übersetzung auf Habr ). Das ist sehr lustig. Und sehr traurig. Und sehr wichtig.
Bearbeiten: Spotify verwendet tatsächlich das Chromium Embedded Framework, anstatt über Electron zu starten. Aber er bettet immer noch Chrome ein. Ich wusste nichts davon, als ich den Artikel schrieb, aber ich nehme meine Worte über die ultimative Leistung nicht weg.