İlerici Geliştirme - Tek Sayfa Uygulamaları


33

Boston'daki An Event Apart adlı bir konferanstan yeni döndüm .

Konuşmacılar arasında gerçekten popüler bir tema, aşamalı geliştirme fikriydi - bir sitenin içeriği HTML'ye girmeli ve JavaScript yalnızca davranışı geliştirmek için kullanılmalıdır.

Konuşmacıların ilerici gelişme için verdiği argümanlar çok ilgi çekici idi. Yalnızca eski tarayıcıları ve düşük bant genişliğine sahip bir ağdaki aygıtları desteklemek için sağlam bir kalıp değildir, ancak HTML JavaScript'ten daha zarif bir şekilde başarısız olur (ör. Desteklenmeyen biçimlendirme yalnızca göz ardı edilirken; komut dosyası - sen hortumun).

Jeremy Keith bu konuda özellikle anlayışlı bir konuşma yaptı.

Ama Omurga ve Açısal gibi tek sayfa web uygulamaları hakkında ne? Bu çerçevelerin ardındaki tasarım, geliştiriciyi HTML'den içerik taşımak ve bir JSON API'si gibi bir şeye taşımak gibi görünüyor.

Bu iki tasarım desenini jelleştiremiyorum: aşamalı geliştirme ve tek sayfa web uygulamaları. Birinin diğerinden daha iyi olduğu durumlar var mı? Yoksa bunlar rakip teknolojiler bile değiller ve burada zihinsel modelimle bir şeyleri özlüyorum?


İki farklı kullanım durumu var. Evet, sunucu ağır kaldırma yaparken üst üste binme var.
BobDalgleish

5
Tek Sayfalı Uygulamalar için tarayıcı gereksinimlerinin, "sıradan" web uygulamaları için olanlardan daha katı olduğunu söylemenin adil olduğunu düşünüyorum.
Robert Harvey,

3
Jeremy Keith'ten size,% 1-10 toplam internet insanını memnun etme zorunluluğuna gerçekten değer veren ve kullanıcının diğer% 90'ının verilerini sorduğu gerçek bir dünya örneği vermesini isteyin. IE 5.0 ile veya javascript olmadan web sitesini ziyaret edebilirlerse
kirie

1
JS / images / etc işlevini devre dışı bırakan kişilerin türü temel hedef demografik verilerinizde yer almıyorsa, Progressive Enhancement'ı sürdürmek için geçerli bir ticari neden yoktur.
Graham

1
'Düşük bant genişliğine sahip bir ağdaki cihazlar' desteği aslında SPA'ya karşı değil, tartışıyor! SPA'da yalnızca bir büyük talepte bulunursunuz; JS olmadan her seferinde yanınızda olur!
Dmitri Zaitsev

Yanıtlar:


21

Bana öyle geliyor ki, tek sayfalık uygulamalar ilerici gelişme kumunda bir çizgi çekiyor. Uygulamaların ve özelliklerin onlarca yıldan beri devam eden tarayıcılar arasında farklılık gösterdiği gerçeği üzerinde çalışmaya başlayabilmemizden önce, SPA'lar belirli bir sitenin ziyaretçilerinin bir araya geleceği konusunda makul bir şekilde hemfikir olabileceğimize dair kesin bir temel olduğunu varsayar. İkisinin de tuhaf olduğunu sanmıyorum. SPA başladıktan sonra, bir <video>etiketle başlamak gibi , sonra da kendi zengin özellikli oynatıcınızı üzerine koymak gibi, aşamalı olarak gelişmeye devam edebilirsiniz .

O zaman komut dosyası devre dışı bırakılmış ziyaretçiler var, ancak nelere girdiklerini biliyorlar. Geliştiricilerin, bu ziyaretçiler için neden "Bu site için komut dosyası kullanmanız gerekiyor" notu dışında geriye doğru eğilmeleri gerektiğini anlamıyorum. Buna izin verirsek, neden CSS'yi devre dışı bırakan ziyaretçilere hitap etmiyorsunuz? Resimler nasıl devre dışı bırakılır? Bunlar çekirdek web teknolojileridir. Parça seçip seçerken tamamen işlevsel bir web deneyimine sahip olmayı beklememeliler.

Bir araba benzetmesi olmadan kaçmamamı sağlamak için, bazı özellikleri sevmediğime karar verirsem arabamın çalışmasını beklememeliydim. İnşaat mühendislerine şunu söyleyebilirim: "Farlarımı devre dışı bıraktım, lütfen ziyaret edebileceğim her yere her 125 fitte sokak lambaları taktığınızdan emin olun." Farlar olmadan arabam çok fazla çalışırdı, ama bazı yerleri ziyaret edemeyeceğim.


3
I don't see why developers should bend over backwards for those visitors. Sözleşmeniz, web sitenizin erişilebilir bir sürümünü sunmanız gerektiğini belirtirse, bir SPA kullanmak daha zor olabilir. Ayrıca SEO ne olacak?
Simon Bergot

7
@Simon: Bir SPA'yı da erişilebilir duruma getirebilirsiniz (bkz. Örneğin stackoverflow.com/questions/15318661/… ). Aynı şekilde SEO için de (SEO uygulamaya bağlı olacaksa önemlidir).
24'te sleske

2
Analojilerinizden bazıları bir parça saman adamdır. Javascript'i devre dışı bırakmak bir güvenlik amacına sahiptir; Bir bakıma far eklemek, onu daha az güvenli hale getirdiğini iddia etmek zor olurdu.
Robert Harvey

1
Doğru, komut dosyası devre dışı bırakmanın güvenlik yararları vardır. Ancak çoğu ziyaretçi için bu seçimi yaparak sağladığı ek güvenlik buna değmez. Komut dosyası olmadan, Facebook çalışmayı reddediyor, LinkedIn sonları, Pinterest sonları, Instagram boş bir sayfa vb. Yüklüyor. Büyük oyuncular gerektiriyorsa SPA'nız da alabilir.
Collin Allen

Yalnızca FB ve LinkedIn'i tanımakla, bu sitelerin JS olmadan kırılması için, kabul edilebilir bir şekilde işleyen bir web sitesi yapma (veya kullanıcıları daha az güvenli tarama uygulamalarını kabul etmelerine zorlama) denemek istemediklerinden, geliştirmeden yerleştirmek için iyi bir neden yoktur. alt satırlarına fayda sağlayabilir). Plunker gibi tam kapsamlı web uygulamaları olsaydı, bir noktaya sahip olabilirsiniz, ancak çoğu "web uygulamaları", bir tür çerçeve üzerine kurulu oldukları anlamında sadece "uygulamalar" dır. Kullanım açısından, onlar sadece eskisinden daha fazla çan ve ıslık ile web siteleridir.
Muhalif Öfke

6

Klasik istek / yanıt sayfaları modeline uymayan bir uygulama oluşturuyorsanız, SPA en faydalı olanıdır. Düzenli web sitelerinin web'in istek / cevap döngüsüne tam olarak uysalar bile bir SPA olarak yazıldığı son bir eğilim var, IMHO yaptıkları aptalca çabalar. Bu web sitelerinin beğendiği şey bir web tarayıcısını çok daha fazla hata ve daha az özellik içeren bir web tarayıcısına yeniden yerleştirmektir.

Progresif geliştirme ve SPA fikri, bu aptal tek sayfalık uygulama web siteleri için karşılıklı olarak dışlanamaz. Bazı içerik görüşmeleri yapmak için javascript'e ihtiyacınız var (örneğin, üstbilgiyi kabul et), böylece SPA’daki Javascript’in önceden oluşturulmuş HTML sayfaları yerine kendilerini oluşturabilecekleri JSON kaynaklarını alıyorlar. Bu tür web sitesi SPA'larıyla ilgili sorunlar açıktır, web sitesinin hem sunucuda hem de istemcideki oluşturma işleminin yinelenen uygulamasına sahip olmanız gerekir.

Gerçek web uygulamaları için, yani standart istek / cevap modeline uymadıkları için gerçekten bir SPA olması gereken; ilerici geliştirme gerçek uygulamalar için çok daha zordur, çünkü gerçekten taşınabilir bir uygulama yazmak için bir teknoloji platformu olarak bir tarayıcı kullanıyorlar. Komut dosyası dili, yalnızca geliştirmeler için isteğe bağlı olarak cıvatalanabilen bir dil değil, gerçek bir web uygulamasının önemli bir parçasıdır. Bazı ilerici geliştirme teknikleri yine de çalışabilir (örneğin flash video / audio <video>/ <audio>tag ile değiştirilir ) ancak gerçek web uygulamaları temel olarak javascript gerektirecektir.


+1, ancak "gerçekten" bir şeyin SPA gerektirip gerektirmediğine karar vermek her zaman kolay değildir. Örneğin, çoğunlukla veri girişi olan ve çok çeşitli karmaşıklıklara sahip iş uygulamaları. Formların çoğu basitse, bir SPA "gerçekten" gerekli değildir, bu yüzden hala SPA ile SPA olmayan çözümler arasında gerginlik vardır.
sinelaw

sinelaw: Çoğu iş başvurusu genellikle bir SPA olmamalıdır. Bazı istisnalar var, örneğin, Elektronik Tablo, Kelime İşlemcisi, ancak bunlar garip olanlar. SPA'ya ihtiyacınız olan göstergeler: Verileri sunucudan istemciye, yalnızca bir veya iki bildirim için değil, uygulamanın önemli bir öğesi olarak, örneğin oyun, stok takibi, sohbet uygulaması; Uygulamanızın mantıklı bir "Sayfa" kavramı yoksa "Sayfa" kavramı uygulamada tamamen çarpıtılmışsa, örneğin Office uygulamaları. Formlar üzerinde daha iyi çalışan iş uygulamaları, SPA dışı olarak kalmaktadır.
Lie Ryan,

Anlaşmak. Bir SPA için bir başka gösterge: Eğer bir SPA geliştirmek "klasik" bir web sitesi geliştirmekten daha ucuzsa. İşletmeler belirli bir hedef kitleyi hedefleyen uygulamalar bazen "modern bir tarayıcı kullanma" gibi gereksinimler getirebilir, böylece ilerici geliştirmeler çok az fayda sağlar.
sinelaw

@sinelaw: Bir SPA oluşturmak, çok sayfalı siteler geliştirmekten neredeyse hiçbir zaman ucuz değildir; özellikle de daha eski tarayıcıları sağlamıyorsanız.
Lie Ryan,

Ekibiniz sunucu merkezli projelerde geçmişi az olan SPA uzmanlarından oluşuyorsa, daha ucuz olacaktır.
sinelaw

2

Tek sayfalık web uygulamalarının ve aşamalı geliştirmenin neredeyse rakip olduklarına inanıyorum. Eğer html müşteride bir json api'den elde edilen verilerden hesaplanırsa, incelikle zorlukla bozulabilir. Ancak daha zengin ve daha hoş bir kullanıcı arayüzü sunabilir.

Uygulamanızı tarayacak ve statik bir sürüm kaydedecek bir bot oluşturabilirsiniz. Bu teknik, javascript olmadan tarayıcılara HTML sunmak için kullanılabilir (kör kişiler veya arama motoru botları tarafından kullanılır). Bu bir yatırım, bu yüzden gerçekten sizin isteklerinize göre geliyor.

Belirli bir şirket için İK yönetimi web uygulaması yapıyor musunuz? Zarif bir bozulmaya ihtiyacınız yoktur ve bir SPA'nın oluşturulması daha kolay olabilir. Şirket belirli bir tarayıcı kullanımını zorlayabilir, bu nedenle daha az test yapmanız gerekebilir.

Erişilebilirlik gereklilikleri ve arama motoru görünürlüğü gereksinimleri olan bir dernek için halka açık bir web sitesi mi yapıyorsunuz? Ardından HTML'yi sunucunuzda oluşturmayı düşünün. Veya bütçenize bağlı olarak, statik bir sürümü olan bir SPA yapmak.


1

Bence Progressive Enhancement ile ne kadar ileri gitmek istediğine bağlı - zor ve hızlı bir kurallar dizisinden ziyade bir tasarım paradigması.

Bir SPA çerçevesi kullanıyorsanız, Javascript'e izin vermenin bir verildiğini düşünüyorum. Ancak, sayfanızı geliştirmek için yazdığınız Javascript, çerçevenin oluşturabileceği her türlü HTML ile başa çıkmak için yeterince akıllı olmalıdır.

Ayrıca, yeni bir tarayıcı sürümü için en son CSS özelliklerinden yararlanmak veya HTML5'ten HTML4'e düşürmek gibi diğer PE tekniklerinden de yararlanabilirsiniz.


1
İlerici geliştirmenin bir kısmı, temel içeriğin javascript olmadan erişilebilir olması gerektiğidir. Javascript olmadan bir SPA nasıl yazacağımdan emin değilim.
Alan Shutko

@AlanShutko Belki iframes ile. Birden çok sayfa, ancak teknik olarak URL değişmiyor ...;)
Izkata

1
Evet, HTML 4 ile HTML 4 ve tarayıcıya özgü CSS gibi şeyler hakkında daha fazla düşündüm (örneğin, yalnızca Chrome'un en son sürümünde bulunan ancak daha yeni özelliklere sahip olan, çok yeni uygulanan bir özelliği kullanmak isteyebilirsiniz). eski tarayıcılarda ilkel denetim). Javascript olmadan yapmak bir SPA'da zor olabilir, ancak bu ilerici gelişme kavramının sadece bir kısmıdır.
philicomus

Aşamalı Geliştirme, köşeleri yuvarlamak için mevcut olduğunda css3 kullanmak kadar basit olabilir. Temel fikir JavaScript ile ilgisi yoktur.
Daniel Little

1

Aşamalı geliştirme ve bir Tek Sayfa Uygulaması birlikte bulunabilir. Bu şekilde uygulama oluşturmak için duyduğum en çekici iki argüman:

  • Hata toleransıHTML dosyasının tamamen indirildiği, ancak başvurulan komut dosyalarının indirilemediği ve indiği ağ bağlantısı sayesinde tamamen indirilemeyen durumlarda (mobil ağlarda mümkün)
  • İlk sayfa yüklenmesinde algılanan performansı artırma potansiyeli (Render Başlat zamanlarını azaltarak)

Sunucu tarafı oluşturma (yalnızca SEO nedenleriyle değil kullanıcılar için) ve hardalı kesme, modern istemci tarafı JS çerçevelerine sahip, aşamalı olarak geliştirilmiş Tek Sayfa Uygulamaları oluşturmanıza yardımcı olabilecek iki tekniktir.

Bazı istemci tarafı JS çerçeveleri, sunucu tarafı oluşturma ile çalışmaktan daha kolaydır ( bazı sunucu tarafı oluşturma çözümlerine dikkat edin ve çerçeve kombinasyonları, sunucu tarafından oluşturulan sayfa yalnızca arama motoru tüketimi için tasarlandığından, çalışan SPA'lar üretmez. -kullanıcılar )

Yazma zamanında, React.js ve Ember (yaklaşan FastBoot ile birlikte) bunun farkında olduğum ya da sunucu tarafında işlemeyi birinci sınıf bir vatandaş haline getirmeye çalıştığı ikisi; Sunucu tarafında oluşturulan sayfa, istemci tarayıcısında ayrıştırıldığında hala çalışan bir SPA'dır.


0

Düşen sayfa yükünün muhtemelen sunucular ve ağ için oldukça iyi olduğu görüşündeyim. Daha fazla SPA’ların doğru kullanıldığını görmek isterim.

Görünüşe göre bu iki şey gerektirir:

1) tüm bağlantılarınızı ilk yükte standart istek / yanıt bağlantısı olarak ayarlayarak, tarayıcı yüklendiğinde ve JS motoru SPA desteğinin kullanılabilir olduğunu belirlediğinde SPA çerçevenizin / kütüphanenizin bunları güncellenmiş (etkileşimli) bir sürümle değiştirmesine izin verin. Bu gerçekten ilerleyici bir gelişmedir; JS, mevcut html web sitesinin üstüne yüklenmiştir ve bu, arama motorları, yardımcı teknolojiler ve daha eski tarayıcılar için daha iyidir.

ve

2) Sunucunun doğru formatı kullanarak / foo / bar / json ve foo / bar gibi rotalara duyarlı olması gerekir; gerçekçi olarak, ilk sayfayı almak için her şeyi mizanpajlara ve kısmalara sardıysanız, 2. ve sonraki sayfalar için de her şeyi mizanpaj ve kısayollar aracılığıyla elde edebilmeniz gerekir.

Burada oldukça fazla iş var; kuşkusuz, ancak yığının tamamı üzerinde kontrolünüz varsa, iki teknolojiyi dengeler.

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.