Tek sayfalı uygulamalar oluşturmak için JavaScript çerçeveleri [kapalı]


101

Amacım, mevcut bir web uygulamasını RESTful tek sayfalı bir uygulamaya (SPA) taşımaktır . Şu anda birkaç Javascript web uygulama çerçevesini değerlendiriyorum.


Gereksinimlerim aşağıdaki gibidir:

  • RESTful veri katmanı (ember-data gibi)
  • MV * yapısı
  • Dinamik rotalar
  • Test desteği
  • Sözleşmeye göre kodlama
  • SEO desteği
  • Tarayıcı Geçmişi Desteği
  • İyi (API-) belgeler
  • Üretime hazır
  • Yaşayan topluluk

Omurga

Mevcut uygulama kullanıyor backbone.js. Genel olarak, backbone.jsgüzel bir proje, ancak neyin nerede olması gerektiğini ve işlerin nasıl uygulanması gerektiğini belirleyen iyi tanımlanmış yapıları özlüyorum. Değişen geliştiricilerle daha büyük bir takımda çalışmak, bu, bakımı zor ve anlaşılması zor bir tür yapılandırılmamış koda yol açar. Bu yüzden şimdi tüm bunları tanımlayan bir çerçeve arıyorum.

Kor

ember.jsSon günlere baktım . Yaklaşım bana çok umut verici görünüyor. Ancak maalesef kod neredeyse her gün değişiyor. Bu yüzden buna üretime hazır demeyeceğim. Ve maalesef, 1.0 versiyonunu bekleyemeyiz. Ama bu çerçevenin arkasındaki fikri gerçekten beğendim.

Açısal

Angular.jsaynı zamanda Google tarafından sürdürülen, yaygın bir çerçevedir. Ama açısal ile aşina olamadım. Bana göre, yapı biraz belirsiz görünüyor, çerçevenin her bir parçasının genel sorumluluklarının açıklamaları eksik ve uygulamalar dolambaçlı geliyor. Şunu açıklığa kavuşturmak için: bu sadece benim kişisel izlenimim ve eksik bilgiye dayanabilir.

Batman ve Meteor

Anladığım gibi, her iki çerçevenin de bir sunucu kısmına ihtiyacı var. Ve sadece RESTful bir arka uç istediğimiz için - hangi dil, teknik veya yazılım olursa olsun, istediğimiz bu değil. Ayrıca, arka uç API'si zaten mevcuttur (RoR).

Nakavt , CanJS ve Omurga

Bu üç adayın derinliklerine inmedim. Belki bu bir sonraki adımım olur.


Şimdi sorularım:

  • Herhangi bir iyi SPA çerçevesini özlüyor muyum?
  • Hangi çerçeveyi önerirsiniz / önerirsiniz?
  • Bahsedilen çerçevelerin herhangi birinden kaçınır mısınız?
  • Daha büyük SP uygulamalarındaki deneyiminiz nedir?

Not: Steven Anderson'dan (Knockout.js'den çekirdek geliştirici) "Throne of JS" konferansı (2012'den itibaren) ve genel olarak javascript çerçeveleri hakkında harika bir blog yazısı önermek isterim.

Not: Evet, SO'da zaten bazı sorular olduğunu biliyorum. Ancak SPA'lar için geliştirme çok hızlı ve hızlı olduğu için, çoğu zaten güncelliğini yitirmiş durumda.


Az önce açık kaynaklı olduğum nakavt tabanlı SPA çerçevesine göz atın
onlyurei

Yanıtlar:


81

Yakın zamanda bir proje için de JavaScript SPA çerçevesine karar vermek zorunda kaldım.

  • Kor

    Ember'a erken baktım ve seninle ilgili benzer düşüncelerim vardı - Gerçekten beğendim ama kullanmak için henüz çok erken olduğunu hissettim ... Okuduğum öğreticilerin yaklaşık yarısı mevcut sürümle çalışmadı çünkü son zamanlarda bir şeyler vardı şablonlamanın çalışma şekli değişti.

  • Omurga

    Omurga, ciddi olarak incelediğimiz ilk çerçevelerdi. Neden "iyi tanımlanmış yapılara" sahip olmadığını düşündüğünüzü anladığımdan emin değilim? Backbone, Model ve View kodunun nasıl bölüneceği konusunda oldukça açık. Belki de bir tür uygulama şablonu olmadığını mı kastediyorsunuz? Her neyse, Backbone gerçekten model / REST bağlama kısmına odaklanmış gibi görünüyor, ancak görünüm bağlama için gerçekten hiçbir şey önermiyor. Model bağlama sizin için önemliyse ve Rails kullanıyorsanız, bunu yapmak çocuk oyuncağı olmalıdır. Ne yazık ki, uygulamamın web hizmetleri tam olarak eşleşmedi .syncve .parseher şey için kendi yöntemimi ve yöntemlerimi yazmak zorunda kaldım . Model ve Görünüm kodunun ayrılması güzeldi, ancak tüm bağlamalarımızı sıfırdan yazmamız gerektiğinden buna değmezdi.

  • Nakavt

    Nakavt, Backbone Yang'ın Yin'i gibidir. Omurga Modele odaklandığında, Nakavt bir MVVM çerçevesidir ve Görünüme odaklanır. It has observableJavaScript nesnesi özellikleri için sarmalayıcılarını ve kullanır data-bindHTML'nize bağlamak özelliklerine niteliği. Sonunda, görünüm bağlama esas olarak uygulamamız için ihtiyacımız olan şey olduğundan Nakavt ile gittik. (... ve daha sonra tartışılacağı gibi diğerleri ...) Knockout'un görüş bağlamasını ve Omurga model bağlamalarını seviyorsanız , her iki çerçeveyi birleştiren KnockBack de vardır.

  • Açısal

    Knockout'tan sonra buna baktım - ne yazık ki hepimiz Knockout'un bağlamayı nasıl gördüğünden oldukça memnun göründük. Knockout'tan çok daha karmaşık ve içine girmesi daha zor görünüyordu. Ve bağlamaları yapmak için bir dizi özel HTML özelliği kullanıyor, ki bundan hoşlandığımdan emin değilim ... Daha sonra Angular'a tekrar bakabilirim, çünkü çerçeveyi gerçekten seven birden çok kişiyle karşılaştım - belki biz sadece bu proje için çok geç baktım.

  • Batman , Meteor , CanJS , Omurga

    Bunların hiçbirine çok yakından bakmadım. Spine'ın açık Controller nesnelerine sahip Backbone'a benzer bir çerçeve olduğunu ve CoffeeScript ile yazıldığını bilmeme rağmen.

  • Sonsöz

    Bahsettiğim gibi, Knockout'u kullandık çünkü projemiz için görüş bağlamaya odaklanmak daha önemliydi. Biz de kullanarak sona erdi RequireJS modularization için kavşak ve Hasher , yönlendirme ve tarih işlemek için Jasmine yanı sıra test etmek için JQuery , Heyecan Bootstrap ve Underscore.js (ve muhtemelen daha kütüphaneler şu anda unutuyorum).

    Javascript uygulama geliştirme, Rails ekosisteminden çok Java ekosistemine benzer. Rails, her uygulama için kullanacağınız sağlam bir temel malzeme sağlar (Rails çerçevesi) ve topluluk, bunun üzerine birçok özelleştirme sağlar (cevher). Java ... bir dil sağlar. Ve sonra Java EE veya Spring veya Play veya Struts veya Tapestry'yi seçebilirsiniz. Ve veritabanıyla konuşmak için JDBC veya Hibernate veya TopLink veya Ibatis'i seçin. Ve sonra inşa etmek için Ant veya Maven veya Gradle'ı kullanabilirsiniz. Ve bunu çalıştırmak için Tomcat veya İskelesi veya JBoss veya WebLogin seçin. Peki gerekmez ve hangi seçmek yerine birlikte çalışır seçme hakkında daha fazla vurgu var kullanımına çerçeve.


Detaylı cevabınız için çok teşekkür ederim. Knockout.js ile ilgili bazı sorular: 1) Modeli ön uçta / arka uçta senkronize tutmak için bir tür veri katmanı sağlıyor mu? 2) Bir şablonu diğerine dahil etme desteği nasıl (muhtemelen requireJS ile birlikte)? 3) Tüm dosyaları (modeller, görünümler, denetleyiciler, yardımcı vb.) Ayrı ayrı ve farklı klasörlere koymak kolay mı? Bu soruların yanı sıra çok fazla bilgi verdiğiniz için cevabınızı kabul ettim.
Christopher Will

@ChristopherWill teşekkürler! 1.) Backbone'un görünüm bağlamayı size bırakması gibi, Nakavt REST-> Model bağlama için size bırakır. Dokümantasyonda bazı örnekler vardır - knockoutjs.com/documentation/json-data.html veya Backbone'un REST-> Model popülasyonunu birleştirmek için KnockBack'i kullanabilirsiniz.
Nate

2.) Ne demek istediğinize bağlıdır - Nakavt, modelden bir koleksiyon almanıza, bir liste etiketine veya tablo etiketine bağlanmanıza ve her biri için belirli bir şablonu oluşturmanıza olanak tanıyan yerleşik bir veri bağlama özelliğine sahiptir. Genel görünümlerinizi nasıl oluşturduğunuz ve bunları değiştirdiğiniz gibi büyük ölçekli şeyler için - bu hala biraz manuel (en azından nasıl yapıyorum, hala öğreniyorum) - Metin eklentisi ile RequireJS bunu yapmayı biraz daha kolaylaştırıyor, ancak yine de mantığı belirlemeniz ve div'leri değiştirmeniz gerekiyor - bunu sadece rotalarıma yanıt veren yöntemlerde yapıyorum. Yine de, bunu yapmak için Knockout olaylarını bağlayabilirsiniz.
Nate

3.) RequireJS bunu yapmanıza izin veren şeydir.
Nate

Teşekkürler Nate. Sanırım KnockBack'i deneyeceğim .. kulağa umut verici geliyor. Ve tabii ki, bahsettiğiniz kütüphanelerle birlikte (gerekli JS, kavşak vb.)
Christopher Will

8

Bulut hizmetleri projemizi çok sayıda SPA ile geliştirmeye başladığımızdan bu yana bir yıl geçti, bu yüzden RESTful mimari ihtiyaçlarımızı karşılamak için kullanıcı arayüzümüzde hangi javascript çerçevesini kullanacağımız büyük bir karardı. ve birçok araştırmadan sonra Dojo çerçevesini kullanmaya başladık .

seveceğiniz ana özellikler:

  1. eğitimli topluluk ve mükemmel bir tasarım modeli ile ortaya çıkan bir ekip. harika konvansiyonlar ve modüler / nesne yönelimli mimari. CrossBrowser programlama tutumları ile :)
  2. MV * yapısı. harici .htm şablonlarıyla kullanıcı arayüzü widget'ları oluşturun ve üretim için tüm javascript ve şablonlarınızı tek, küçültülmüş ve küçük .js'de oluşturun
  3. kalıtımla sınıflar oluşturun. özellik belirleyiciler, birçok işlev aracı.
  4. pub / sub mekanizması (dojo'da adlandırılmış konular)
  5. doğrulama formu kontrolü, diyaloglar / araç ipuçlarından yoğun özellikli, oldukça özelleştirilebilir (ancak hafif) bir grafik ve veri ızgarası çözümüne kadar birçok UI kontrolü.
  6. DOH adında iyi bir birim test sistemi. ayrıca fare / klavye eylemlerini yeniden üretmek için bir robotu vardır.
  7. tüm jquery özelliklerine ve hatta birçok eklentisine sahip NodeList adlı bir sorgulama aracı (JQuery gibi).
  8. ve iyi ama tamamlanmamış kısım. REST hizmetlerinizle kullanmak için bir JsonRest modülüne sahiptir. kullanışlı bir araçtır ancak pek çok özelliğe sahip değildir.

Bu sorunların üstesinden gelmek için bir AJAX yoklayıcı, hata işleme ve evrensel yükleme ve bildirimler çözümü geliştirdik. dojo çerçeve sözleşmelerini ve yapılarını kullanarak bunu çok kolay yaptık. Bunu yapmak istemiyorsan, belki bu kısım için başka bir çerçeve kullanmalısın.

İnternetteki harika SPA'lara baktığınızda, hepsinin özelleştirilmiş olduğunu ve birden çok çerçeve kullandığını göreceksiniz. ancak Dojo ile tek başına deneyimimiz harikaydı. ve bu nedenle bir SPA için tümü eksik olduğu için başka bir çerçeve düşünmemenizi öneririm. ama nihayetinde başka bir seçeneğiniz daha var (bunu önermiyorum ve hakkında ayrıntılı bilgi sahibi değilim). Otomatik olarak UI ve javascript oluşturarak SPA'lar oluşturabilen bir JAVA çerçevesiyle gidin.


Merhaba! Şimdi Dojo kullanıyor musunuz? Dojo hakkında blogunuz mu var?
Dunaevsky Maxim

Selam! Evet, yine de aynı ürün için kullanıyoruz ve sürdürüyoruz. kurum içi çerçeve dojonun üstüne yazılıyor ve biz buna her gün ekliyoruz .. hayır bunun için bir blogum yok. onunla başlayacaksanız, bugünlerde eski bir araç olarak kabul edilir. Hala Dojo 2.0 üzerinde çalışıyorlar, ancak şimdilik diğer seçenekleri kullanmak daha iyi olabilir. Listenin başında React / Angular var.
Unicornist
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.