Latar belakang
Kami adalah tim pengembangan kecil, kami menciptakan alat baru untuk bekerja dengan API
Testmace . Sebenarnya, ini adalah klien sisanya yang canggih dengan kemampuan untuk membuat tes API otomatis menggunakan antarmuka grafis, dilengkapi dengan hal-hal baik seperti mekanisme variabel lanjutan, lengkapi otomatis di semua bidang input dan penyorotan sintaksis total.
Saya ingin memberi tahu Anda tentang bagaimana kami datang ke Elektron sebagai teknologi untuk menulis aplikasi kami.
Mengapa desktop
Dalam 10-15 tahun terakhir, web telah mengalami pertumbuhan eksplosif dan terus tumbuh dengan cepat. Secara konstan semakin banyak alat baru untuk membuat aplikasi web yang semakin fungsional dan kompleks. Bahkan seluruh bahasa pemrograman dibuat, dipertajam untuk menulis aplikasi web dan hampir tanpa solusi siap pakai di luar area ini. Dan dalam kehidupan kita sehari-hari, kita telah mengganti sebagian kantor microsoft dan thunderbird dengan google docs dan antarmuka gmail.
Namun, web belum dapat sepenuhnya menggantikan aplikasi desktop, dan untuk alasan berikut:
- Kurangnya responsif aplikasi web. Di suatu tempat disalahkan untuk sinkronisasi client-server dan Internet lambat, suatu tempat javascript single-threaded, dan suatu tempat hanya kerakusan browser pada mesin Anda tidak terlalu kuat. Perlu dicatat bahwa solusi untuk masalah di atas hanya masalah waktu saja. Secara khusus, pekerja web sudah didukung oleh semua browser modern, yang sebagian memecahkan masalah kurangnya multithreading, dan fitur seperti SharedArrayBuffer dapat mengurangi overhead menyalin memori antara utas utama dan para pekerja.
- Akses ke sumber daya sistem lokal. Ada seluruh kelas aplikasi (manajer file, tweaker, daemon, dan layanan) yang tidak dapat diimplementasikan sebagai aplikasi web (setidaknya pada tahap pengembangan ini).
- Keterbatasan kemampuan browser itu sendiri. Misalnya, interaksi jaringan hanya dibatasi dengan mengirim permintaan http dan menghubungkan melalui soket web. Hal-hal tingkat rendah (tcp, soket pembaruan), sayangnya, tidak tersedia.
- Batasan buatan peramban untuk alasan keamanan. CORS, bekerja dengan cookie, pembatasan pada header yang dikirim.
- Serangkaian bahasa dan pendekatan terbatas. Tidak seperti aplikasi web, di mana javascript tetap menjadi satu-satunya bahasa untuk menulis aplikasi, aplikasi desktop memungkinkan Anda untuk menggunakan bahasa pemrograman apa pun hingga assembler, menggunakan sumber daya sistem secara efisien menggunakan pemrograman multi-threaded dan instruksi level rendah. Perlu dicatat bahwa situasinya membaik pada masalah ini - transponder dari beberapa bahasa muncul dalam javascript. Selain itu, kompilasi di webassembly memungkinkan Anda untuk mentransfer waktu operasi dari bahasa lain (C ++, C #, rust, dll.), Seringkali mendapatkan peningkatan kinerja yang baik.
Mempertimbangkan alasan yang tercantum di atas, kita dapat menyimpulkan bahwa TestMace harus menjadi aplikasi desktop yang khas:
- Kami membutuhkan akses ke sistem file untuk bekerja dengan proyek.
- Batasan pengambilan tidak memungkinkan kontrol penuh atas konfigurasi dan pelaksanaan permintaan.
- Di masa depan, kita mungkin perlu optimasi tingkat rendah untuk meningkatkan kinerja aplikasi.
Pemilihan teknologi
Kami memutuskan bahwa aplikasi kami adalah desktop, namun, kami belum memutuskan bahasa dan teknologi yang akan kami terapkan. Adapun bahasa pemrograman, kami memiliki persyaratan berikut untuk mereka:
- Itu harus bahasa yang diketik statis.
- Bahasa tersebut harus memiliki infrastruktur yang besar dan matang - harus ada perpustakaan yang terbukti dan dukungan dari IDE dan alat lainnya.
- Bahasa harus akrab bagi sebagian besar anggota tim.
Poin terakhir juga penting. Kami, sebagai startup, tertarik dengan peluncuran produk tercepat di pasar (dalam waktu enam bulan), memanfaatkan sumber daya internal tim secara maksimal. Mempelajari bahasa dan infrastruktur baru mengurangi prediksi perencanaan dan penuh dengan kesalahan dalam adopsi keputusan tertentu.
Namun, daftar persyaratan tampaknya tidak terlalu kaku, dan bahasa seperti C #, TypeScript, Go, puaskan saja. Kami akan melakukan pemilihan teknologi lebih lanjut dengan mempertimbangkan ketersediaan implementasi komponen yang diperlukan untuk bahasa-bahasa ini.
Banyak hal yang jauh lebih menarik dengan pilihan solusi untuk mengembangkan antarmuka pengguna. Persyaratan untuk mereka adalah sebagai berikut:
- Cross-platform (Windows, Linux, MacOS)
- Seperangkat komponen internal dan pihak ketiga yang kaya
- Kustomisasi komponen
- Bahasa markup untuk deskripsi antarmuka
- Dukungan yang bagus
Pertimbangkan solusi mana yang cocok untuk persyaratan ini.
Qt (Qml)
Qt adalah toolkit yang ampuh untuk menulis aplikasi lintas platform. Dalam versi terbaru dari kerangka kerja ini, komponen Qt Quick telah muncul untuk menulis aplikasi menggunakan bahasa deskripsi markup QML deklaratif. Qt secara umum, dan QML pada khususnya, adalah solusi yang terbukti pertempuran yang telah menemukan aplikasi mereka di hampir semua bidang - mulai dari yang tertanam pada cangkang perangkat lunak sistem operasi.
Bahasa pemrograman utama dalam Qt adalah C ++ (Anda dapat menggunakan javascript di QML). Namun, untuk Qt dan QML ada pengikat untuk bahasa pemrograman lain (misalnya, untuk
C # ). Namun, hanya integrasi python yang didukung
secara resmi . Yang lainnya adalah implementasi pihak ketiga. Setuju, saya tidak ingin mempercayai bagian paling dasar dari aplikasi ke perpustakaan, yang dikembangkan sebagai hobi oleh sekelompok kecil penggemar.
Ada juga proyek
Brig . Ini adalah pengikat NodeJS untuk QML. Fitur khas dari proyek ini adalah
demo yang mengesankan . Namun, seperti yang sering terjadi dalam proyek open source, penulis tidak memperhatikan proyek dan karena itu juga kehilangan jejaknya.
GTK
Perpustakaan untuk membangun antarmuka pengguna, yang dimulai sebagai bagian dari proyek GIMP dan kemudian dipisahkan menjadi proyek terpisah. Ada alat
Glade untuk pengembangan antarmuka pengguna yang cepat. Bahasa utama untuk mengembangkan GTK adalah C, tetapi ada pengikat untuk banyak
bahasa pemrograman populer . Selain itu, menggunakan
pengikat C # , MonoDevelop telah dibuat - salah satu IDE paling kuat untuk dikembangkan di bawah C #. Namun, setelah studi yang lebih hati-hati, kami memahami bahwa proyek GTK # dalam keadaan setengah ditinggalkan - komitmen terakhir adalah pada Februari 2018, berikutnya pada Januari 2017 lalu 2016. Dengan komitmen per tahun. Tidak tebal mengingat
repositori gtk utama sedang aktif dikembangkan. Dan kebahagiaan sangat dekat ...
Elektron
Baru-baru ini, banyak kebisingan dikaitkan dengan kerangka kerja ini. Seseorang memujinya atas kesempatan untuk mentransfer pencapaian aplikasi web ke desktop, seseorang membenci kerakusan yang berlebihan. Keduanya bisa dipahami. Elektron di bawah tenda menggunakan node.js dan pustaka rendering Chromium. Bahkan, aplikasi web biasa dibuat dan dibungkus dengan file yang dapat dieksekusi. Selain itu, setiap aplikasi dilengkapi dengan versi Node.js dan Chrome.
Faktanya, hanya ada satu kekurangan, tetapi cukup serius - ini adalah konsumsi memori yang besar (dibandingkan dengan teknologi lain): proyek kosong membutuhkan memori 100-200 megabita. Bagi sebagian orang, ini adalah alasan untuk menolak menggunakan aplikasi semacam itu (halo, Skype). Namun, mari kita menganalisis situasi di pasar. Saat ini,
banyak aplikasi populer ditulis dalam Electron (Slack, Skype, Discord, VSCode, Atom, Postman, Insomnia, dll.). Banyak dari mereka adalah standar di bidangnya atau dengan cepat memenangkan hati pengguna (seperti VSCode dan Insomnia yang sama). Orang hanya menggunakan alat yang menyelesaikan tugas sehari-hari dengan baik, meskipun ada beberapa efek samping. Di sisi lain, komputer menjadi lebih kuat (setidaknya pertumbuhan RAM
belum berhenti ), dan Anda semakin jarang mendengar umpan balik dari pelanggan yang tidak puas bahwa "krom Anda telah menghabiskan seluruh memori saya." Kesimpulannya, kami percaya bahwa peningkatan konsumsi RAM tidak akan memainkan peran besar jika produk tersebut benar-benar bagus di bidangnya.
Keuntungan dari teknologi ini jelas:
- Kemampuan untuk menggunakan praktik terbaik dari web.
- Lebih mudah untuk menemukan spesialis di bidang ini.
- Alur kerja yang dihabiskan "desainer" - "desainer tata letak" - "programmer", penuh dengan alat yang mudah digunakan di setiap tahap.
Juga plus kami sertakan fakta bahwa tim memiliki pengalaman luas dalam membuat aplikasi front-end.
Sebagai hasilnya, kami memilih Electron sebagai alat utama untuk mengembangkan proyek kami. Secara otomatis, kami memilih TypeScript sebagai bahasa untuk mengembangkan aplikasi.
Kesimpulan
Salah satu tugas utama startup adalah peluncuran cepat produk di pasar. Keren kalau bisa melakukannya dengan biaya minimal. Tujuan dari analisis ini adalah untuk menemukan alat yang memungkinkan kami untuk menyelesaikan masalah ini. Menurut pendapat kami, Elektron cocok untuk kita. Tiga bulan setelah dimulainya pengembangan, itu masih di luar kompetisi, dan tampaknya semuanya serius dengan kita.