JavaScript framework savaşı bitti
(medium.com)Ve yalnızca bir kazanan var.
Katılımcılar: Framework'ler arasındaki savaş JS topluluğunun hararetli bir konusu. Backbone, Sencha gibi seçenekler ortadan kayboldu. jQuery'nin ise şaşırtıcı biçimde hâlâ büyük bir topluluğu var. Angular gibi pek iyi gitmeyen örnekler de oldu.
jQuery: En eski katılımcı. Tarayıcı uyumluluğu sorunlarını düzelttiği için popüler oldu. Ancak uygulamaları ölçeklendirmek zordu. Bugün artık ana akım değil ve en iyi seçenek de değil.
AngularJS: Zaten LTS modunda ve emekliye ayrılmış durumda. Framework ekosisteminde büyük bir sıçramaydı ve onu özleyen çok insan var. Artık bakım almadığı için artık bir katılımcı değil.
Angular:
- React ile rekabet etmek için ortaya çıktı. AngularJS'nin performans ve sağlamlık sorunları nedeniyle birçok programcı React'e özeniyordu. Angular, AngularJS'yi modernleştirip ES6 iyileştirmelerini kullanarak React ile rekabet etmeye çalıştı.
- Ağır öğrenme eğrisi en büyük zorluktu. Çok sayıda kavram gerektiriyordu. AngularJS'nin öğrenme eğrisini devraldı ama RxJS veya hiyerarşik bağımlılık enjeksiyonu (DI) gibi yeni zorluklar da ekledi.
- Bir başka endişe de verilen pek çok sözün tutulmamasıydı. Örneğin V2 ile sunucu tarafı render (SSR) sayfalarını kolayca oluşturmak mümkündü ama 2022/2/24 itibarıyla JS olmadan çalışmak imkânsızdı.
- En büyük sorun parçalanma ve sürüm yükseltmeleriydi. Sürüm yükseltmeleri o kadar zordu ki kullanıcılar bu riski almak istemiyordu. Bu durum npm site istatistiklerinde görülüyor.
VueJS:
- AngularJS'den daha yüksek performans sunan, Angular'dan daha kararlı ve daha kolay kullanılabilen bir çözüm olarak geliştiricilerin karşısına çıktı. Şablon sistemi açısından Vue, AngularJS'ye çok yakındı; AngularJS'nin sadeliğini korurken React'ten güç aldı.
- Ancak VueJS'nin 1 ve 2. sürümlerinde ciddi sorunlar vardı. Dizileri iyi işleyemiyordu ve yazarları yanlış güncelleme algoritmasını seçmiş olmaları konusunda JavaScript'i suçladı. Vuex veya Redux gibi kütüphanelere bağımlıydı.
- Bu sorun 3. sürümde çözüldü. Ancak kendi hataları için başkalarını suçlamak topluluğa yakışmadı.
SvelteJS:
- Yükselen bir rakip. Büyük vaatlerde bulunuyor. Bileşenleri buyurgan bir dile çevirmesinin temel avantaj olduğunu savunuyor. Onlara göre bu, React'in bildirimsel yaklaşımından daha iyi.
- Kullanımı basit. Ancak komut çevirisinin sonucunda ortaya çıkan bileşenler göründüğü kadar öngörülebilir değil. Bazı durumlarda değişiklikleri doğru tespit edemeyebilir. Bu durumda durum bozulabilir ve görünüm doğru güncellenmeyebilir. Bu sorun çok kaygı yarattığından, geçmişte VueJS'de olduğu gibi SvelteJS ile yapılan herhangi bir projeyi gerekçelendirmek zorlaşıyor.
StencilJS:
- Teknik olarak bir framework değil. Bileşenler yazıp bunları başka framework'lere dönüştürmek mümkün. Şu anda Angular, React, Vue ve Web Components'a dönüştürülebiliyor.
- Başka framework'lerin koduna benzeyen bir kod mu? sorusunu ortaya atıyor (bkz. özgün metin)
Mitosis:
- Muhtemelen duymadınız ama bu yazıyı yazmama neden olan şey bu. Angular'ın yaratıcısı Misko Hevery'nin geliştirdiği en yeni framework.
- StencilJS ile aynı amacı taşıyor. Bileşenleri çok sayıda framework'e çeviriyor.
- Aynı şekilde başka framework'lerin koduna benzeyen bir kod mu? sorusunu ortaya atıyor (bkz. özgün metin)
React:
- npm deposunda 10 yıldan uzun süredir bulunan en eski framework'lerden biri. Çok değişti ama büyük ölçüde eski sürümlerle uyumlu kaldı. Tüm değişiklikler daha iyiye gitti. Bazıları hook'larla React kullanmanın çok daha iyi bir framework yarattığını söylüyor.
- En iyi niteliği hook'larda ya da görünen özelliklerde değil, tam tersinde. En yeni JS standartlarını ve JSX'i benimsiyor. Bu artık bir framework değil. Belki de hiç olmadı. React, standartlar için o kadar çok çalıştı ki kullanıcı kodundan kendini çıkardı.
Peki kazanan...
- JSX. React de öyle, ama asıl olarak React'in arkasındaki felsefe. React'in kendisi bir kütüphane. Üstelik Preact veya React Native gibi birçok başka kütüphaneyle değiştirilebilir. Yakından bakıldığında, StencilJS veya Mitosis React'e çok benzer ve bu tesadüf değildir.
- "En iyi framework, kullanıcı kodundan kendini çıkaran framework'tür"
- React, JS ve JSX'i yoğun biçimde kullanıyor. Kullanıcı kodu React'ten bağımsız. Büyük değişiklikler olmadan aynı kod başka framework'lerde de çalışabilir.
- Bu yüzden şüpheye yer bırakmayacak şekilde framework savaşının galibi React.
- Çünkü kullanıcı kodunun içindeki framework o değil.
15 yorum
Önemli olan, Bob Amca'nın söylediği gibi "framework ile evlenmemek" ilkesini olabildiğince uygulayarak kod yazmaksa, React, Vue ya da Angular fark etmeksizin hepsiyle keyifli bir şekilde geliştirme yapamaz mıyız?
Marko.js'in geleceği nasıl görünüyor?
Bunu eBay desteklediği için son zamanlarda ilgimi çekmeye başladı, ama asıl metinde ondan hiç bahsedilmiyor bile...
React'in "çok değişti ama çoğunlukla geçmiş sürümlerle uyumlu" olması - ben bu uyumluluk deneyimini pek yaşamadım.
Angular'ın "parçalanma ve sürüm yükseltmeleri" - ama bu konuda ben oldukça sorunsuz bir deneyim yaşadım.
Bence JSX bir framework değil, bir spesifikasyon olarak sınıflandırılmalı. Ne demek istediğini anlıyorum ama gerekmeyen giriş kısmı fazlasıyla uzun ve her şeyden önemlisi başlık clickbait. Yazının kendi kalitesini kendi kendine düşüren bir üslup kullanıyorsunuz.
Özet ve güzel yorumlar için teşekkürler~! Bu tür konuşmaların diğer kişiler için çok faydalı olacağını düşünüyorum ;)
Genel olarak bunun garip bir yazı olduğunu düşünüyorum.
Önce Svelte kısmı.
Orijinal metne baktığımda, bir diziyi güncellerken
array[0] += 1gibi yazılırsa güncellemenin olmadığı için bunun sorun olduğu yazılmış; ancak Svelte resmi dokümantasyonunda da dizilerin güncellenmesi için yeniden atanması gerektiği belirtiliyor ve zaten React'te de diziler bu şekilde güncellenmiyor, değil mi?VueJS kısmı da öyle.
Angular ile karşılaştırarak Vue'nun dezavantajlarından söz ediyor ama çalışan Angular kodu ile çalışmayan Vue kodunu yan yana koyup sonra da Vue'nun pek iyi olmadığını söylemenin ne anlamı var, anlayamıyorum.
Bence bu gayet geçerli bir eleştiri. Yeniden atama ile mutation arasındaki fark, yeni başlayanlar için kafa karıştırıcı bir nokta; Svelte ve Vue’nun ikisi de JavaScript’e benzeyen ama ayrı bir sözdizimi kullandığı sürece, beklendiği gibi çalışmayan kısımların eleştirilmesi gayet doğal.
Özellikle Vue,
setgerçekleştiğinde durumu proxy üzerinden güncelleyen bir yaklaşım kullanıyor; ilk bakışta kolay görünüyor ama tuzaklara düşme ihtimali yüksek olduğu için bu kısmın eleştirilmesine ben de derinden katılıyorum.React ise bu tür sorunlarda çok daha özgür; yeniden atamayla durum güncellenmiyor ve bunun yerine
setUpdatefonksiyonunu açıkça çağırarak JavaScript standardı içinde tek yönlü güncelleme sunuyor. Bu yüzden bir dizinin yalnızca bir kısmını değiştirmekle yeniden atamayı karıştırmak gibi bir sorun en baştan ortaya çıkmıyor.Biraz yan konudan araya giren bir yorum olacak ama, Vue 3'te bu tür dizi güncellemeleri reaktif olarak destekleniyor; buna rağmen bu yazının yalnızca eski Vue sürümünü körü körüne eleştirip üstünkörü geçtiğini düşünüyorum...^^;; Asıl React'te bu tür güncellemelerin çalışmıyor olması da kesinlikle küçük bir dezavantaj değilken, sanki böyle özelliklere gerektiği gibi değinilmemiş gibi geliyor. haha
Orijinal metinde de çok sayıda yorum vardı ve çeşitli sorunlara işaret eden yorumlar epey fazlaydı.
Açıklama eklenmiş StencilJS ve Mitosis için olan "Diğer framework'lerin koduna benzeyen bir kod mu?" kısmı kafamı karıştırdığı için orijinale baktım; anladığım kadarıyla bu iki framework'te kullanılan kodun başka framework'lerde gördüğümüz koda benzeyip benzemediğini soruyor.
Muhtemelen React ile kod yazım biçiminin benzer olduğu anlamında yazılmış.
VueJS için değerlendirme biraz fazla acımasız görünüyor..
redux’a bağımlılık konusunda React’in de tamamen özgür olduğu söylenemez..
Kullanıcı ölçeği açısından bakarsak React’in ezici biçimde 1. sırada olduğu doğru,
ama teknik açıdan React’ten daha kötü bir proje denemez.
Burada VueJs hakkında esasen tartışılan nokta, dış kütüphanelere bağımlılıktan ziyade, "kendi yol açtıkları sorunların sorumluluğunu JS’ye yükleme tavrı" değil mi?
Her hâlükârda, vueJS hakkında kamuoyundaki algının iyi olmadığı doğru diye düşünüyorum.
Asıl metne gidip okursanız, Vuex ve Redux’a bağımlılıktan söz edilen bölümde de, VueJS 2’de ortaya çıkan sorunları çözmek için Vuex ve Redux gibi kütüphanelerin 'zorunlu' olduğu ifade ediliyor.
Orijinal metinde de zaten buna dair birkaç yorum var ama
Karmaşıklık arttığında, ister Vue ister React olsun, redux gibi durum yönetimi/önbellekleme kütüphaneleri "zorunlu" hale geliyor.
Evet, gerçekten de öyle; orijinal metinde VueJS için bunun bir dezavantaj olduğu söylenmiş ama React için bundan bahsetmemek "kasıtlı" görünüyor.
Topluluğun tavrı ise benim açımdan pek önemli değil..
React'ta Redux zorunlu değil. Çünkü
contextAPIveyauseReducergibi araçları kullanarak durum yönetimi yapılabiliyor. Bunun React'in Vue'dan daha iyi sayılabileceğine dair bir dayanak olduğunu düşünmüyorum ama.Evet, haha, genel olarak iyi bir yazı gibi görünmüyor.
Yazar, sonuca en baştan karar vermiş ve o sonuca ulaşmak için diğer framework'leri kötüleyip duruyor.