Mengapa di aplikasi desktop Slack, kemungkinan besar, ada driver untuk pengontrol game Xbox untuk bekerja dan apa yang benar-benar buruk dalam menggunakan Electron untuk membangun aplikasi desktop.

Pada tangkapan layar di bawah, menurut profiler, Slack mengambil hampir semua sumber daya prosesor. Aku ingin tahu apa yang dia lakukan di sana?

Proses diluncurkan di latar belakang ketika ini terjadi. Saya bahkan tidak berinteraksi dengan Slack - saya sedang rapat. Dan saya perhatikan ini hanya karena kebisingan dari sistem pendingin laptop saya. Restart Slack kali ini menyelesaikan masalah.
Tapi ini normal untuk Slack. Di latar belakang, Slack sering mengkonsumsi 5% dari prosesor. Apa yang dia lakukan Saya tidak tahu.
Saya yakin tim pengembangan Slack juga tidak tahu. Berapa banyak baris kode yang harus mereka tulis untuk membuat klien mereka bekerja? Saya pikir sekitar 50 ribu. Mungkin 100 ribu. Tapi Slack bukan aplikasi asli. Atau bukan aplikasi asli biasa. Itu berjalan di atas
Electron , yang berarti bahwa ketika Anda mengunduhnya, Anda benar-benar mengunduh salinan lengkap Google Chrome (
lebih tepatnya, Chromium - kira-kira Trans. ). Chrome pada saat penulisan mengandung
15 juta baris kode yang bukan komentar. Kode secara langsung Slack kurang dari 1% dari volume unduhan.
Chrome sendiri masih babi. Dia besar dan kompleks. Ini menggunakan RAM dan prosesor seolah-olah tidak ada orang lain yang mengklaimnya dan sangat mengurangi masa pakai baterai.
Anda dapat menganggap Slack sebagai program JavaScript kecil yang berjalan di dalam sistem operasi Chrome lain (mesin virtual) yang Anda jalankan pada dasarnya menggunakan analog IRC. Bahkan jika Chrome sendiri sudah berjalan, maka setiap aplikasi pada Electron menyebarkan salinan tambahannya sendiri.
Dan menyebut Chrome sebagai sistem operasi tidaklah berlebihan. Dengan jumlah baris kode, Chrome hampir seukuran
dengan kernel Linux . Seperti kernel Linux, ia memiliki API untuk berbagai perangkat keras, termasuk OpenGL, VR, MIDI. Ini berisi salinan SQLite, sistem manajemen memori, dan pengelola tugasnya sendiri. Di macOS, ia bahkan memiliki driver USB untuk game controller Xbox 360. (Saya tahu itu ada karena saya menulisnya. Maaf.)
Apakah Slack berisi kode saya untuk pengontrol Xbox? Apakah tim Slack tahu tentang ini? Adakah yang tahu tentang ini? Slack membutuhkan ruang disk 160 MB. Ini adalah sekitar 70 salinan The Lord of the Rings yang tidak dikompresi. Aplikasi Elektron lainnya di komputer saya adalah Spotify (200 MB) dan Atom (260 MB). Saya pertama kali menginstal Linux menggunakan floppy disk. Dibutuhkan 450 disket untuk membakar ketiga aplikasi sederhana ini. Bersama-sama beratnya seperti distribusi desktop Ubuntu. Yang, saya pikir, berisi klien IRC, editor teks dan pemutar musik. Sistem operasi penuh,
lingkungan pengguna dan browser web.
Anda akan mengatakan bahwa ruang disk sekarang tidak berharga. Ya, tapi bukan RAM. MacBook Pro mengkilap yang baru dilengkapi dengan 8 GB RAM secara default. Karena masa pakai baterai, Anda
tidak dapat membeli model dengan lebih dari 16 GB. Dan saat ini, Slack berada di antara 300 MB dan 1 GB di memori laptop saya:

Ayo Ini adalah aplikasi berbagi teks.
Hal lain yang selalu kurang adalah daya baterai. Prosesor modern menghemat daya dengan menghentikan kapan pun dimungkinkan (ketika tidak ada tugas). Kutukan manajemen daya adalah program yang terus-menerus menggunakan prosesor untuk beberapa persen. Mereka membuat prosesor terus bangun, overclock, dan berhenti lagi. Ini adalah cara sempurna untuk menghancurkan daya baterai yang berharga. Jika seseorang punya waktu (biarkan mereka tetap berjalan) - Saya akan melihat berapa banyak Spotify, Slack dan Atom mengurangi masa pakai baterai pada laptop modern. Ini tidak bisa dipercaya.

Dan tidak, Spotify tidak memutar musik. Dia hanya ... berlari. Dia melakukan urusan krom misteriusnya. Dan dia juga menggunakan beberapa persen dari prosesor. Hanya ada.
(Saat menulis catatan ini, Chrome memutuskan untuk mengambil 100% dari sumber daya prosesor sebagai pembalasan. Di pengelola tugas bawaan, itu adalah proses "Browser" yang misterius. Terima kasih, Chrome.)
Sejujurnya, JavaScript di luar browser tidak menjadi masalah. Bahkan, saya berpikir bahwa API yang disediakan web modern jauh lebih baik daripada API sistem operasi yang ada. Kita harus menggunakannya.
Tetapi kita perlu menemukan kesempatan untuk menggunakan paradigma baru ini (Bereaksi dan teman-temannya) pada platform desktop tanpa harus menjalankan salinan Chrome yang lebih berdarah. Saya hanya tidak begitu tertarik dengan aplikasi Anda untuk membenarkan memulai contoh Chrome lainnya. Sangat mudah bagi pengembang untuk jatuh ke dalam perangkap perasaan bahwa aplikasi atau situs Anda adalah hadiah untuk kemanusiaan dan hal terpenting yang dapat mereka lakukan. Mengapa tidak memanfaatkan kelebihan sumber daya? Kita harus berjuang dengan cara berpikir seperti ini. Jalan seperti itu mengarah ke dunia di mana kita tidak dapat memiliki hal-hal baik. Jalan seperti itu mengarah ke dunia di mana baterai laptop kita perlu tumbuh untuk memberikan daya kepada prosesor, sehingga mereka melakukan pekerjaan yang bahkan lebih tidak berguna. Jalan seperti itu mengarah pada kembalinya Shockwave Flash dan telepon yang memanas di saku, yang secara misterius habis ketika kita ingin menggunakannya. Untuk paranoia sehubungan dengan pengisian daya baterai dan aplikasi penutupan segera setelah kami selesai bekerja dengan mereka. (Aku melihatmu, iTunes, dan Mischief.)
Katakan saja Elektron TIDAK
Pengembang, jangan biarkan teman Anda menulis aplikasi di Electron. Jika Anda ingin menggunakan JS dan Bereaksi, gunakan
Bereaksi Asli . Ini seperti Electron, tetapi Anda tidak perlu mendistribusikan salinan Chrome ke semua pengguna dan menjalankan salinan Chrome lainnya untuk menggunakan aplikasi Anda. Ternyata sistem operasi modern sudah memiliki perpustakaan UI yang baik dan cepat. Gunakan mereka, boobies!
Fakta menyedihkan lainnya adalah bahwa bahkan banyak pengembang tidak tahu apa yang terjadi di komputer mereka. Mereka menggunakan Slack, tetapi tidak tahu seberapa rakusnya. Adalah tanggung jawab Anda, sebagai pengembang, untuk mengetahui semua ini. Berlatih. Jelajahi alat profiling. Gunakan
iStatMeters atau salah satu analog gratis. Anda tidak dapat meningkatkan apa yang tidak Anda ukur.
Mungkin kita harus membeli komputer yang lebih lambat untuk merasakan sakitnya.
Facebook sengaja membatasi kecepatan Internet di kantornya seminggu sekali, untuk bersimpati dengan pengguna mereka di negara lain di dunia ketiga (khe-Australia-khe). Mungkin, sebagai pengembang, kita juga harus melakukan ini dengan komputer kita, misalnya, membuat kode bekerja lebih lambat dari biasanya untuk mempersenjatai diri kita dengan intuisi kinerja. Beberapa tahun yang lalu saya meninggalkan laptop saya di tempat kerja selama akhir pekan yang panjang. Alih-alih mengejarnya, saya memutuskan untuk memasukkan Raspberry Pi saya (generasi pertama yang lambat) dan menggunakannya untuk pengembangan. Tiba-tiba, banyak operasi yang dilakukan secara instan di laptop i7 reguler saya menjadi sangat lambat. Dan saya menghabiskan akhir pekan untuk membuat alur kerja saya lebih lancar. Semua tweak kinerja ini juga terbawa ke perangkat biasa. Mengurangi waktu peluncuran dari 5 detik menjadi 2x pada Raspberry Pi merasakan lompatan yang luar biasa. Perbaikan ini juga menjadi lompatan dari 0,5 detik menjadi 0,2, atau sesuatu seperti itu. Ini masih sangat nyata bagi pengguna. Waktu mulai 0,5 detik cukup singkat untuk melewatkan fakta ini selama pengembangan, tetapi penurunan ke 0,2 jelas terasa jauh lebih cepat.
Pengguna : Silakan mengeluh tentang program yang lambat. Di halaman 2016 (
... - sekitar Per. ). Kami membawa superkomputer di saku kami. Tidak dapat diterima untuk program menjadi lambat.
Pengembang : Masalah kinerja. Memori penting. Saya tidak peduli bahwa Anda adalah gadis paling menarik di lantai dansa, Slack. Saya menutup Anda segera setelah saya meninggalkan kantor. Saya menghapus Anda dari komputer segera setelah saya memiliki kesempatan. Kelambatan adalah bug. Program tercepat adalah program yang tidak Anda jalankan. Jadi berhentilah menyematkan seluruh Chrome di aplikasi Anda.
Dan Anda semua pengembang web: Pelajari C atau Rust atau sesuatu seperti itu. Program Anda
berjalan di komputer . Sampai Anda tahu bagaimana komputer bekerja, Anda akan menemui ajal. Dan keluar dari halaman saya sampai Anda tahu!
* Mengocok *Dan ya, baca tentang
krisis situs obesitas (
terjemahan di Habr ). Ini sangat lucu. Dan sangat menyedihkan. Dan sangat vital.
Sunting: Spotify sebenarnya menggunakan Kerangka Tertanam Chromium alih-alih diluncurkan melalui Electron. Tapi dia masih menyematkan Chrome. Saya tidak tahu tentang ini ketika saya menulis artikel, tetapi saya tidak mengambil kata-kata saya tentang kinerja tertinggi.