Dün gece yine bir otomasyon script'i yazıyordum. Sistemdeki bazı işlemleri yöneten küçük bir C++ konsol uygulaması. Bellek kullanımı 2MB'ı geçmiyordu, başlatılması anlıktı ve işini bitirip çıkıverdi. Sonra, test için kullandığım bir Electron tabanlı masaüstü uygulamasını açtım. Aynı anda Chrome'u da açtığımı fark ettim. İkisi de aynı Chromium motorunu çalıştırıyor, ikisi de yüzlerce MB RAM yiyordu. O anda kafamda bir şimşek çaktı: "Bu artık bana sadece tarayıcıda açılan bir website gibi geliyor."
Performans farkını zaten biliyoruz. Native bir uygulama, işletim sistemiyle doğrudan konuşur. Electron ise araya bir tarayıcı katmanı, Node.js runtime'ı ve paketlenmiş tüm web teknolojilerini sokar. Sorun sadece RAM veya CPU değil.
Sorun, hissiyat. Bir native uygulama (iyi yazılmışsa) sistemin bir parçası gibi davranır. Pencere davranışları, sistem teması, işletim sistemi seviyesindeki optimizasyonlar... Electron uygulamalarında ise her şey bir simülasyon. O pencere kenarlığı, o menüler, hepsi HTML/CSS/JS ile yeniden çiziliyor. Meğerse ben, farkında olmadan, bir web sayfasının "pencere modunda" çalışan halini kullanıyormuşum.
C++:
// Native'de bir pencere oluşturmak (kabaca)
HWND hwnd = CreateWindowEx(0, className, "Başlık", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, nullptr, nullptr, hInstance, nullptr);
Cevap basit: üretim hızı ve erişilebilirlik. Bir web geliştiricisi, React veya Vue biliyorsa, neredeyse hiç yeni şey öğrenmeden masaüstü uygulaması yapabilir. Cross-platform özelliği de cabası. Tek kod tabanı, her yerde. Bu, inanılmaz bir ticari avantaj.
Ama burada bir trade-off var. Kolaylık ve hız karşılığında, kullanıcıya daha az optimize, daha "yapay" hissettiren bir deneyim sunuyoruz. Kafayı yiyecektim, şaka gibi ama Slack veya VS Code gibi harika Electron uygulamaları bile bazen "hafif" bir notepad uygulaması kadar hızlı açılmıyor.
Ara formüller çıkıyor ortaya. Tauri gibi framework'ler, web teknolojilerini (HTML, CSS, JS) kullanıyor ama runtime olarak sisteme gömülü bir webview ve Rust kullanıyor. Çıktı boyutu inanılmaz küçük. Bir diğeri Flutter, kendi rendering engine'ini getiriyor ama en azından Chromium'u paketlemiyor.
Sonuç olarak, artık bir Electron uygulaması gördüğümde içimden "Bu aslında bir PWA, biraz daha yetenekli hale getirilip paketlenmiş" diyorum. Native'in o kesintisiz, organik hissiyatını özlüyorum. Ama iş hızlı prototiplemeye ve cross-platform'a geldiğinde, Electron'un cazibesini de anlıyorum.
Siz bu native vs. web-tech tartışmasında nerede duruyorsunuz? Özellikle Tauri veya benzeri hafif alternatifleri deneyen oldu mu? Performans mı, hız mı?