Por qué, en la aplicación de escritorio Slack, lo más probable es que haya un controlador para que funcione el controlador de juegos Xbox y lo que es realmente malo de usar Electron para crear aplicaciones de escritorio.

En la siguiente captura de pantalla, según el generador de perfiles, Slack ocupa casi todos los recursos del procesador. Me pregunto qué está haciendo allí.

El proceso se inició en segundo plano cuando esto sucedió. Ni siquiera interactué con Slack, estaba en una reunión. Y noté esto solo por el ruido del sistema de enfriamiento de mi computadora portátil. Reiniciar Slack esta vez resolvió el problema.
Pero esto es normal para Slack. En el fondo, Slack a menudo consume el 5% del procesador. Que esta haciendo el No tengo idea
Apuesto a que el equipo de desarrollo de Slack tampoco lo sabe. ¿Cuántas líneas de código tuvieron que escribir para que su cliente funcionara? Creo que alrededor de 50 mil. Quizás 100 mil. Pero Slack no es una aplicación nativa. O no una aplicación nativa ordinaria. Se ejecuta sobre
Electron , lo que significa que cuando lo descarga, en realidad descarga una copia completa de Google Chrome (
más bien, Chromium - aprox. Per. ). Chrome en el momento de la escritura contiene
15 millones de líneas de código que no son comentarios. El código directamente Slack es menos del 1% del volumen de descarga.
Chrome en sí mismo sigue siendo un cerdo. El es grande y complejo. Utiliza RAM y el procesador como si nadie más los reclamara y reduce en gran medida la duración de la batería.
Puedes pensar en Slack como un pequeño programa JavaScript que se ejecuta dentro de otro sistema operativo Chrome (máquina virtual) que ejecutas para usar esencialmente el análogo de IRC. Incluso si Chrome ya se está ejecutando, cada aplicación en Electron implementa su propia copia adicional.
Y llamar a Chrome un sistema operativo no es una exageración. Por la cantidad de líneas de código, Chrome tiene casi el mismo tamaño que
el kernel de Linux . Al igual que el kernel de Linux, tiene una API para varios hardware, incluidos OpenGL, VR, MIDI. Contiene una copia integrada de SQLite, un sistema de administración de memoria y su propio administrador de tareas. En macOS, incluso tiene un controlador USB para el controlador de juegos Xbox 360 (sé que está allí porque lo escribí. Lo siento).
¿Slack contiene mi código para el controlador Xbox? ¿El equipo de Slack lo sabe? ¿Alguien sabe sobre esto? Slack ocupa 160 MB de espacio en disco. Esto es alrededor de 70 copias sin comprimir de El señor de los anillos. Otras aplicaciones de Electron en mi computadora son Spotify (200 MB) y Atom (260 MB). Primero instalé Linux usando disquetes. Se necesitan 450 disquetes para grabar estas tres aplicaciones simples. Juntos pesan como una distribución de escritorio de Ubuntu. Creo que contiene un cliente IRC, un editor de texto y un reproductor de música. Sistema operativo completo,
entorno de usuario y navegador web.
Dirás que el espacio en disco ahora no tiene valor. Sí, pero no RAM. El nuevo y brillante MacBook Pro está equipado con 8 GB de RAM por defecto. Debido a la duración de la batería, no
puede comprar un modelo con más de 16 GB. Y en este momento, Slack está en algún lugar entre 300 MB y 1 GB en la memoria de mi computadora portátil:

Vamos Esta es una aplicación para compartir texto.
Otra cosa que siempre falta es la energía de la batería. Los procesadores modernos conservan energía al detenerse siempre que sea posible (cuando no hay tareas). La maldición de la administración de energía son los programas que usan constantemente el procesador por un par de por ciento. Hacen que el procesador se despierte constantemente, overclock y vuelva a detenerse. Esta es la manera perfecta de destruir la preciosa energía de la batería. Si alguien tiene tiempo (solo déjelos en funcionamiento), vería cuánto Spotify, Slack y Atom reducen la duración de la batería en las computadoras portátiles modernas. Esto es increible.

Y no, Spotify no reproduce música. Él solo está ... corriendo. Él hace sus misteriosos asuntos de cromo. Y también usa un pequeño porcentaje del procesador. Solo para existir.
(Mientras escribía esta nota, Chrome decidió tomar el 100% de los recursos del procesador en represalia. En el administrador de tareas incorporado, fue un misterioso proceso de "Navegador". Gracias, Chrome).
Para ser sincero, JavaScript fuera del navegador no es un problema. De hecho, creo que las API que proporciona la web moderna son mucho mejores que las API del sistema operativo existente. Debemos usarlos.
Pero necesitamos encontrar la oportunidad de usar estos nuevos paradigmas (React y sus amigos) en plataformas de escritorio sin tener que ejecutar más copias sangrientas de Chrome. Simplemente no estoy tan interesado en su aplicación para justificar el inicio de otra instancia de Chrome. Es fácil para un desarrollador caer en la trampa de sentir que su aplicación o sitio es un regalo para la humanidad y lo más importante que puede hacer. ¿Por qué no aprovechar el exceso de recursos? Necesitamos luchar contra esta forma de pensar. Tal camino conduce a un mundo donde no podemos tener cosas buenas. Tal camino conduce a un mundo donde las baterías de nuestras computadoras portátiles deben crecer para proporcionar energía a los procesadores, de modo que realicen un trabajo aún más inútil. Tal camino conduce al regreso de Shockwave Flash y los teléfonos que se calientan en los bolsillos, que misteriosamente se descargan cuando queremos usarlos. Paranoia en relación con la carga de la batería y el cierre de aplicaciones tan pronto como terminemos de trabajar con ellas. (Te miro, iTunes y Travesuras).
Solo di Electrón NO
Desarrolladores, no dejen que sus amigos escriban aplicaciones en Electron. Si desea usar JS y React, use
React Native . Es como Electron, pero no tiene que distribuir una copia de Chrome a todos los usuarios y ejecutar otra copia de Chrome para usar su aplicación. Resulta que los sistemas operativos modernos ya tienen buenas y rápidas bibliotecas de interfaz de usuario. ¡Úsalos, bobos!
Otro hecho triste es que incluso muchos desarrolladores no tienen idea de lo que está sucediendo en sus computadoras. Usan Slack, pero no saben cuánto es glotón. Es su responsabilidad, como desarrollador, saber todo esto. Practica Explore las herramientas de creación de perfiles. Use
iStatMeters o uno de los análogos gratuitos. No puedes mejorar lo que no estás midiendo.
Tal vez deberíamos comprar computadoras más lentas para sentir el dolor.
Facebook limitó deliberadamente la velocidad de Internet en sus oficinas una vez por semana, para simpatizar con sus usuarios en otros países del tercer mundo (khe-Australia-khe). Tal vez, como desarrolladores, también deberíamos hacer esto con nuestras computadoras, por ejemplo, hacer que el código funcione mucho más lento de lo habitual para armarse con la intuición del rendimiento. Hace un par de años dejé mi computadora portátil en el trabajo durante un largo fin de semana. En lugar de ir tras él, decidí enchufar mi Raspberry Pi (malditamente lenta primera generación) y usarlo para el desarrollo. De repente, las muchas operaciones que se llevaron a cabo instantáneamente en mi computadora portátil i7 regular se volvieron terriblemente lentas. Y pasé el fin de semana para suavizar mi flujo de trabajo. Todos estos ajustes de rendimiento también se transfieren a los dispositivos normales. Reducir el tiempo de lanzamiento de 5 segundos a 2x en la Raspberry Pi sintió un salto increíble. Esta solución también se convirtió en un salto de 0.5 segundos a 0.2, o algo así. Esto todavía es muy notable para el usuario. Un tiempo de inicio de 0.5 segundos es lo suficientemente corto como para pasar por alto este hecho durante el desarrollo, pero una caída a 0.2 obviamente se siente mucho más rápido.
Usuarios : se quejan de programas lentos. En el patio 2016 (
... - aprox. Por. ). Llevamos supercomputadoras en nuestros bolsillos. Es inaceptable que los programas sean lentos.
Desarrolladores : el rendimiento es importante. La memoria importa. No me importa que seas la chica más atractiva en la pista de baile, Slack. Te cierro en cuanto salgo de la oficina. Te borro de la computadora tan pronto como tengo la oportunidad. La lentitud es un error. El programa más rápido es uno que no ejecutas. Así que deja de incrustar todo el Chrome en tu aplicación.
Y todos ustedes desarrolladores web: aprendan C o Rust o algo así. Sus programas se
ejecutan en una computadora . Hasta que sepa cómo funciona la computadora, está condenado. ¡Y sal de mi césped hasta que lo descubras!
* puño tembloroso *Y sí, lea sobre la
crisis de los sitios de obesidad (
traducción en Habr ). Esto es muy gracioso Y muy triste Y muy vital.
Editar: Spotify en realidad usa Chromium Embedded Framework en lugar de lanzarse a través de Electron. Pero aún incrusta Chrome. No sabía sobre esto cuando escribí el artículo, pero no quito mis palabras sobre el rendimiento final.