Antecedentes
Somos un pequeño equipo de desarrollo, estamos creando una nueva herramienta para trabajar con API
Testmace . De hecho, este es un cliente de descanso avanzado con la capacidad de crear pruebas API automatizadas utilizando una interfaz gráfica, equipado con cosas tan buenas como un mecanismo variable avanzado, autocompletado en todos los campos de entrada y resaltado de sintaxis total.
Quiero contarles cómo llegamos a Electron como tecnología para escribir nuestra aplicación.
Por que escritorio
En los últimos 10-15 años, la web ha experimentado un crecimiento explosivo y continúa creciendo rápidamente. Constantemente hay más y más herramientas nuevas para crear aplicaciones web cada vez más funcionales y complejas. Incluso se crean lenguajes de programación completos, mejorados para escribir aplicaciones web y casi sin soluciones listas fuera de esta área. Y en nuestra vida cotidiana, ya hemos reemplazado parcialmente Microsoft Office y Thunderbird con Google Docs y la interfaz de Gmail.
Sin embargo, la web aún no puede suplantar completamente las aplicaciones de escritorio, y por las siguientes razones:
- Falta de capacidad de respuesta de las aplicaciones web. En algún lugar, la razón es la sincronización cliente-servidor e Internet lento, en algún lugar la naturaleza de un solo subproceso de JavaScript, y en algún lugar solo la gula del navegador en su máquina no muy poderosa. Vale la pena señalar que la solución a los problemas anteriores es solo cuestión de tiempo. En particular, los trabajadores web ya son compatibles con todos los navegadores modernos, lo que resuelve parcialmente el problema del subprocesamiento múltiple , y características como SharedArrayBuffer pueden reducir la sobrecarga de copiar memoria entre el hilo principal y los trabajadores.
- Acceso a los recursos del sistema local. Hay clases enteras de aplicaciones (administradores de archivos, modificadores, daemons y servicios) que no se pueden implementar como aplicaciones web (al menos en esta etapa de desarrollo).
- Limitaciones de las capacidades del navegador en sí. Por ejemplo, la interacción de red se limita solo mediante el envío de una solicitud http y la conexión a través de sockets web. Las cosas de nivel inferior (tcp, enchufes upd), por desgracia, no están disponibles.
- Limitaciones artificiales de los navegadores por razones de seguridad. CORS, trabajo con cookies, restricciones en encabezados enviados.
- Un conjunto limitado de idiomas y enfoques. A diferencia de las aplicaciones web, donde javascript sigue siendo el único lenguaje para escribir aplicaciones, las aplicaciones de escritorio le permiten usar cualquier lenguaje de programación hasta ensambladores, usar efectivamente los recursos del sistema usando programación multiproceso e instrucciones de bajo nivel. Vale la pena señalar que la situación está mejorando en este tema: los transpiladores de algunos idiomas aparecen en javascript. Además, la compilación en el ensamblaje web le permite transferir el tiempo de funcionamiento de otros lenguajes (C ++, C #, óxido, etc.), obteniendo a menudo un buen aumento del rendimiento.
Teniendo en cuenta las razones enumeradas anteriormente, podemos concluir que TestMace debería ser una aplicación de escritorio típica:
- Necesitamos acceso al sistema de archivos para trabajar con el proyecto.
- Las limitaciones de fetch no permiten un control total sobre la configuración y ejecución de la solicitud.
- En el futuro, es posible que necesitemos optimizaciones de bajo nivel para mejorar el rendimiento de la aplicación.
Selección de tecnología
Decidimos que nuestra aplicación será de escritorio, sin embargo, aún no hemos decidido el idioma y las tecnologías en las que implementaremos esto. En cuanto a los lenguajes de programación, tenemos los siguientes requisitos para ellos:
- Debe ser un lenguaje tipeado estático.
- El lenguaje debe tener una infraestructura grande y madura: debe haber bibliotecas comprobadas y soporte del IDE y otras herramientas.
- El lenguaje debe ser familiar para la mayoría de los miembros del equipo.
El último punto también es importante. Nosotros, como startup, estamos interesados en el lanzamiento más rápido (dentro de seis meses) del producto en el mercado, aprovechando al máximo los recursos internos del equipo. Aprender un nuevo idioma e infraestructura reduce la previsibilidad de la planificación y está lleno de errores en la adopción de ciertas decisiones.
Sea como fuere, la lista de requisitos no parece demasiado rígida, y los lenguajes como C #, TypeScript, Go lo satisfacen. Llevaremos a cabo una mayor selección de tecnologías teniendo en cuenta la disponibilidad de implementaciones de los componentes necesarios para estos idiomas.
Las cosas son mucho más interesantes con la elección de soluciones para desarrollar una interfaz de usuario. Los requisitos para ellos son los siguientes:
- Multiplataforma (Windows, Linux, MacOS)
- Un amplio conjunto de componentes integrados y de terceros.
- Personalización de componentes
- Lenguaje de marcado para la descripción de la interfaz
- Buen apoyo
Considere qué soluciones son adecuadas para estos requisitos.
Qt (Qml)
Qt es un poderoso kit de herramientas para escribir aplicaciones multiplataforma. En las últimas versiones de este marco, el componente Qt Quick ha aparecido para escribir aplicaciones utilizando el lenguaje de descripción de marcado QML declarativo. Qt en general, y QML en particular, son soluciones probadas en batalla que han encontrado su aplicación en casi todas las áreas, desde los sistemas operativos integrados hasta los shells de software.
El lenguaje de programación principal en Qt es C ++ (puede usar javascript en QML). Sin embargo, para Qt y QML hay carpetas para otros lenguajes de programación (por ejemplo, para
C # ). Sin embargo, solo se admite
oficialmente la integración de Python. Todo lo demás son implementaciones de terceros. De acuerdo, no quisiera confiar en la parte más básica de la aplicación para la biblioteca, que es desarrollada como un hobby por un pequeño grupo de entusiastas.
También hay un proyecto
Brig . Estos son los ligantes NodeJS para QML. Una característica distintiva de este proyecto es
una demostración impresionante . Sin embargo, como sucede a menudo en proyectos de código abierto, los autores no prestan la debida atención al proyecto y, por lo tanto, también está perdiendo el rumbo.
GTK
Una biblioteca para construir una interfaz de usuario, que comenzó como parte de un proyecto GIMP y posteriormente se separó en un proyecto separado. Existe una herramienta
Glade para el desarrollo rápido de la interfaz de usuario. El lenguaje principal para desarrollar GTK es C, pero existen carpetas para muchos
lenguajes de programación populares . Además, utilizando los
enlazadores de C # , se creó MonoDevelop, uno de los IDE más potentes para desarrollar bajo C #. Sin embargo, después de un examen más detallado, entendemos que el proyecto GTK # está en un estado medio abandonado: el último compromiso fue en febrero de 2018, el siguiente en enero de 2017 y luego en 2016. Por compromiso por año. No es pesado teniendo en cuenta que el
repositorio principal de GTK se está desarrollando activamente. Y la felicidad estaba tan cerca ...
Electrón
Recientemente, se ha asociado mucho ruido con este marco. Alguien lo elogia por la oportunidad de transferir los logros de las aplicaciones web al escritorio, alguien odia la glotonería excesiva. Ambos se pueden entender. Electron under the hood usa node.js y la biblioteca de renderizado de Chromium. De hecho, se crea una aplicación web normal y se envuelve en un archivo ejecutable. Además, cada aplicación viene con su propia versión de Node.js y Chrome.
De hecho, solo hay un inconveniente, pero bastante serio: este es un gran consumo de memoria (en comparación con otras tecnologías): un proyecto vacío ocupa entre 100 y 200 megabytes de memoria. Para algunos, esta es la razón para negarse a usar tales aplicaciones (hola, Skype). Sin embargo, analicemos la situación en el mercado. Actualmente,
muchas aplicaciones populares están escritas en Electron (Slack, Skype, Discord, VSCode, Atom, Postman, Insomnia, etc.). Muchos de ellos son estándares en su campo o están ganando rápidamente los corazones de los usuarios (como el mismo VSCode e Insomnia). Las personas simplemente usan herramientas que resuelven bien sus tareas diarias, a pesar de algunos efectos secundarios. Por otro lado, las computadoras se están volviendo más poderosas (al menos el crecimiento de RAM
no se ha
detenido ), y cada vez escuchas menos comentarios de clientes insatisfechos de que "tu Chrome se ha comido toda mi memoria". En resumen, creemos que un mayor consumo de RAM no jugará un papel importante si el producto es realmente bueno en su campo.
Las ventajas de esta tecnología son obvias:
- La capacidad de utilizar las mejores prácticas de la web.
- Es más fácil encontrar especialistas en este campo.
- El “diseñador” de flujo de trabajo gastado - “diseñador de diseño” - “programador”, repleto de herramientas convenientes en cada etapa.
Además, incluimos el hecho de que el equipo tiene una amplia experiencia en la creación de aplicaciones front-end.
Como resultado, nos decidimos por Electron como la herramienta principal para desarrollar nuestro proyecto. Automáticamente, elegimos TypeScript como el lenguaje para desarrollar la aplicación.
Conclusión
Una de las tareas principales de una startup es el lanzamiento rápido de un producto en el mercado. Genial si puedes hacerlo con un costo mínimo. El propósito de este análisis fue encontrar una herramienta que nos permitiera resolver estos problemas. En nuestra opinión, Electron nos queda perfectamente. Tres meses después del inicio del desarrollo, todavía está fuera de competencia, y parece que todo es serio con nosotros.