Bir sunucu tarafından oluşturulan ön uç uygulamasının aksine web uygulamalarında istemci / sunucu mimarisinin avantajları nelerdir?


13

Şirketimizde, gömülü bir Linux platformuna bir web arayüzü oluşturmamız gerekiyor. 2 çeşit görüyorum: HTML ve JavaScript'in sunucu tarafında oluşturulduğu bir teknoloji kullanıyorsunuz (Think JSP, Grails, ancak C ++ kullanan ve HTML / JavaScript üreten bir şey) veya bir HTML5 'istemcisi' oluşturuyorsunuz JSON veya XML üreten arka uçla konuşan bir uygulamadır.

Web uygulamalarının şu anda ikincisi ile gitme eğiliminde olduğunu hissediyorum, ancak bunu yapmanın avantajları nelerdir (Projedeki geliştiriciler, esas olarak C ++ HTML ve Javascript'ten daha iyi bildikleri gerçeğine dayanarak eski olanı seçerler)


Geliştiriciler C ++ ile HTML + JS'den daha aşina ise, neden eski çözüme gittiler? İkincisi, özellikle "HTML 5 İstemcisi" ni C ++ masaüstü uygulaması veya Java Uygulaması veya JNLP konuşlandırılmış masaüstü uygulaması gibi zengin bir istemciyle değiştirirse daha az güçlük çekerdi ...?
Shivan Dragon

Yanıtlar:


4

AJAX

Bence sorunuz "Web uygulamam istemci tarafında mı yoksa sunucu tarafında mı HTML oluşturmalı?" İstemci tarafı üretimi sunucuya AJAX kullanarak iletişim kurar, ancak X (XML) genellikle JSON ile değiştirilir, ancak çoğu kişi hala daha iyi göründüğü için AJAX olarak adlandırır. Sunucu tarafında, sunucu sadece HTML üzerinde sunucu yapar.

XML ile çok fazla deneyimim var ve JSON ile neredeyse hiç yok. XML hakkında bildiğim her şey, mümkün olduğunda JSON kullanmanızı öneririm.

AJAX Artıları:

  • Daha hızlı çalışabilmeleri için HTTP (S) üzerinden daha az veri gönderin.
  • Sunucu temelde bir web hizmetidir, böylece diğer insanlar (veya siz) kendi istemcilerini yazabilir. Bu, sitenizin mobil bir sürümünü oluştururken yardımcı olabilir. Ayrıca, birçok icat yaratıcılarının asla istemediği nedenlerle popüler hale gelir. Hizmetler, kodunuz için yeni kullanımlar bulan kişilerin dostudur.
  • Daha yeni bir uygulamaya benziyor

AJAX Eksileri:

  • JavaScript'te hata ayıklama
  • Karmaşıklık?
  • JavaScript ile yapabileceğiniz şeyler, kör veya özürlü insanların kullanması için genellikle tamamen imkansızdır.
  • Toplamda daha fazla kod gerekebilir (katıştırılmış cihazınızda daha büyük toplam depolama alanı)

Müşteri sunucusu

Tüm web uygulamaları istemci-sunucu mimarisini kullanır. HTTP protokolü, web uygulamalarını bu şekilde davranmaya zorlar. AJAX bu tasarım sınırlaması için bir geçici çözüm kullanır, ancak HTTP'nin temel altında yatan model hala istemci-sunucudur. MVC web uygulamalarına uygulamak için en iyi yolu hakkında her şeyi asmak olmaz. Politik nedenlerle MVC yapmak zorundaysanız, Ruby / Rails'in bunu nasıl yaptığına bakın. Aslında, Rails kopyalamak (veya kullanmak) için harika bir mimaridir.

Servis ve Uygulama

İyi bir hizmet neredeyse her zaman bir uygulamadan daha iyidir. Ama iyi bir hizmet yapmak zor! Bir hizmet için yeterince iyi tasarlanmış bir özellik yazmadan önce uygulamayı yapmanız gerekebilir. İşinizi olması gerekenden daha zor hale getirmeyin. Sürüm 1 için harika bir uygulama yapmaya odaklanın. Başvurunuz nispeten kararlı olana ve kullanıcı gereksinimlerinizi karşıladığından emin olana kadar, bir hizmete sahip olmak muhtemelen hiçbir şekilde iyi olmaz. Yanlış servisin çok erken tasarlanması, servis arayüzünüzü düzeltmeye ve izleyen hem sunucu hem de istemci kodunun büyük ölçüde yeniden düzenlenmesi ile uğraşırken boşa harcanan zaman kaybıdır.

C / Web

Vay. Web geliştirmeye geçmeden önce C ve Assembly'de 3 yıl çalıştım. Bir web uygulaması yazmak için daha kötü bir dil düşünemiyorum - özellikle güvenlik açısından. Girdi doğrulaması ve çıkış kaçışı çok önemlidir ... SANS her yıl en yaygın hataların bir listesini yayınlar. Arabellek taşmaları, enjeksiyonlar, siteler arası sorunlar (yanlış çıktı kodlaması) ... Bu hataların tümü C veya montajda gerçekten kolaydır. En azından Java gibi bir dilde taşmalara karşı bağışık olmayan bir Dize ve genellikle tek tek hataların kötü amaçlı kodların sistem belleğine erişmesine izin vermesini engelleyen bir özel durum işleme mekanizması vardır. Uluslararası karakter kümelerinin ele alınmasından bahsetmiyorum bile ( mümkünse UTF-8 kullanın ).

Bellek veya bellenim nedenleriyle C'yi kullanmanız gerekiyorsa, yapmanız gereken budur. Sadece dikkatli ol!

Tarayıcı Desteği

Bir web uygulaması yapmanın ilk adımı müşterileriniz tarafından hangi tarayıcıların kullanılacağını keşfetmek . W3Schools ve Wikipedia , genel istatistiklerin iyi kaynaklarıdır, ancak YMMV'dir.

Şu anda çalıştığım yerde şu anda uygulamamızın yalnızca geçerli XHTML 1.0 geçiş HTML'si oluşturduğunu doğrulıyoruz. Ayrıca özgü Doctype kullanabilir ve (ipuçları bkz yazma daha kolay çapraz tarayıcı HTML yapar IE olağandışı Modu, önlemek için gerekli biçimlendirme bloguma ). IE'nin son 3 sürümünü, Windows ve Linux'ta Firefox ve Chrome'u test ediyoruz (Safari, Chrome ile aynı oluşturma motorunu kullanıyor). Bu doğrulama ve testle, uygulamamız BlackBerry hariç hemen hemen her yerde (Windows, Mac, Linux, iPhone, Android vb.) Çalışır.

BlackBerry'nin hiçbir zaman JavaScript içeren gerçek bir tarayıcısı olmadığından desteklemiyoruz. BlackBerry kullanıcıları gerçek bir web tarayıcısına sahip değiller, bu yüzden şikayet etmiyorlar. Belki de bu değişiyor? Birkaç müşteriye hangi tarayıcıları kullandıklarını sormaya çalışır ve bu tarayıcılarla test etmeyi denerim.

özet

Tüm web siteleri HTML ve HTTP üzerine kurulmuştur. Başvurunuzu yaparken bu teknolojiler için iyi bir referansa sahip olun. Bir uygulama yaparken, bir araç setiyle bile, bu teknolojileri çözmek için bu teknolojileri temel bir anlayış gerektiren konularla karşılaşacaksınız.

İyi görünen ve hızlı bir şekilde yanıt veren bir şey yapmak için muhtemelen CSS ve görüntü sıkıştırma ile rahat olmanız gerekir. JavaScript, web sunucuları ve tarayıcılar, nihayetinde ihtiyacınız olacak ek bilgi alanlarıdır.

HTML'nizi sunucu tarafında oluşturursanız, kod tabanınız muhtemelen daha küçük olacaktır ve JavaScript öğrenmeniz gerekmeyebilir. Sunucu tarafı modeli, programcılarınızın istemciye gönderilmeden önce doğrudan bakabilecekleri HTML üreten kod (C?) Yazacakları anlamına gelir. AJAX modeli, programcılarınızın HTML üreten JavaScript yazacakları anlamına gelir. Bir tarayıcıda JavaScript tarafından oluşturulan HTML kodunu doğrulamak ve hatta görüntülemek için birçok aracın farkında değilim, bu da doğru programlamayı zorlaştırıyor.

Şimdi çalıştığım yerde, zaman zaman HTML üreten JavaScript üreten Java kodunu içeren karma bir yaklaşım kullanıyoruz. Web geliştirme konusunda yeniyseniz, burası başlamak için uygun bir yer değildir. Bir AJAX modelini kullanmak için zorlayıcı nedenleriniz olmadıkça, eski sunucu tarafı HTML oluşturma modeliyle başlayacağımı ve bunun ne kadar ilerlediğini göreceğimi söylemeliyim.


"JavaScript tarafından oluşturulan HTML kodunu bir tarayıcıda doğrulamak ve hatta görüntülemek için pek çok aracın farkında değilim" FireBug bunun için (veya Chrome'un web geliştirici araçları gibi başka bir web geliştirici tarayıcı uzantısı).
sleske

13

İkincisi, "arka ucunuzu" genel bir "veri hizmeti" (bağlamınızda ne anlama gelirse) yapma avantajına sahiptir.

HTML istemciniz, bu verilerin olası tüketicilerinden yalnızca biridir. İOS uygulamasını, Andriod uygulamasını, Windows 8 uygulamasını, API'leri vb. Diğer tüketiciler gibi düşünün.


Ayrıca, çift kenarlı bir kılıç olsa da (daha fazla şey API'ya bağlıdır, bu da güncellenmesini zorlaştırır), aynı zamanda bir dizi "web" ve "API'yi korumak yerine sunucu tarafı kodunun birleştirilmesine yardımcı olur. "denetleyiciler ve görünümler. Endişelerin ayrılması FTW.
Shauna

6

Bir web uygulamasının giderek yaygınlaşan bir yolu, bir tarafın ya da diğer tarafın eğilimi olan her ikisinin bir karışımıdır.

İlk yaklaşım daha geleneksel, yıllardır olmuştur ve (c ++ bunun için popüler bir dil genellikle olmasa da) onun iyi belgelenmiş.

İkinci seçenek daha modern ve günümüzde gelişim bloglar ve forumlarda mevcuttur. Bunun nedenlerinden biri, aynı uygulamayı diğer arayüzlere, mobil cihazlara ve hizmetler API'sına sunma ihtiyacının artmasıdır. İkinci yaklaşım eğilimi daha zengin ve daha duyarlı bir müşteri doğru.

Sonuçta, bu takım tanıdıklığı ve iş durumu gibi diğer kısıtlamalara bağlıdır.

Seçeneklerinizi değerlendirmenize yardımcı olabilecek bazı sorular:

  1. Ekibin dil ve platformda deneyimi var mı?
  2. Ekip yeni yaklaşım ve teknolojiler öğrenmek istiyor mu?
  3. Uygulama diğer cihazlar (iPhone, android, windows 8, vb.) İçin daha kolay programlanabilir olmanın avantajlarını kullanıyor mu?
  4. Diğer, dahili veya harici uygulamalar hizmetlerle veya verilerle entegre olacak mı?

5

Bu tür "intranet" uygulamaları için ExtJS4 ile fat-client (JavaScript / HTML5-app + JSON) yaklaşımını kullanıyorum.

Normal "internet" web siteleri için daha "klasik" bir yaklaşım kullanırdım.

İstemciler siteyi yine de işlemek zorundalar, bu yüzden neden tüm süreçle şarj etmiyorlar ve sadece doldurmaları için veri vermiyorlar. Yanıtları (sadece düz JSON veya XML) oluşturmak için sunucu kodunu basitleştiriyor, bu da performansı koruyor. Ayrıca her zaman sunuculardan daha fazla istemci olduğu için, tüm işler istemciler tarafından yapılırsa tüm sistem çok daha iyi ölçeklenir.

İstemci kodu HTTP ile teslim edilir, yine de kullanıcılara herhangi bir belirsiz güncelleme mekanizması olmadan kolayca yeni sürümler gönderebilirsiniz. (Sadece HMTL / JS / CSS'yi değiştirin)

Normal web sitelerinde klasik bir yaklaşım tercih etmemin tek nedeni arama motorlarıdır.

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.