Dinlendirici arka uç için Ember.js veya Backbone.js [kapalı]


98

Ember.js'nin, backbone.js'nin aksine daha ağır bir yaklaşım olduğunu zaten biliyorum. Her ikisi hakkında birçok makale okudum.

Kendi kendime soruyorum, hangi çerçeve bir raylar için ön uç olarak daha kolay çalışıyor. Backbone.js için, geri kalan arka uç çağırmak için farklı yaklaşımlar gördüm. Ember için 'veri' veya 'kaynaklar' gibi daha fazla kitaplık eklemem gerekiyor gibi görünüyor. Bunun için neden iki kütüphane var?

Peki daha iyi seçim nedir? Ön ucu arka uca bağlamak için çok fazla örnek yok. Buna bir arka uç dinlenme çağrısı için iyi bir çalışma örneği nedir:

URI: ../restapi/topics GET kimlik doğrulama bilgileri: yönetici / güvenli biçim: json


3
"Yapıcı olmayan" bir soruyu sevmelisiniz, ancak yararlı, iyi düşünülmüş yanıt hala 240'ın üzerinde olumlu oy almıştır.
Andrew

Yanıtlar:


257

Yaygın görüşün aksine Ember.js, Backbone.js için 'daha ağır bir yaklaşım' değildir. Tamamen farklı son ürünleri hedefleyen farklı türde araçlardır. Ember'in tatlı noktası, kullanıcının uygulamayı uzun süre, belki de tüm gün açık tutacağı uygulamalardır ve uygulamanın görünümleri veya temeldeki verilerle etkileşim, görünüm hiyerarşisinde derin değişiklikleri tetikler. Ember, Backbone'dan daha büyüktür, ancak bu sayede Expires, Cache-Controlbu yalnızca ilk yüklemede önemlidir. İki günlük günlük kullanımdan sonra, fazladan 30.000, içeriğiniz resim içeriyorsa, veri aktarımlarının gölgesinde kalır.

Omurga, görünüm hiyerarşisinin nispeten düz kaldığı ve kullanıcının uygulamaya seyrek olarak veya daha kısa süreler için erişme eğiliminde olduğu az sayıda duruma sahip uygulamalar için idealdir. Omurga kodu kısa ve tatlı kalır çünkü DOM'u destekleyen verilerin atılacağını ve her iki öğenin de hafızada toplanacağını varsayar: https://github.com/documentcloud/backbone/issues/231#issuecomment-4452400 Omurganın daha küçük boyutu, aynı zamanda kısa etkileşimler için daha uygun olmasını sağlar.

İnsanların her iki çerçevede yazdığı uygulamalar şu kullanımları yansıtır: Ember.js uygulamaları arasında Square'in web panosu , Zendesk (en azından temsilci / biletleme arayüzü) ve Groupon'un planlayıcısı : bir kullanıcının tüm gün çalışarak geçirebileceği tüm uygulamalar.

Omurga uygulamaları, genellikle daha büyük bir statik sayfanın sadece küçük bölümleri olan kısa veya gündelik etkileşimlere odaklanır: airbnb , Khan Academy , Foursquare'in haritası ve listeleri .

Sen edebilirsiniz Kor hedefler (örn o uygulamaların türlü yapmak için Omurga kullanmak RDIO bir tarafından)) bellek sızıntısı veya zombi etkinlikler gibi önlemek sorunlarına sorumlusun uygulama kod miktarını (Ben şahsen bu yaklaşımı tavsiye etmiyoruz) artan veya b) backbone.marionette veya Coccyx gibi üçüncü taraf kitaplıkları ekleyerek - tümü benzer örtüşen işlevsellik sağlamaya çalışan bu kitaplıkların birçoğu vardır ve muhtemelen daha büyük olan ve daha fazla yapıştırıcı kodu gerektiren kendi özel çerçevenizi bir araya getireceksiniz. Ember kullansaydın.

Nihayetinde "hangisini kullanmalı" sorusunun iki cevabı vardır.

Birincisi, "Genel olarak kariyerimde hangisini kullanmalıyım": Her ikisi de, tıpkı gelecekte yapmak isteyeceğiniz işe özgü araçları öğreneceğiniz gibi. "Backbone veya D3" diye asla sormazsınız; "Backbone or Ember" eşit derecede saçma bir sorudur.

İkincisi, "Bir sonraki projemde özellikle hangisini kullanmalıyım": Projeye bağlıdır. Her ikisi de bir Rails sunucusuyla eşit kolaylıkla iletişim kuracaktır. Bir sonraki projeniz, sunucu tarafından oluşturulan ve JavaScript tarafından sağlanan "zenginlik adaları" adı verilen sayfaların bir karışımını içeriyorsa, Backbone'u kullanın. Bir sonraki projeniz tüm etkileşimi tarayıcı ortamına iterse, Ember'ı kullanın.


4
Harika yanıt, Trek. Sadece burada yorum yapmak Expiresve Cache-Controlinsanların düşündüğünden çok daha az yardımcı olmak istedim - özellikle de onları genellikle görmezden gelen mobil cihazlar açısından. Bir iOS sürümünün onları tamamen yok saydığını hatırlıyorum (ancak yine de HTML5 önbellek bildirimini listeliyor). Ayrıca bu başlık değerleri, bir kullanıcının ilk ziyareti sırasında yardımcı olmaz. Bu, genellikle kullanıcının kalıp uygulamanızı kullanıp kullanmayacağına karar vermede en kritik noktadır. Tüm bu 30kb dosya farkını söylemek bana o kadar da önemli görünmüyor. Bu işlenmemiş mi yoksa küçültülmüş ve gzip ile sıkıştırılmış 30k fark mı?
Mauvis LEdford

11
Ember'ın yaratmaya yardımcı olması amaçlanan gerçek uygulamalara giderseniz, bu sinir bozucu KB'lerden kaçmanın olmadığını göreceksiniz. Ya Ember'dan geliyorlar ve uygulama kodunuz daha küçük ya da omurga eklentilerinden geliyorlar ya da kendi yazdığınız koddan geliyorlar. Wunderlist , yaklaşık 300 kb aktarımda "basit" saatler olacağını düşünebilirsiniz. Ember ile benzer boyutta olacağını, belki de daha küçük olacağını düşünürdüm - Wunderlist'in tam bir kopyasını asla yazmamışken% 100 kesinlikle söyleyemem.
Trek Glowacki

1
Katılıyorum, en popüler omurga uygulamam sıkıştırılmış ve küçültülmüş 178kb + şablonlarda. Sadece tarayıcı önbelleğine nasıl güvenmememiz gerektiğine işaret ediyorum.
Mauvis LEdford

2
Trek, genişletilmiş kullanım modellerine ve karmaşık durum yönetimine sahip uygulamalarda Backbone kullanma analizinizde tam size göre. Eski bir uygulamayı Backbone'a dönüştürme deneyiminden geçtim ve listelediğinizi tam olarak yapmak zorunda kaldım. Marionette'i entegre etmemizin yanı sıra rota öncesi / sonrası filtreleme, bellek sızıntısı azaltma ve daha iyi olay yönetimi gibi şeyler için bol miktarda yapıştırıcı kod yazmamız gerekiyordu.
Mike Clymer

9
"Backbone veya D3'ü asla sormazsınız" - elbette, ancak Backbone ile birlikte D3'ü kullanacağım bir projeyi kolayca hayal edebiliyorum. Backbone ve Ember'ın tek bir sayfada birlikte kullanıldığı bir projeyi hayal etmek muhtemelen çok daha zor. Bu yüzden "Backbone veya Ember" sorusunu oldukça adil buluyorum. İşte oldukça bilgilendirici bulduğum başka bir gönderi, çünkü iki çerçeveyi daha derinlemesine karşılaştırıyor: net.tutsplus.com/tutorials/javascript-ajax/…
Shiprack

26

Kısa, basitleştirilmiş bir cevap vermek için: RESTful arka uç için, şu anda Backbone kullanmalısınız.

Daha karmaşık bir cevap vermek gerekirse: Gerçekten ne yaptığınıza bağlı. Diğerlerinin de söylediği gibi, Ember farklı şeyler için tasarlanmıştır ve farklı bir grup insana hitap edecektir. Kısa cevabım, RESTful gereksinimini dahil etmenize dayanmaktadır.

Şu anda, Ember-Data (Ember içindeki varsayılan kalıcılık mekanizması gibi görünüyor) üretime hazır olmaktan çok uzak. Bunun anlamı, epeyce hataya sahip olması ve en önemlisi, yuvalanmış URI'leri (örneğin / posts / 2 / comments / 4556) desteklememesidir. Eğer REST sizin gereksiniminizse, Ember'ı seçerseniz, şimdilik bunun etrafında çalışmanız gerekecektir (yani, ya hacklemeniz, beklemeniz, Ember-Data gibi bir şeyi sıfırdan kendiniz uygulamanız ya da kullanmamanız gerekir. -very-RESTful URI'ler). Ember-Data, Ember'in kesinlikle bir parçası değildir, bu nedenle bu tamamen mümkündür.

Büyüklüğün yanı sıra ikisi arasındaki temel farklar temelde:

Ember sizin için mümkün olduğunca çok şey yapmaya çalışır, böylece çok fazla kod yazmanıza gerek kalmaz. Çok hiyerarşiktir ve eğer uygulamanız da çok hiyerarşik ise, muhtemelen uygun olacaktır. Sizin için çok şey yaptığı için, böceklerin nereden geldiğini anlamak ve neden beklenmedik davranışların gerçekleştiğini anlamak zor olabilir (çok fazla "sihir" vardır). Ember'ın geliştirmenizi beklediği uygulama türüne doğal olarak uyan bir uygulamanız varsa, bu muhtemelen bir sorun olmayacaktır.

Backbone, neler olup bittiğini anlamanız ve uygulamanıza uyan bir mimari oluşturabilmeniz için (kullandığınız çerçevenin mimarisine uyan bir uygulama oluşturmak yerine) sizin için mümkün olduğunca az şey yapmaya çalışır. Başlamak çok daha kolaydır, ancak dikkatli değilseniz, çok hızlı bir şekilde karmaşa yaşayabilirsiniz. Hesaplanan özellikler, otomatik çözme olayları vb. Gibi şeyler yapmaz ve bunları size bırakır, bu nedenle birçok şeyi kendiniz uygulamanız gerekir (veya en azından bunu sizin için yapan kitaplıkları seçmeniz gerekir), daha ziyade bütün mesele.

Güncelleme : Görünüşe göre, yakın zamanda Ember artık yuvalanmış URI'leri destekliyor, bu yüzden sorunun ne kadar sihirden hoşlandığınıza ve Ember'in uygulamanız için mimari olarak uygun olup olmadığına bağlı olduğunu düşünüyorum.


5
"en önemlisi, iç içe geçmiş URI'leri desteklemez (örneğin / posts / 2 / comments / 4556)" İşte birkaç hafta önceki ilgili kayıt: github.com/emberjs/data/commit/… . Hızla hareket eden, yayın öncesi bir çerçeveye ayak uydurmanın zor olabileceğini biliyor, ancak otoriteyle konuşurken ve tavsiye verirken daima doğruluğu hedeflemeliyiz!
Trek Glowacki

Harika, teşekkürler. Cevabım güncellendi. Sanırım geçen hafta ya da öylesine büyük ilişki birleşiminde tanıtıldı. Listelenen değişiklikleri gözden geçirdim ve okudum, ancak URL'lerden hiç bahsetmedim ve izlediğim sorunlar onları kontrol ettiğimde hala açıktı. Taahhüdü işaret ettiğiniz için teşekkür ederiz - varlığını zaten bilmeden bulmak zor olabilir.
bengillies

Gerçekten de ilişki geliştirme dalının son birleşiminden. Eski sorunları yavaş yavaş takip ediyor ve bu hafta kapatıyoruz.
Trek Glowacki

3

Sanırım sorunuz yakında engellenecek :) İki çerçeve arasında birkaç çekişme var.

Temelde Backbone pek çok şey yapmaz ve bu yüzden onu seviyorum: çok kodlamanız gerekecek, ancak doğru yerde kodlayacaksınız. Ember pek çok şey yapar, bu yüzden ne yaptığına dikkat etsen iyi olur.

Sunucu tartışması, Backbone'un yaptığı birkaç şeyden biridir ve onunla harika bir iş çıkarır. Bu yüzden Backbone ile başlayıp, tamamen tatmin olmadıysanız Ember'ı deneyeceğim.

Ayrıca Backbone'un yaratıcısı Jeremy Ashkenas ve Ember üyesi Yehuda Katz'ın güzel bir sohbet ettiği bu podcast'i de dinleyebilirsiniz.


2
Teşekkür ederim. Korun rets uzantıları hakkında neler söyleyebilirsiniz? Verileri veya kaynakları daha iyi kullanmak mı? Rest api çağrısına basit bir örnek verebilir misiniz?
Robin Wieruch

1
Kısa cevap, kütüphanelerin her zaman değiştiği ve önceki deneyimlerime dayanarak size bir yanıt veremem (değerlendirme için kendim yaptım). Sanırım bu gönderi size
elimden gelenden

1
Bu gönderiyi zaten gördüm. Bu yüzden sordum :)
Robin Wieruch

2
@NicolasZozol hangi podcast? bağlantı?
deepak

3
javascriptjabber.com/004-jsj-backbone-js-with-jeremy-ashkenas Şubat ayından itibaren. Bu, bu çerçevelerin örtüşen arenalarda gerçekten var olmadığı netleşmeden önce. Yehuda ve Jeremy'nin birbirlerinin yanından geçip konuştuğunu duyabilirsiniz, aslında herhangi bir karşılaştırma yapmadan.
Trek Glowacki
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.