JSON verilerinden ziyade HTML döndüren bir uç nokta ile ilgili yanlış olan nedir?


77

PHP'yi ilk öğrenmeye başladığımda (yaklaşık 5 ya da 6 yıl önce) , Ajax'ı öğrendim ve "aşamalardan" geçtim:

  1. Sunucu HTML verileri döndürür ve bir içine koymak DOM innerHTML
  2. XML gibi veri aktarma biçimleri hakkında bilgi edinirsiniz (ve "ne demek için kullanılırsa oooh" deyin ve ardından JSON.
  3. JSON'a geri dönersiniz ve kullanıcı arayüzünüzü vanilya JavaScript kodunu kullanarak oluşturursunuz
  4. JQuery'ye geçiyorsun
  5. API'ler, başlıklar, HTTP durum kodları, REST , CORS ve Bootstrap hakkında bilgi edinin.
  6. Öğrenecek SPA ve önyüzü çerçeveler ( Tepki , Vue.js ve angularjs ) ve JSON API standardı.
  7. Bazı kurumsal eski kodlar alırsınız ve denetledikten sonra, 1. adımda açıklananları yaptıklarını bulun.

Bu eski kod tabanında çalıştığım için, HTML döndüreceğini bile düşünmedim (yani, şu anda profesyoneliz, değil mi?), Bu yüzden verileri döndüren JSON bitiş noktasını ararken zorlandım. Ajax popülasyon çağırır. Bana "programcıya" HTML’yi döndürdüğünü ve doğrudan DOM’ya innerHTML ile eklendiğini söyleyene kadar değildi.

Elbette, bunu kabul etmek zordu. Bunu JSON uç noktalarına yeniden yansıtmanın yollarını düşünmeye, uç noktaları test etmeyi ve bunun gibi birimler hakkında düşünmeye başladım. Bununla birlikte, bu kod tabanında test yoktur. Tek bir tane değil. Ve 200 bin çizgiden fazla. Tabii ki görevlerimden biri, her şeyi test etmek için yaklaşımlar önermeyi içeriyor, ancak şu anda henüz bununla başa çıkmıyoruz.

Yani hiçbir yerde, bir köşede, merak ediyorum: hiç bir testimiz yoksa, bu JSON bitiş noktasını oluşturmak için özel bir nedenimiz yok (çünkü "yeniden kullanılamaz" olmadığından: kelimenin tam anlamıyla yalnızca bu kısmına uyan verileri döndürüyor. uygulama, ancak sanırım bu zaten HTML ... veriyi döndürdüğü için ima edildi.

Bunu yapmanın tam olarak nesi yanlış?



3
Ayrıca ilgili: stackoverflow.com/questions/1284381/… <- SO'da çok iyi bir cevap.
Machado

73
HyperText Aktarım Protokolü'nü kullanan ve HyperText döndüren bir sunucu mu ?! Korku!
Andy

3
@Andy Tamamen dürüst olmak gerekirse, aslında Genel İleti Aktarım Protokolü: dosyalara ve dizinlere özgü şeyler hakkında çok şey konuşan FTP'ye karşı olan köprü metni aktarımına özgü bir şey yoktur.
Joker_vD

4
@Joker_vD GMTP adında bir protokol duymadım. İşler geliştiyse ve HTTP üzerinden başka türde içerikler gönderebiliyor olsanız da, orijinal amaç değildi. Demek istediğim, HTTP kullanarak HyperText dışında başka bir içerik gönderebildiğiniz için, orijinal amaç için kullanmanın artık geçerli olmadığını söylemek aptalca görünüyor.
Andy,

Yanıtlar:


114

JSON verilerinden ziyade HTML döndüren bir uç nokta ile ilgili yanlış olan nedir?

Gerçekten hiçbir şey. Her uygulamanın farklı gereksinimleri vardır ve uygulamanızın bir SPA olarak tasarlanmamış olması olabilir.

Alıntı yaptığınız bu güzel çerçevelerin (Açısal, Vue, React, vb ...) geliştirme zamanında kullanılamaması ya da kuruluşunuzda kullanılmak üzere "onaylanmış" girişimci şeylerin bulunmaması olabilir.

Size şunu söyleyeceğim: HTML döndüren bir son nokta, JavaScript kitaplıklarına olan bağımlılığınızı azaltır ve kullanıcının tarayıcısındaki yükü azaltır, çünkü DOM nesnelerini oluşturmak için JS kodunu yorumlamak / yürütmek zorunda kalmayacak - HTML zaten orada, bu sadece unsurları ayrıştırma ve oluşturma meselesi. Tabii ki bu, makul miktarda veriden bahsettiğimiz anlamına gelir. 10 megabayt HTML verisi makul değildir.

Ancak, HTML’yi döndürmede yanlış bir şey olmadığından JSON / XML kullanmayarak kaybettiğiniz şey, temel olarak uç noktanızı bir API olarak kullanma olasılığıdır. Ve burada en büyük soru yatıyor: gerçekten bir API olması gerekiyor mu?

İlgili: HTML'i bir JSON API'sinden döndürmek uygun mudur?


4
Sadece "basitçe tercih" olduğunu söylemeden önce bir adım geri çekilirdim. Vermeniz gereken bazı "büyük sorun" kararları var: Bir API mı değil mi, istemcide JSON verileri olarak çalışacak uygun kitaplıklara sahip miyim, hangi tür bir müşteriyi destekleyeceğim (Javascript'i olmayan tarayıcılar için) örnek), kullanılabilir durumda CPU zamanı vs ne kadar hacim benim programcılar vs vs vs, daha iyi kaldıraç hangi strateji, kullanımı
Machado

7
“DOM nesnelerini oluşturmak için JS kodunu yorumlamaya gerek duymayacak - DOM nesneleri zaten orada, sadece onları işleme meselesi” - peki, HTML zaten orada (telin üzerinden geldiğinde). Tarayıcının HTML'yi ayrıştırması ve DOM nesnelerini ondan yapması gerekir.
Paul D. Waite

7
HTML'nin bir API olarak hareket etmemesinin sıfır nedeni vardır. Sıfır. Yok. Aslında, HAL + JSON ve HAL + XML, HTML'ye çarpıcı bir benzerlik göstermektedir. İşte REST hakkında mükemmel bir konuşma. HTML'yi bir uç noktadan döndürme ile ilgili kısım sonun yakındır. youtu.be/pspy1H6A3FM Şahsen, tüm uç noktalarımı hem json hem de HTML olarak döndürürüm. Keşfedilebilir hizmetler yazıyorsanız, bir tarayıcıda gezinmeyi gerçekten kolaylaştırır ... gasp ... bir tarayıcıda.
RubberDuck

4
Çünkü gerçekten umursadığın verileri ... ... yeni bir şekilde kullanmaya çalışmaktan çıkarmak tam bir kaltak mı?
DeadMG

4
HTTP üzerinden HTML sunuluyor mu? Bu nedir? Bir internet sitesi?
Ant P

50

JSON ve HTML iki farklı anlamsal amaç yerine getirmektedir.

Verileri olan bir web sayfasını dolduruyorsanız, JSON kullanın. Web sayfalarının bölümlerinden bir web sayfası oluşturuyorsanız, HTML kullanın.

Aynı şeymiş gibi ses çıkarabilirler, ama değiller. Birincisi, sunucu tarafından döndürülen HTML'yi kullanarak bir web sayfasının bir kısmını oluştururken, sunucu tarafında çalışıyorsunuzdur . Bir web sayfasına veri bağlarken, müşteri tarafında çalışıyorsunuz .

Ayrıca, belirli bir sayfaya sıkıca bağlanmamak için HTML konusunda dikkatli olmalısınız. Kısmi sayfaları bu şekilde oluşturmanın amacı, kısmi parçaların yeniden kullanılabilir olmalarıdır ve kısmi kısmı çok belirgin yaparsanız, diğer sayfalardan oluşmaz. JSON bu soruna sahip değil, çünkü bu sadece web sayfası yapısı değil veri.


1
"Bir şey için, HTML kullanarak bir web sayfasının bir bölümünü oluştururken, sunucu tarafında çalışıyorsunuz." Neden? Bunun böyle olması için hiçbir neden göremiyorum. Bu, yalnızca ilk sayfanın yüklenmesi için açıktır ve tartışmalı bir şekilde, istemcinin ihtiyaç duyduğu veriler için talepte bulunabildiğinden bile geçerli değildir.
DeadMG

3
@DeadMG "Sunucu tarafından döndürülen HTML kullanarak bir web sayfasının bir kısmını oluştururken" (sunucu tarafından döndürülen JSON kullanmak yerine)
user253751 15.01.2017

Nitekim, ancak durum böyle olması için çok az motivasyon olduğu için, noktayı anlamıyorum.
DeadMG

6
@DeadMG Durumda ne olacağı için küçük bir motivasyon? Sunucunun HTML'yi döndürmesi için? Kelimenin tam anlamıyla bu bütün SE sorusunun konusu budur.
user253751, 15:17

Soru, HTML döndürmeniz gerekip gerekmediği ile ilgilidir. İlk yanıtın HTML olması gerektiği açıktır, ancak diğer API’lerin HTML’yi döndürmesi için açık bir neden yoktur.
DeadMG

22

Asıl sorun, sunucuyu, HTML yapısını bilmesi gereken istemciye sıkıca bağlamasıdır. Ayrıca, son noktaların yeni yöntemlerde veya yeni uygulamalarda yeniden kullanılmasını zorlaştırır.

Düz verileri döndürmek ve müşterinin bunu yapmasına izin vermek, kuplajı azaltır ve esnekliği ve test edilebilirliği artırır; sahte veriler için istemcide birim testleri yapabilir ve istenen verileri test etmek için sunucuda birim testleri çalıştırabilirsiniz.


11
HTML oldukça genel yapılabilir. Örneğin bir madde imli listeye geri döndürebilir ve geçerli CSS tarafından stillendirmeye tabi olacağı bir div'e yerleştirebilirsiniz.
Robert Harvey,

10
Bu sefer bir açıklığa sokmam gerekirse, o kadar da kullanışlı değil. Veya HTML'de gösterilmeyen başka bir uygulamada işleyin.
DeadMG

2
Her zaman HTML'yi oluşturacak şekilde yeniden ifade ederdim ve bu HTML'nin formu her zaman tüm kullanımlar için tamamen tutarlı olmalıdır, bu çok yararlı bir garanti değildir. Örneğin, uygulamamızda listelerimiz var, ama aslında kullanmadık ulve liher birini bir hale getirmek için değişti div(nedenini hatırlamıyorum). Sunucu içinde uls ve lis bulunan bir demet HTML döndürürse zor olurdu .
DeadMG

2
Sadece verileri iade edebileceğiniz ve müşterinin uygun gördüğü şekilde HTML olarak yapmasına izin verdiğiniz zaman, ilk
elden garantiyi almak anlamsız gözüküyor

1
HTML döndürmenin tercih edilebileceği yeri olan tek senaryo, istemcinin görüntüyü oluşturmak için yeterli kaynağa sahip olmamasıdır.
DeadMG

14

Bence biraz geriye aldın. Diyorsun:

Ne olursa olsun herhangi bir testimiz yok, bu yüzden bu JSON uç noktasını oluşturmak için özel bir nedenimiz yok.

Uygun bir son nokta kullanmanın bir nedeni, onu test edebilmeniz için olacaktır. Test yaptırmamak bazılarını yazmaya başlamak için çok iyi bir neden olduğunu söyleyebilirim. Yani, test etmeye uygun herhangi bir mantık varsa.

200k kod satırı refactor için çok fazla ve muhtemelen bakımı zordur. Bazı uç noktaları kesmek ve onları test etmek, başlamak için iyi bir yer olabilir.

Başka bir neden, sunucuyu istemciden ayırmak olabilir. Uzak bir gelecekte, uygulama tasarımı veya düzeni değişirse, HTML çıktısından daha uygun bir veri biçimiyle çalışmak daha kolaydır. İdeal bir dünyada, sadece istemciyi değiştirmeniz ve sunucuya dokunmamanız gerekir.


Düzen değişiklikleriyle ilgili nokta, şablonları altta yatan verilerden ayırma ihtiyacı gibi görünüyor , ancak bu şablonların istemcide olması gerekmiyor. Nitekim, olmamaları için birçok neden var , örneğin, renderlemeniz müşterideyse müşteriden veri gizlemeye karar veremezsiniz. HTML bölümleri, tam HTML sayfalarıyla aynı şablonlama sistemiyle üretiliyorsa, yeniden kaplanabilir.
IMSoP

6

Bir web sayfası oluşturmanın 3 yolu vardır (en azından?):

  • Sayfa sunucusu tarafının tamamını oluşturun.
  • Sunucu artı kodundan (JavaScript) çıplak kemikler sayfası döndürün ve sayfanın verilerini alıp HTML istemci tarafına getirmesini sağlayın.
  • Kısmi bir sayfa artı kodu döndürün ve kodun, önceden işlenmiş HTML bloklarını sayfaya bırakmasını sağlayın.

İlki iyi. İkincisi de iyi. Sorun sonuncusu.

Nedeni basit: Artık var bölünmüş tamamen bağlantısız bölüme HTML sayfası yapımını. Sorun bakımlardan biri. Şimdi , kullanıcı arayüzünün ayrıntılarını yönetmekle görevli iki ayrı biriminiz var . Bu yüzden CSS ve diğer benzer detayları iki ayrı parça arasında senkronize tutmak zorundasınız. Yan çubuğun genişliğini değiştirdiniz mi? Harika. Şimdi geri gelen HTML parçası yatay kaydırmaya neden oluyor, çünkü kenar çubuğu genişliği hakkındaki varsayımları artık geçerli değil. Bu blok için arka plan rengini değiştirdiniz mi? Harika, şimdi HTML parçanızın font rengi çakışıyor çünkü farklı bir arka plan rengini üstlendi ve birisi bu bitiş noktasını test etmeyi unuttu.

Mesele şu ki, tek bir yerde merkezileştirilmesi gereken bilgiyi (yani sunum mantığı) bölüştürdünüz ve bu, tüm parçaların doğru bir şekilde uymasını sağlamak için zorlaşıyor. Bir JSON API kullanarak, bunun yerine tüm mantığı yalnızca ön uçta tutabilir veya verilerinizi başlangıçta HTML olarak işlediğinizde tüm bunları sunucu tarafı şablonlarınızda tutabilirsiniz. Sunum bilgisini / mantığı tek bir yerde tutmakla ilgilidir, böylece tutarlı ve tek bir sürecin parçası olarak yönetilebilir. HTML / CSS / JS, çok küçük parçalara ayrılmadan düz tutulacak kadar zordur.

JSON API'leri ayrıca verileri sunum mantığından tamamen bağımsız olarak elde etmenin yararına da sahiptir. Bu, hem mobil uygulama hem de web sayfası gibi birden çok farklı sunucunun aynı verileri kullanmasını sağlar. Özellikle, verileri bir tarayıcı olmadan tüketmeyi sağlar (örneğin mobil uygulamalar veya gece cron işleri); Bu tüketiciler bile HTML'yi ayrıştıramayabilirler. (Bu, elbette, verilerin farklı tüketiciler arasında aynı olduğu veya birinin diğerinin alt kümesini kullanabileceği bir duruma sahip olmaya dayanır.) Bu yeteneğe ihtiyaç duyup duymadığın, sunumunuzu yönetirken, uygulamanızın gereksinimlerine bağlıdır. mantık ne olursa olsun gereklidir. Yine de uygularsanız, gelecekteki büyüme için daha iyi hazırlanacağınızı söyleyeceğim.


2
Aslında yinelenen görüntüleme mantığı kaçınarak iyi bir neden olabilir mi üzere HTML sayfası parçaları işlemek: sunucuda sayfadaki bölümü işlemek eğer (örneğin başlık ve temel düzeni), o zaman, sizi istemci üzerinde JSON verilere dayalı diğer kısımlarını oluşturmak iki farklı şablon setine sahip olabilirsiniz. Sunucuda kısmi oluşturma, bu mantığı , tüm sayfayı statik olarak birleştiriyorsa, tek bir bileşeni oluşturmak için aynı şablonu kullanabilen merkezi sunum katmanınıza geri götürür .
IMSoP

1
mobil olan tek kişi sensin, sana bunun için bin dolar vermek istiyorum
Lovis

1
@IMSoP Dinamik bir sayfaya ihtiyacınız varsa ön uç mantığa sahip olmalısınız. Parçaları hala sunucu tarafında oluşturuyorsanız, şimdi ön uç varsayımlarının parçaları oluşturan sunucunun ön koşullarına uyduğundan emin olmalısınız. Bu bağımlılığı kıramazsın. Bu bilgiyi senkronize etmek, tamamen bölünmüş sistemlere bölünmüşse daha zordur. Sadece ön ucunda yaparsanız, bu varsayımlar merkezileştirilir. Bir sunucu tarafı şablonunda dinamik bir ön ucu başlangıç ​​durumuyla karıştırmaktan da kaçınacağımı düşünüyorum; ön ucu başlatmak için bir "önyükleme" daha basittir.
jpmc26 16:17

4

Sunucunun bir HTML parçasını döndürmesi ve UI'nin bazı öğelerin .innerHTML dosyasına atanmasında yanlış bir şey olmadığını söyleyebilirim. Bu, benim görüşüme göre, zaman uyumsuz JavaScript kodu geliştirmek için en kolay yoldur. Bunun yararı, JavaScript kullanarak mümkün olduğunca az işlem yapılmasının ve mümkün olduğu kadar kontrollü bir arka uç ortamında gerçekleştirilmesidir. Tarayıcılardaki JavaScript desteğinin farklı olduğunu ancak arka ucunuzun her zaman arka uç bileşenlerinin aynı sürümüne sahip olduğunu unutmayın; bu, arka uçta mümkün olduğunca fazla işlem yapmanın mümkün olan en az sürüm uyumsuzluğu anlamına geleceği anlamına gelir.

Şimdi, bazen bir HTML parçasından daha fazlasını istersiniz. Örneğin, bir durum kodu ve bir HTML parçası. Daha sonra iki üyeli bir JSON nesnesi kullanabilirsiniz: statusCode ve statusCode'u kontrol ettikten sonra bazı öğelerin .innerHTML öğelerine ikincil atanabilir HTML. Dolayısıyla, JSON kullanmak ve innerHTML kullanmak, hiçbir şekilde alternatif özel yaklaşımlar değildir; birlikte kullanılabilirler.

JSON'u kullanarak, aynı yanıtta birden fazla öğenin .innerHTML dosyasına atanan birden fazla HTML parçasına sahip olabilirsiniz.

Özetle: .innerHTML kullanın. Kodunuzu olabildiğince çok tarayıcı sürümüyle uyumlu hale getirir. Daha fazlasına ihtiyacınız varsa, JSON ve .innerHTML'yi birlikte kullanın. XML'den kaçının.


4

Prensipte yanlış bir şey yok . Soru şudur: Ne elde etmek istiyorsunuz?

JSON veri iletimi için mükemmeldir. Bunun yerine HTML gönderir ve istemciden verileri HTML'den ayıklamasını beklerseniz, bu çöplük olur.

Öte yandan, HTML olarak işlenecek olan HMTL'yi iletmek istiyorsanız , HTML olarak bir dizeye paketlemek yerine, dizeyi JSON'a çevirmek, JSON iletmek, diğer tarafa kodlamak yerine göndermek , bir dize almak ve dizeden HTML'yi çıkarmak.

Ve sadece dün iki öğeyi diziye koyan, diziyi JSON'a çeviren, JSON'yi dizeye koyan, diziyi diziye yerleştiren, tüm diziyi JSON'a çeviren, kod çözen müşteriye gönderen koda girdim JSON, bir dize içeren bir diziye sahipti, dize aldı, JSON'u dizeden çıkardı, JSON'un kodunu çözdü ve iki öğeli bir dizi aldı. Yapma bunu.


Tam olarak + 1. İlk soru, neye ihtiyacın var? Kenar çubuğu reklamlarını bir bit HTML veya belki bir altbilgi veya benzeri öğeler olarak döndüren bir uç nokta ile ilgili yanlış bir şey olmazdı.
SQB

3

Tüm bunlar API'nin amacına bağlıdır, ancak genel olarak tanımladığınız şey endişelerin ayrılmasının oldukça güçlü bir ihlalidir :

Modern bir uygulamada, verilerden API kodu ve sunumdan müşteri kodu sorumlu olmalıdır.

API'nız HTML'yi döndürdüğünde, verilerinizi ve sunumunuzu sıkıca birleştiriyorsunuzdur. API HTML döndürdüğünde, bu HTML ile yapabileceğiniz (kolayca) tek şey onu daha büyük bir sayfanın bir parçası olarak gösterir. Farklı bir açıdan, API'nin iyi olduğu tek şey sayfanıza HTML sağlamaktır. Ayrıca, HTML’nizi hem istemci hem de sunucu koduna dağıttınız. Bu bakım baş ağrısı yapabilir.

API'niz JSON veya başka bir saf veri biçimi döndürürse, çok daha kullanışlı olur. Mevcut uygulama hala bu verileri tüketebilir ve uygun şekilde sunabilir. Şimdi ise, başka şeyler aynı verilere erişmek için API'yi kullanabilir. Yine, bakım da daha kolaydır - tüm HTML'ler tek bir yerde bulunur, bu nedenle tüm siteyi yeniden stillendirmek istiyorsanız API'nizi değiştirmeniz gerekmez.


5
"Modern bir uygulamada, verilerden API kodu ve sunumdan müşteri kodu sorumlu olmalıdır." Neden bu hep böyle olmalı? Bunun ortak bir model olduğu ve bazı şeyleri kolaylaştıracağı konusunda hemfikirim, ancak onu "gerekir" seviyesine yükseltmek için bir neden görmüyorum ... Durum bazında alınması gereken bir karar. ve bazı durumlarda farklı bir karar vermek isteyebileceğinize dair kesinlikle nedenler var.
Jules

@Jules, çünkü bir API'niz ve müşteriniz varsa, her ikisinin de oluşturulmasından sorumlu olmak endişelerin ayrılmasının ihlalidir. (. Şimdi, ille Yalnızca bir bileşene sahip bir API ve bir müşterim var ve bütün sunum yapmak zorunda Ama sonra bir API yok etmez.)
njzk2

@ njzk2 Bunun sebebi bir API'nin HTML verisi sağlaması, onu oluşturduğu anlamına gelmez. Örneğin, HTML’yi bir blok olarak kabul ediyor ve bir veritabanında saklıyor olabilir. Ayrıca, istemciden ziyade sunucuda birtakım renderleme gerekebilir (örneğin, arama motorları için statik sayfalar temin etmek), dolayısıyla bu kabiliyetin tekrar kullanılması çoğaltmanın ortadan kaldırılması olarak görülebilir.
Jules

1
Ayrıca, tüm oluşturma işleminin sunucuda gerçekleştiği bir istemci ve api çifti üretmek tamamen mümkündür ve istemci yalnızca gönderilen HTML'yi DOM'sindeki önceden tanımlanmış yuvalara bağlar. Jquery'nin bu tür bir müşteriye adanmış bir modülü var ve bu da bana oldukça yaygın olması gerektiğini gösteriyor.
Jules

1
@Jules, bir çok şey oldukça yaygındır, bu onların makul olmasının bir nedeni değildir.
njzk2

2

HTML, belirli bir tasarıma ve kullanıma bağlıdır.

HTML ile, sayfa düzenini değiştirmek istiyorsanız, html'nin sunucu çağrısı tarafından nasıl oluşturulduğunu değiştirmeniz gerekir. Genellikle, bu bir arka uç programlayıcı gerektirir. Artık tanımı gereği, en iyi html yazarlarınız olmayan ve bu güncellemeleri ele alan arka uç programcılar var.

JSON ile, sayfa düzeni değişirse, mevcut JSON sunucu çağrısının mutlaka değişmesi gerekmez. Bunun yerine, ön uç geliştiriciniz ve hatta tasarımcı, aynı temel verilerden istediğiniz farklı HTML'yi üretmek için şablonu günceller.

Ek olarak, JSON diğer hizmetler için temel olabilir. Aynı temel verileri farklı şekillerde görmeniz gereken farklı rollere sahip olabilirsiniz. Örneğin, bir sipariş sayfasındaki bir ürünle ilgili verileri gösteren bir müşteri web sitesine ve aynı verileri çok farklı bir düzende gösteren, belki de genel müşteriler için bulunmayan diğer bazı bilgilerle birlikte gösterilen satış temsilcileri için bir iç satış sayfasına sahip olabilirsiniz. JSON ile, aynı sunucu çağrısı her iki görünümde de kullanılabilir.

Son olarak, JSON daha iyi ölçeklenebilir. Son yıllarda, müşteri tarafında javascript çerçeveleriyle bir tür aşırıya düştük. Sanırım gerçekte bir adım geriye atıp, hangi javascript'i kullandığımızı ve tarayıcı performansını nasıl etkilediğini düşünmeye başlamanın zamanı geldi ... özellikle de mobil cihazlarda. Bununla birlikte, tek bir sunucu yerine bir sunucu grubu veya küme gerektirecek kadar büyük bir site kullanıyorsanız, JSON daha iyi ölçeklenebilir. Kullanıcılar size tarayıcılarında ücretsiz olarak işlem süresi vereceklerdir ve bundan faydalanırsanız, sunucu yükünü büyük bir dağıtımda azaltabilirsiniz. JSON ayrıca daha az bant genişliği kullanır, bu yüzden yeterince büyükseniz tekrarve uygun şekilde kullanın, JSON ölçülebilir bir şekilde daha ucuzdur. Elbette, 2KB veriyi 7KB html'ye ayrıştırmak için 40KB kütüphaneleri beslemeyi bitirirseniz, daha da kötüleşebilir, yani: Ne yaptığınızın farkında olmak öder. Ancak potansiyel , JSON'un performansı ve maliyetleri iyileştirmesi için var.


1

Gereksinimlerini yerine getirirse, böyle bir son noktada yanlış bir şey yoktur. Bilinen bir tüketicinin etkili bir şekilde ayrıştırabileceği html'i tükürmek gerekirse, neden olmasın?

Sorun şu ki, genel durum için, son noktalarınızın standart bir çözümleyici tarafından iyi biçimlendirilmiş ve etkin bir şekilde ayrıştırılabilir bir yükü tükürmesini istiyorsunuz. Ve etkili bir şekilde çözümlenebilir olarak, yani bildirimsel olarak çözümlenebilir.

Müşteriniz yükü okumak ve açık bilgi bitlerini döngüler ve if ifadeleriyle açıklamak zorunda kalırsa, etkin bir şekilde ayrıştırılamaz. Ve HTML, olduğu gibi, iyi biçimlenmesi gerekmemek için çok affedilir.

Şimdi, html'nizin xml uyumlu olduğundan emin olursanız, o zaman altınsınız.

Bununla birlikte, bu konuda önemli bir sorunum var:

Size şunu söyleyeceğim: HTML döndüren bir uç nokta, JavaScript kitaplıklarına olan bağımlılığınızı azaltır ve DOM tarayıcısı oluşturmak için JS kodunu yorumlamak / yürütmek zorunda kalmayacağından, kullanıcı tarayıcısındaki yükü azaltır - HTML zaten var, bu sadece unsurları ayrıştırma ve oluşturma meselesi. Tabii ki bu, makul miktarda veriden bahsettiğimiz anlamına gelir. 10 megabayt HTML verisi makul değildir.

Bu nasıl kestiğinin önemi yok. On yıllarca süren toplu sanayi deneyimi bize genel olarak verileri (veya modeli) ekrandan (veya görünümünden) ayırmanın iyi bir fikir olduğunu göstermiştir.

Burada, hızlı JS kodunu yürütme amacıyla ikisini birleştiriyorsunuz. Ve bu bir mikro optimizasyon.

Bunu çok önemsiz sistemler dışında iyi bir fikir olarak görmedim.

Tavsiyem? Yapma HC SVNT DRACONES , YMMV, vb.


0

JSON, yapılandırılmış verilerin sadece metinsel bir sunumudur. Bir müşterinin verileri işlemek için doğal olarak bir çözümleyici olması gerekir, ancak hemen hemen tüm dillerin JSON çözümleyici işlevleri vardır. JSON ayrıştırıcısını kullanmak, HTML ayrıştırıcısını kullanmaktan çok daha etkilidir. Az yer kaplar. Bir HTML çözümleyici ile öyle değil.

PHP'de sadece json_encode($data)onu kullanırsınız ve bunu diğer taraftaki istemciye göre ayrıştırır. JSON verilerini bir web servisinden alırken, sadece kullanırsınız $data=json_decode($response)ve değişkenlerle yapacağınız gibi verilerin nasıl kullanılacağına karar verebilirsiniz.

Bir mobil cihaz için bir uygulama geliştirdiğinizi varsayalım; mobil uygulamalar veriyi ayrıştırmak için nadiren web tarayıcısını kullandığında neden HTML formatına ihtiyacınız vardır? Birçok mobil uygulama veri alışverişinde JSON'u (en yaygın format) kullanır.

Cep telefonlarının genellikle ölçülü planlarda olduğunu göz önünde bulundurarak, neden JSON'dan daha fazla bant genişliğine sahip HTML kullanmak istiyorsunuz?

HTML, kelime hazinesiyle sınırlı olduğunda ve JSON veri tanımlayabildiğinde neden HMTL kullanıyorsunuz? {"person_name":"Jeff Doe"}Verileri tanımlamak için HTML'den daha fazla bilgi vericidir, çünkü verileri tanımlamak yerine yalnızca HTML ayrıştırıcıları için yapı tanımlar.

JSON'un HTTP ile ilgisi yok. JSON'u bir dosyaya koyabilirsiniz. Yapılandırmalar için kullanabilirsiniz. Besteci JSON kullanır. Basit değişkenleri dosyalara kaydetmek için de kullanabilirsiniz.


0

Bir hak ya da yanlışı kategorize etmek zordur. IMO, soracağım sorular: " yapmalı mı ", veya " daha azıyla yapabilir mi? "

Her son nokta, mümkün olduğunca az içerikle iletişim kurmak için çaba göstermelidir. Sinyal-gürültü oranı tipik olarak <JSON <XHTML HTTP kodlarıdır. Çoğu durumda, en az gürültülü protokolü seçmek iyidir.

Modern tarayıcılarda olduğu gibi, sorun olmadığı için müşteri tarayıcısı yükü ile ilgili olarak machado tarafından farklılık gösteriyorum. Çoğu, HTTP kodlarıyla ve JSON yanıtlarıyla oldukça iyi bir şekilde ilgileniyor. Şu anda testler yapmasanız da, daha az gürültülü bir protokolün uzun vadeli bakımı, yukarıdaki olandan daha ucuz olacaktı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.