Web geliştirmede müşteri tarafına koşun


10

Son birkaç aydır, web geliştirmede istemci tarafı komut dosyası yazma konusunda büyük bir heyecan duydum. Ancak sunucu tarafındaki teknolojiler olgun, istikrarlı ve arka uç geliştiriciler tarafından iyi kabul edilirken, istemci tarafındaki teknolojiler olgunlaşmamış (yani büyük sunucu tarafı çerçevesine kıyasla) ve uzun süredir yerleşik birçok geliştirici tarafından beğenilmemektedir. Yine de bugünlerde herkes müşteri tarafında gelişme yapıyor. Şahsen bu büyük sunucu tarafı çerçevelerin mevcut eğilimi izleyerek 2-5 yıl içinde kaybolmasını bekliyorum.

Neden böyle? HTML5 / JS'de geliştirilen yeni ve "yaygın" istemci tarafı, büyük ve iyi düşünülmüş sunucu tarafı çözümlerinden nasıl daha üstün olabilir?


4
Varsayımlarınızı doğrulamak için herhangi bir kaynağınız var mı? Javascript neredeyse internetin kendisi kadar eskidir ve sunucu tarafı programlamanın yakında herhangi bir yere gideceğini görmüyorum.
tdammers

1
Açıklığa kavuşturmak için, varsayımlarım ön uçla sınırlıdır. UI mantığında, oluşturmada ve benzeri şeylerde istemci tarafına doğru bir geçiş görüyorum. Tabii ki sunucu tarafı asla gitmeyecek, ancak REST-api'ye (veya bu konudaki SOAP'a) indirgenmeyecektir.
Bruno Schäpper

3
Bu değişim gelir ve gider. Yeni harika teknolojiler (Shockwave, Flash, JavaFX, Flex) veya büyük yeni js çerçeveleri "dünyayı ele geçirmeye" (motorlar, jquery, vb.) Bir kez tanıtıldığında genellikle ön uç geliştirme daha popüler hale gelir
Andrzej Bobak

1
@VainFellowman: İstemci tarafı komut dosyasında gerçekten SOAP kullanmak istemiyorsunuz. Çok fazla ek yük var, ayrıştırmak bir acıdır ve çok fazla kazanamazsınız çünkü dinamik yazma disipline sahip Javascript, SOAP'ın tür bilgilerini zaten fazla kullanamaz.
tdammers

1
@tdammers İstemiyorum, gerçekten istemiyorum. HTTP üzerinden SOAP kullanımında herhangi bir nokta görmüyorum. REST hemen hemen her şey için uygundur.
Bruno Schäpper

Yanıtlar:


7

Bu doğru:

Web geliştirmede müşteri tarafına koşun

Ancak istemci tarafı ile sınırlı değildir, tam bir yığın hareketidir.

Bunun şaşırtıcı olabileceğini biliyorum. Lütfen, beni dinle.

Neden böyle? HTML5 / JS'de geliştirilen yeni ve "yaygın" istemci tarafı, büyük ve iyi düşünülmüş sunucu tarafı çözümlerinden nasıl daha üstün olabilir?

Her şeyden önce, her ikisi de iyi düşünülmüş.

İkincisi, çünkü daha iyi.

İyi soru.

Fakat "daha iyi" özneldir, bu yüzden sorunuzun cevabı, daha iyi olan nedir?

Soruyu tekrar ziyaret edin:

HTML5 / JS'de istemci tarafı geliştirmenin "yaygın" olması, büyük sunucu tarafı çözümlerinden nasıl daha üstün olabilir?

Because small is nimble.
And big is clunky.

Esneklik.

Büyük bir anlaşma gibi görünmüyor. Yapar? Esneklik.

Ancak, esneklik her şeyin altındadır. Esneklikte bir gelişme - her şeyi geliştirir.

İdame. Genişletilebilirlik. Ölçeklenebilirlik. Modülerlik. Kullanılabilirlik. UX.

Ve uygulanması daha hızlıdır. Gerçek bu. Daha Hızlı ve Daha İyi.

This is why Windows 8 made JS a first-class citizen.

HTML5 - JS, bir heves değil ve gitmeyecek. Sadece tabletlere bilgi işlem içeriği ve etkileşim davranışı sağlamak için büyüyecek bir teknolojinin tohumlarını görüyoruz. Tabletler.

Akıllı telefonlar, 1950'lerde TV'den bu yana en hızlı kitle iletişim aracı benimsendi. Artık sadece akıllı telefonlarımız değil, Tabletlerimiz de var.

Mozilla ve Windows işletim sistemlerinde halihazırda piyasalarında gelecekteki cihazlarda çalışacak işletim sistemi -> HTML / JS.

Birçok çözüm ve yenilik devam etmektedir.

Esnekliğe dayalı olarak eksiksiz bir JS yığını ortaya çıkıyor.

Umarım bu yardımcı olur.


1
Mükemmel cevap! Ancak sunucu tarafı çerçeveleri aynı faydaları vaat ediyor, değil mi?
Bruno Schäpper

1
Evet efendim, sunucu tarafı çerçeveleri de aynı avantajları vaat ediyor, evet. Bilinmesi gereken, gelişmekte olan teknolojide beklenmedik bir şekilde bulunan ek faydaların olmasıdır. İyodaki en düşük düzeydedir (c). Konular bekler. JS'de bir geri arama vardır. Beklemiyor. Dolayısıyla en düşük seviyede bir io optimizasyonu var. Bu farkındalık artık sessizce Microsoft tarafından büyük ölçüde benimsenmiştir. Bu yüzden işletim sistemleri JS'dir. Son nokta, bu her seviyede optimizasyon ve meta optimizasyon sağlar. Çünkü dil esnektir. Basit görünmez bir şey. Bilinmeyen. Umarım yardımcı olur.
Jack Stone

1
Bu cevabı kabul etmeyi seçtim, çünkü en eksiksiz cevap bu. Diğerlerinin iyi puanları var, ama bu en kesin. Herkese teşekkürler!
Bruno Schäpper

9

Bu hikayenin her zaman iki yanı vardı; hem sunucu tarafı hem de istemci tarafı kodunun artıları ve eksileri vardır.

İstemci tarafı komut dosyası oluşturmanın avantajları şunlardır:

  • Daha duyarlı hale getirilebilir, sunucu gidiş-dönüşleri olmadan kapsamlı değişiklikler yapmak mümkündür.
  • Kod istemcide çalışır ve sunucudaki kaynak kullanımını azaltır.
  • Mantık ve sunum arasındaki ayrım fiziksel hale gelir.
  • Bazen, özellikle istek başına kimlik doğrulama kullanılıyorsa, yük dengelemesi daha kolay olur.

Ancak sunucu tarafı komut dosyasının da birçok avantajı vardır:

  • Kodun çalıştığı makineyi siz kontrol edersiniz.
  • Hemen hemen her şey mümkündür - eğer sunucunuz yapabilirse, betiğiniz de yapabilir.
  • Kullanıcılar çalıştırmadan önce komut dosyanızı değiştiremez.
  • Kullanıcılar, komut dosyanızın çalışmasını önlemek için komut dosyası engelleyicileri kullanamaz.
  • Kullanıcılar betiğinizin ne yaptığını göremez, yalnızca çıktıyı gözlemleyebilir.
  • Kod, ekran okuyucular, metinsel web tarayıcıları, arama motoru örümcekleri, kazıyıcılar, akümülatörler, IRC botları, süper düşük uçlu makineler, komut dosyası bloke tarayıcılar dahil olmak üzere hayal edebileceğiniz her müşteriyle güvenilir bir şekilde çalışacaktır.
  • Kullanıcı eklentilerinin kırılma olasılığı daha düşüktür.

Son derece dinamik web uygulamaları için, müşteri odaklı yaklaşım her zaman popüler bir seçim olmuştur, çünkü masaüstü gibi iyi bir kullanıcı deneyimi sunmanın tek yolu budur: istemci tarafı komut dosyası olmadan, kullanıcının eylemlerinin her biri bir yuvarlak açma, yani en az yarım saniye gecikme, tipik olarak daha fazla demektir. Ancak, temel olarak bir veritabanından sunulan (örneğin, wikipedia) bir dizi statik sayfa olan bir bilgi sitesi için, avantaj marjinaldir, ancak sunucu tarafı komut dosyasının faydaları hala çok fazladır.

Gözlemlenen hype, son iki gelişmenin bir kombinasyonundan geliyor:

  1. HTML5 ve ilgili teknolojilerin koronaları. Çok uzun sürdü, ama nihayet, bu dinamik masaüstü benzeri web uygulamalarını kesmek için gereken her şeyi içeren bir standarda sahibiz ve bunları doğru şekilde uygulayan ana tarayıcılar.
  2. Mevcut işlem gücü. Günümüzün emtia masaüstü bilgisayarları giriş seviyesi bir web sunucusu kadar güçlüdür, müşteri sınıfı cep telefonları neredeyse 2005'in masaüstü bilgisayarlarıdır ve modern javascript uygulamaları performans dengesini eğecek kadar verimlidir: şimdiye kadar istemci tarafı kaynakları sunucudan daha ucuzdur kaynaklar.

Aslında, sunucu merkezli ve istemci merkezli yaklaşımların iyi olduğu yönünden hiçbir şey değişmedi; değişen şey, müşteri merkezli artık birkaç yıl öncesine göre daha kolay ve daha ucuz ve daha iyi performans göstermesi ve eskisinden çok daha fazla uygulama için uygulanabilir bir seçim haline gelmesidir.


zor gerçekler ... +1.
Jack Stone

8

Sunucu tarafı her zaman yanınızda olacaktır. Her şey için müşteri tarafında oturamazsınız. Örneğin, mikroişlemciniz için üretim zemini tavan vincinden gerçek zamanlı olarak parametreler gönderen bir Backbone.js MVC tasarımı kullanmak istemezsiniz.

Yutturmacaya inanma.


Bana söyle. JS, Windows 8'de mi? -1. İlk noktaya katılıyorum, ama yutturmacadaki ikinci noktanızın açıklığa ihtiyacı var.
Jack Stone

JS, istemci tarafı için özel değildir ve bir süredir kullanılmamaktadır.
Erik Reppen

@ClintNash ya, aslında. Ms j platformları için potansiyel geliştirici sayısını artırmak için win8 uygulamaları oluşturmak için etkinleştirdi. Bu teknolojileri masaüstü teknolojileri üzerinden öğrenmeyi seçen insanlara bir yanıt. Ancak zaten c # / wpf'yi bilen bir devir olarak, html / js ile bir win8 uygulaması oluşturmak için hiçbir neden göremiyorum.
Andy

@ErikReppen bu doğrudur, ancak js yalnız sunucuda kesmez, inşa etmek için bir çerçeveye ihtiyacınız var. Açıkçası sunucuda komut dosyası kullanma arzusu beni şaşırtıyor. Bunu zaten yaptık, klasik ASP'ydi ve bu deneyimi tekrar etme arzum yok.
Andy

@Andy Klasik ASP'de (özellikle web formları), kesinlikle oraya tekrar gitmek istemediğimiz bu araçlarla alıştırma yapma talihsizliğine sahip herhangi bir JS dev ile anlaşmanın sonu yoktur. Ancak bu, son on yılın en az hatırlanan etiket tabanlı sunucu tarafı komut dosyası oluşturma aracı ve muhtemelen herhangi bir popülerlik düzeyini gören en şiddetli umutsuz ince istemci çözümü. Bunu sunucu tarafındaki Python ve şimdi JS gibi bir şeyle karşılaştırmak, insanlara bir at almasını söylemekle sınırlanıyor.
Erik Reppen

6

2009 yılında sunucu tarafı PHP çerçevesinden sunucu tarafı web servislerine bağlı bir istemci tarafı ExtJS çözümüne geçtim.

Göçün benim için nedenleri:

  1. Sunucudaki uç nokta ve kod miktarını azaltarak daha iyi güvenlik.
    Web servislerine geçerek web servis sınırındaki girişi doğrular ve sunucunuzun I / O üzerinde daha kesin bir kontrole sahip olursunuz. Güvenlik mimarinizi karıştırmak için sunucu tarafı UI katmanı yoktur.
  2. Daha az sunucu gidiş dönüşü nedeniyle gelişmiş performans
    Mimari, veri getirme işlemlerinin daha az gerçekleşebilmesi ve hiçbir gidiş dönüş gerektirmeyen UI oluşturma işlemiyle verilerin yerel olarak önbelleğe alınabilmesi için değişir. Gidiş dönüşleri, web uygulaması performansını öldüren şeydir.
  3. Kullanıcı arabiriminin önbelleğe alınabilmesi nedeniyle gelişmiş performans Kullanıcı
    arabirimi katmanı tamamen bir CDN üzerinde barındırılabilir. UI kodunu HTML5 uygulama önbelleğine koyarak çevrimdışı web uygulamaları bile oluşturdum.
  4. Daha yüksek kullanıcı arayüzü (zengin istemci tarafı kontrolleri)
  5. 3. taraf geliştiriciler, kendi ön ucumun kullandığı API'yı kullanabilir ve özellikleri paylaşmaları durumunda API'ları modüller arasında kolayca yeniden kullanabilirim.
    Bu, daha az gelişme, KG, dokümantasyon, ...
  6. JavaScript'te PHP, Python veya Java'dan daha iyi programlamayı seviyorum

Ancak, hiç kuşkunuz olmasın, şimdi olan şey bir hype. Havaya uçacak ve birçok web uygulaması tekrar sunucu tarafı UI mimarisini kullanacak.


Ne, hype? -1 Windows 8 JS'yi birinci sınıf bir vatandaş yaptığında iyi şanslar. Evet, node.js ile yazılmış sunucu tarafı UI mimarisi belki. Bunu öğrenmeliyiz çünkü engellemiyor.
Jack Stone

Yakın zamanda kalın müşteri çözümlerine geri döneceğimizi sanmıyorum. Ancak, fab öncesi web kullanıcı arayüzünü (yani orijinal plandan bağımsız olarak tüm sorunları) ortaya çıkarmaktan daha karmaşık hale gelen herhangi bir sorun için ExtJS ile üzüldüysem, alternatifin neden idealden daha az görünebileceğini görebiliyordum.
Erik Reppen

6

İstemci tarafı çözümleri için heves uyandıran bir başka faktör de mobil uygulamaların büyümesidir. Yoğun bir şekilde istemci tarafı JavaScript ve AJAX tabanlı bir web sitesi yaparsanız ve ayrıca yerel iOS ve Android uygulamaları oluşturursanız, üçünün de aynı REST hizmetlerini tüm verilerini yapmak ve froing yapmak için kullanma şansı vardır. .


Peki dedi ... +1.
Jack Stone

Gerçekten çok iyi bir nokta.
Bruno Schäpper

4

Her şeyden önce, kullanıcı sunucunun ne olduğunu görmez (hatta bazen umursamaz). Sunucu tarafı kodu ne kadar iyi yazılmış olursa olsun, istemci kısmı iyi bir şekilde yapılmazsa kullanıcılar uygulamayı takdir etmez. Bazen güzel kullanıcı arayüzü bile işlevsellikten daha önemlidir.

Büyük ve güçlü bir sunucu barındırma oldukça pahalıdır. İstemci tarafında mantığın bir kısmını (doğrulama hariç) uygulamak çok daha ucuzdur. Böylece daha küçük (bu nedenle, daha ucuz) bir sunucu barındırma kullanabilirsiniz, çünkü o kadar yüklenmez.

Bu, istikrarsızlığa rağmen, müşteri tarafı teknolojilerin daha popüler hale gelmesinin nedenidir. Ayrıca, JS ve HTML / CSS (neredeyse) tüm modern tarayıcılar tarafından desteklenmektedir.

Bu iki uygulama bölümü ayrı ayrı var olamaz. Ve internet yakın gelecekte hiçbir yere gitmiyor gibi görünüyor.
Bunun big server-side frameworksda ortadan kalkacağını düşünmüyorum . Her zaman bunları karşılayabilecek şirketler olacak ve önemli avantajlarını kullanacaklar.


4

İstemci tarafı web geliştirme, web tarayıcıları ve zaman içinde bu tarayıcılardaki değişikliklerle güçlü bir şekilde bağlantılıdır. Şimdi sağladığınız çözüm, web tarayıcılarının sayfa oluşturma motorlarındaki önemli değişiklikler nedeniyle birkaç ay içinde çalışmayabilir. Bazı tarayıcılar standartlarla uyumsuz / uyumluydu ve bu nedenle sadece beklenen sonucu elde etmek için geliştiricilerin daha fazla çaba göstermesi gerekiyordu.

Bu sorunu çözmeye çalışan bazı çözümler var. Örneğin, jquery kullanıyorsanız, komut dosyanızın bu belirli jquery kitaplığı tarafından desteklenen tarayıcılarda çalışacağından emin olabilirsiniz. Ancak bazı tarayıcılarla / çoğu / tüm tarayıcılarla uyumluluk sağlamak yalnızca yazarlarına bağlıdır. Soru, hangi takımın sizi daha iyi destekleyeceğidir. Motor takımı mı, jquery takımı mı, diğer takım mı olacak? Belirli bir web tarayıcısına destek sağlamazlarsa, projeniz o tarayıcıda çalışmayabilir.

Göründüğünüz heyecan uzun zamandır var. Shockwave ve halefi Flash tanıtıldığında gördüm, karmaşık js kütüphaneleri önce motorlarla, sonra jquery ile birlikte gönderildikten sonra zengin kullanıcı arayüzlerinin "büyük bir dönüşü" vardı (bunları bu sırayla kullanmaya başladım). Flex ve JavaFX vardı. Ancak bunların hiçbiri pazarda büyük bir pay alamaz. Bazıları zaman zaman son kullanıcıyı güvenlik açıklarına maruz bırakan eklentiler gerektirir, diğerleri bazı özel ayarlar nedeniyle istemci tarafında çalışmayabilir (örneğin, istemcilerin tarayıcısında JavaScript devre dışı bırakılmış olabilir).

Diğer tarafta, sunucu tarafı çözümü genellikle yalnızca bir kez yazılır. Yeni Firefox / Chrome / IE / Opera gönderildikten sonra her şeyin başarısız olacağından ve yeniden yazılması gerekeceğinden endişelenmenize gerek yok. Ayrıca, istemcinin uygulamanızı kurcalamaya ve / veya verileri bozmaya çalışacağından endişelenmenize gerek yoktur.


1
Bu saf hayal gücü değil mi? İstemciler değiştiğinde, bir noktada HTML / JS / CSS oluşturmayacağınız için muhtemelen sunucu tarafı öğelerinizi değiştirmeniz gerekecektir.
Bruno Schäpper

1
Bir şey daha, 'İstemci tarafı web geliştirme web tarayıcıları ile güçlü bir şekilde birleştirilmiştir' - Web teknolojileri resmi standartlardır, buna bağlı kaldığınız sürece uygulamanızı bir tarayıcıya bağlamayacak bir standart uygularsınız. Çok uzun zaman önce bu gerçekten doğru olmasa da, şu anda öyle görünüyor.
Bruno Schäpper

Her şeyden önce bazı tarayıcıların standartları nasıl takip etmediğini okuyun (örneğin Internet Explorer). SOme şeyler zamanla değişti, ancak IE7 ile bile yazdıklarımı yorumlamanın kendi yolu nedeniyle korkunç problemler yaşadım. Ayrıca, tarayıcılar arası uyumluluklarla ilgili birkaç makaleyi okuyun. Her web tarayıcısı satıcısı standartları takip ederse, bu sorun oluşmaz. İkincisi, veri kümesi değişirse, iş mantığınızı değiştirmeniz gerekir, bu açıktır.Ama yeni IE sevk edildiğinde ve kodun yeni tarayıcıda çalışmasını sağlamak için kodun yaklaşık% 30'unu yeniden yazmanız gerekir - bir şeyler yanlış
Andrzej Bobak

Tabii ki ne kadar acı verici olduğunu biliyorum ve her tarayıcıda her şeyin çalışmasını sağlamaktı. Ancak bu iş, sunucu veya istemci tarafı ne olursa olsun yapılmalıdır (sonunda bir tarayıcı kullanmanız gerektiğinden). İkinci noktanıza kesinlikle katılıyorum. Ancak, yeniden yazılmayı% 30 görmüyorum. Bazı değişikliklerin yapılması gerekebilir, ancak eski günlerdeki kadar kötü olduğundan şüpheliyim. Öte yandan, sunucu tarafı yığınızı değiştirmek istiyorsanız, hizmet katmanına dayalı olarak her şeyi yeniden yapmanız gerekir. Yani çok sıkı bir şekilde sunucu tarafı uygulama ile bağlı. Muhtemelen kullanıcı arayüzünün üstünden modele.
Bruno Schäpper

-1

Duygularınıza kesinlikle katılıyorum. Ayrıca, söylediklerinizin ötesinde, sitelerin sunucularıyla iletişim kurmasının ana yolu için REST'te dramatik bir düşüş ve websockets'te büyük bir artış göreceğimize inanıyorum. Vert.x, Node.js vb. Tüm sunucu tarafı ve istemci tarafı olay odaklı programlamaya geçiyor. Java EE, PHP, Rails, vb. Hepsi uyum sağlamak gerekiyor ya da çok çabuk kaybedecek.


Bir açıklama yapılmadan, başka birisinin farklı bir görüş bildirmesi durumunda bu cevap işe yaramayabilir. Örneğin, birisi "REST'te dramatik bir düşüş ve websockets'te büyük bir artış görmeyeceğiz" gibi bir talep gönderirse, bu cevap okuyucunun bu farklı görüşleri seçmesine nasıl yardımcı olur? Düşünün düzenlemek daha iyi bir şekle ing
tatarcık
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.