Sunucu tarafı sayfa oluşturma kullanılarak ne gibi avantajlar sağlanır?


19

Bir web uygulaması geliştiriyorum ve şu anda tüm web sitesini html / js / css'de yazdım ve arka uçta bazı RESTFUL hizmetlerini barındıran sunucu uygulamaları var. Tüm sunum mantığı, json nesnelerini alıp javascript aracılığıyla görünümü değiştirerek yapılır.

Uygulama aslında bir arama motorudur, ancak farklı rollere sahip kullanıcı hesapları olacaktır.

Play ve Spring gibi bazı çerçeveleri araştırıyorum. Web geliştirme konusunda oldukça yeniyim, bu yüzden sunucu tarafı sayfa oluşturmanın ne gibi avantajlar sağlayacağını merak ediyordum?

Hız mı? Daha kolay geliştirme ve iş akışı? Mevcut kütüphanelere erişim? Daha? Yukarıdakilerin hepsi?


4
Güvenlik büyüktür. Özellikle uygulama dinamik olduğunda ve bir veritabanı ile iletişim kurması gerektiğinde.
Oded

2
@Oded - Sayfayı API'ye dönüştürürken güvenlik neden daha kolay? Her zaman programlamanız gereken şeyin her iki şekilde de eşdeğer olduğunu düşündüm, ancak bir API yaparken müşteriye güvenmemeyi hatırlamanın psikolojik olarak (en azından benim için) daha kolay olduğunu düşünüyorum. Soruyorum çünkü eğer bir şeye bakmazsam gerçekten bilmek istiyorum.
psr

1
@psr Veri güvenliğinden kullanıcı güvenliği kadar bahsetmiyor olabilir (Örn. MITM istismarları). Sadece bir tahmin.
maple_shaft

1
@psr - Kabul etti. Ancak, sadece dün ... OP JS gömülü bağlantı dizesi olan bir soruyu yanıtladı
Oded

1
@maple_shaft - MITM düşünülecek bir şey, ama yine neden API vs sunucu oluşturulan HTML için bir fark yarattığından emin değilim. Bir API'nin programlamak için daha uygun olduğunu düşünüyorum, bu yüzden marjinal olarak daha kolay bir çatlak olurdu, ama ne demek istediğinden şüphe ediyorum.
psr

Yanıtlar:


16

Sunucu tarafı HTML oluşturma:

  • En hızlı tarayıcı oluşturma
  • Sayfa önbelleklemesi, hızlı ve kirli bir performans artışı olarak mümkündür
  • "Standart" uygulamalar için, birçok kullanıcı arayüzü özelliği önceden oluşturulmuştur
  • Bileşenler genellikle derleme zamanı doğrulamasına tabi olduğundan bazen daha kararlı olarak kabul edilir
  • Arka uç uzmanlığına eğilir
  • Bazen daha hızlı gelişir *

* Kullanıcı arayüzü gereksinimleri çerçeveye iyi uyduğunda.


İstemci tarafı HTML oluşturma:

  • Düşük bant genişliği kullanımı
  • Daha yavaş ilk sayfa oluşturma. Modern masaüstü tarayıcılarında bile fark edilmeyebilir. IE6-7'yi veya birçok mobil tarayıcıyı (mobil webkit kötü değil) desteklemeniz gerekiyorsa, darboğazlarla karşılaşabilirsiniz.
  • API-ilk oluşturmak müşterinin özel bir uygulama, ince istemci, başka bir web hizmeti vb. Olabileceği anlamına gelir.
  • JS uzmanlığına eğilir
  • Bazen daha hızlı gelişir **

** Kullanıcı arayüzü büyük ölçüde özel olduğunda, daha ilginç etkileşimlerle. Ayrıca, tarayıcıda derlenmiş kodları ve sunucu yeniden başlatmalarını beklemekten daha hızlı bir şekilde yorumlanmış kodla kodlama buluyorum .


Ayrıca, bıyık gibi bir ön uç / arka uç şablonlama sistemi kullanarak hafif bir arka uç uygulaması olan hibrit bir modeli de düşünebilirsiniz .


1
Vay, önbellekleme fırsatlarını tamamen unuttum!
Michael K

"Standart" uygulamalar için, birçok kullanıcı arayüzü özelliği önceden oluşturulmuştur "Bu önemsizdir, hem sunucu hem de istemci bunu içerir.
Raynos

@Raynos Müşteri tarafı bir çerçeve kullanarak bahsetmemişti , ama eğer bir çerçeve kullanıyorsa, bu iyi bir nokta.
peteorpeter

1
Teşekkürler, bu çoğunlukla aradığım cevap. Müşteri tarafı çerçeveleriyle çok fazla şey yapmadım, ancak LinkedIn'in seçimine göre dust.js hakkında biraz araştırma yapıyordum. Bıyığın bir alternatif olduğunu biliyorum, ama daha fazla araştıracağım. Muhtemelen bir çeşit melez yapacağım, öncelikle performansı artırabilecek şeyler sunucu tarafına itmek istiyorum. Tekrar teşekkürler.
user1303881

"İstemci tarafı HTML oluşturma" için listelenen hiçbir şeyi bir avantaj olarak görmüyorum. "Bazen daha hızlı gelişmek", kanayan kenarlı tarayıcılardan (IE 8 vb.) Bir kez daha pencereden dışarı uçar.
boş

3

sunucu tarafı HTML oluşturma:

  • hata ayıklaması daha kolay;
  • tarayıcı uyumluluğu ile ilgili hiçbir sorun yok;
  • klasik tam sayfa sunucu tarafı üretimi ile büyük değişmez parçaları olsa bile HTML'yi önbelleğe almak daha zordur; (çözüm, HTML parçalarını AJAX çağrıları yoluyla getirmektir);
  • dinamik HTML için önbellek proxy'lerinden ve CDN'lerden yararlanmamak;

istemci tarafı HTML oluşturma:

  • hata ayıklamak daha zor;
  • eski tarayıcılarla ilgili bazı sorunlar;
  • HTML şablonlarını istemci tarafında önbelleğe almada sorun yok;
  • HTML şablonları ve JS kodu için önbellek proxy'lerinden ve CDN'lerden yararlanma;
  • çok daha düşük ağ kullanımı;

Başarılı mobil siteler için istemci tarafı neslinin yapılış şeklidir, çünkü görünüşe göre modern tarayıcılarda çok daha etkilidir (WebKit tabanlı tarayıcıların mobil pazarın yaklaşık% 70-80'i vardır).

LinkedIn, örnek olarak dust.js'yi kullanarak istemci tarafı yaklaşımının avantajları hakkında bir makaleye sahiptir : "JSP'leri toz içinde bırakmak: LinkedIn'i dust.js istemci tarafı şablonlarına taşımak"


1
+1 Modern akıllı telefonlarda (öncelikle webkit mobil kullanan), JS'nin darboğaz olasılığı düşükken, hücre ağı bant genişliği söz konusudur .
peteorpeter

1

Gereksinimlerinizin ne olduğuna bağlıdır. Çok sayıda küçük göreve bağlı yüksek performanslı, düşük gecikmeli bir çözüme ihtiyacınız varsa, açıkladığınız şeye benzer bir yapıya sahip olabilirsiniz. Java, PHP ve C # 'da en yaygın çözümler buna varsayılan değildir.

Çoğu web uygulaması veritabanlarına çok bağlıdır - çoğu o kadar çok ki sayfalar en az bir çağrı olmadan işlenemez. Açıkçası, birkaç nedenden dolayı veritabanınızı herkese açık olarak göstermek istemezsiniz:

  • (Aynı Güvenlik Oded bahseder) - kesinlikle yok değil alenen ağınızı maruz istiyorum! İdeal olarak, sistemlerinizin dışarıdan tek arayüzü sunucunuza https olmalıdır.
  • Geliştirme kolaylığı - gerçekten, gerçekten , gerçekten Javascript'te SQL yazmak istemiyorsunuz ve web sunumu için tasarlanmış diller RDB'lerle iyi çalışmıyor. Örneğin devlet kavramları yok.

Yani, bir veritabanına ihtiyacınız olduğunda, Java, C #, PHP, vb.Gibi onlarla iyi oynayan dilleri kullanırsınız. ancak JSP ve ASP diğer çok yaygın dillerdir). Dil, diğer modüllere çağrıda bulunan yapılar sağlar. PHP'de bu genellikle sayfada veya MVC kalıbı kullanılarak başka bir PHP dosyasında bulunur. JSP'de komut dosyaları veya JSP İfade Dili kullanırsınız. Bu diğer modüller, DB'ye bağlanma, mantık gerçekleştirme ve görünüm katmanınıza değerler döndürme gibi yoğun bir iş yapabilir. Sonuç, sunucuda oluşturulan ve istemciye gönderilen oluşturulan bir HTML sayfasıdır.

Veritabanınız sayfa oluşturucunuzla aynı ağda olduğunda, daha iyi performans elde edersiniz. İstemcinin yalnızca bir istekte bulunması ve bir sayfa alması gerekir; kullanıcının ihtiyaç duyduğu tüm bilgilere sahip olmadan önce 10-15 DB isteği yapmanız gerekebilir. İstemcinin tümünü yapması gerekiyorsa, ağınızdaki milisaniye gecikme süresi saniyeler ila dakikalar arasında olacaktır.

Sistemler büyüdükçe, endişelerin ve temel yetkinliklerin ayrılması çok önemli hale gelir. HTML görüntüleme için iyidir. Javascript, dinamik içerik için iyidir. SQL bir veritabanını sorgulamak için mükemmeldir ve diğer diller iş mantığında iyidir. Geliştiriciler olarak görevimiz, sürdürülebilir bir sistem oluşturmak için elimizdeki tüm araçları kullanmaktır. Geliştirme kolaylığı, iyi bir sistemin büyük bir parçasıdır. Aklımda, neredeyse performans ve kullanılabilirlik kadar önemli. Büyük sistemler zamanla gelişir. Kötü sistemler başlangıçtan itibaren kötü yazılmıştır ve hiçbir zaman iyileştirilmemiştir.


you can't write SQL in Javascript Gerçekten mi?! Hiç Javascript için StackOverflow sorularına baktınız mı ? Ne yazık ki farklı olmaya yalvarırdım. Verilen istemci kodunda yapabileceğiniz tek kötü şey ama ...
maple_shaft

... Ayrıca Node.JS hakkında unuttum, ama sonra tamamen farklı bir hayvan olan sunucu JS thats.
maple_shaft

Görünüşe göre yapabilirsiniz - TIL! Sadece ... vay, yine de. Yine de dilin kötüye kullanımı hakkında konuşun!
Michael K

2
REST arabirimi, istemcinin veritabanı verilerine json nesneleri aracılığıyla şu anda erişmesidir. Her şeyi ortaya çıkarmaz ve bu uygulama özel bir kurumsal ağın bir parçasıdır. Arayüzlerin bir avantajı, kuruluştaki diğer uygulamaların istedikleri hizmetten yararlanabilmesidir. Bir geliştirme açısından, ön uç geliştiricilerin html / js / css'de istedikleri gibi yapmasına izin verebilirim ve sonra sadece java geliştiricileri tarafından tasarlanan RESTful arabirimini pingleyebilirler. Bununla birlikte, çoğumuz karma bir beceri setine sahibiz ve bu bölünme gerekli olmayabilir.
user1303881

3
-1: @MichaelK: Hayal ettiğiniz bir saman adamıyla tartışıyorsunuz, ancak gerçek hayatla kesinlikle ilgisi yok. RESTful HTTP kullanıyor. Kimsenin JS'de SQL yazmasına gerek yok, RESTful arayüzü bunun için. Ayrıca RESTful, DB sorguları ile 1'e 1 eşleme olduğu anlamına gelmez. Cevabınız 1990'larda geçerli olabilir ama şimdi 2012'deyiz.
vartec

0

Mobil istemciler genellikle güç, bant genişliği ve bellek kısıtlıdır. Muhtemelen sayfaları sunucuda işlemek daha iyidir.

Masaüstü istemcilerde, sayfayı istemcide oluşturmak, dinamik olarak güncellenebilir vb. Yapmak için js + json göndermeyi düşünebilirsiniz.


Ancak pratikte bunun tam tersi genellikle doğrudur. Aslında, jQuery Mobile projesi tamamen istemci tarafı oluşturma fikrine dayanmaktadır.
Sivri

@Pointy: evet, bu tam tersi olabilir. Belirli sayfaların belirli istemcilerde nasıl davrandığını test etmek gerekir. Alternatif için bir bağlantı sağlamak ('mobil' ve 'masaüstü' sürüm bağlantıları gibi) kullanıcı için de yararlı olabilir.
9000

Bugün mobil, düşük bant genişliği veya işlem gücünden çok daha yüksek gecikme ile karakterizedir. Son zamanlarda üzerinde çalıştığım projede, sayfa boyutu ile ilgilendik ve hızı oluşturduk - modern telefonlar oldukça iyi.
Michael K

@ JQuery Mobile projesi, aynı zamanda kullanılmaması gereken büyük bir korkunç kod yığınıdır. Popülerlik! == değer
Raynos

@Raynos Aslında oldukça başarılı olan Jquery Mobile kullanıyoruz. Bilmediğimiz bir şey biliyor musun? ;)
Michael K

0

Sunucu tarafı görüntülemenin büyük bir avantajı erişilebilirliktir - javascript tabanlı uygulamalar hala görmeyen insanlar için büyük bir sorundur. Bu ve "googlebot" adlı bu kör adam, hitap etmek isteyebileceğiniz var. Javascript'i o kadar da iyi yapmıyor.


İyi bir nokta, özel olduğu için bu uygulama SEO gerektirmemesine rağmen, bazı kişisel uygulamalar da geliştiriyorum ve bu arenada bir düşüncedir.
user1303881

Googlebot, JS /
AJAX'ı

@vartec: Bence bu makaledeki anahtar sentance "şimdi AJAX ve JavaScript üzerinden uygulanan bazı dinamik yorumları okuyabilir ve anlayabilir." Benim şüphe bu disqus ve facebook kapsar ama özel ajax kurulum değil.
Wyatt Barnett
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.