3 回答

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個贊
我實(shí)際上是雙方都有點(diǎn):
當(dāng)我在javascript方面需要的是數(shù)據(jù)時,我使用JSON
當(dāng)我在javascript方面需要的是我不會做任何計算的演示時,我通常使用HTML
使用HTML的主要優(yōu)點(diǎn)是,當(dāng)您想要使用Ajax請求返回的內(nèi)容替換頁面的完整部分時:
在JS中重新構(gòu)建頁面的一部分是非常困難的
您可能已經(jīng)在服務(wù)器端有一些模板引擎,它首先用于生成頁面...為什么不重用它?
我通常不會真正考慮事物的“性能”方面,至少在服務(wù)器上:
在服務(wù)器上,生成一部分HTML或一些JSON可能不會產(chǎn)生太大的影響
關(guān)于通過網(wǎng)絡(luò)的東西的大小:好吧,你可能不會使用數(shù)百KB的數(shù)據(jù)/ html ...在你傳輸?shù)娜魏螙|西上使用gzip會產(chǎn)生最大的不同(不是在HTML之間選擇)和JSON)
但是,可以考慮的一件事是,客戶端需要從JSON數(shù)據(jù)中重新創(chuàng)建HTML (或DOM結(jié)構(gòu))的資源...將其與將部分HTML推入頁面進(jìn)行比較; - )
最后,有一點(diǎn)非常重要:
你需要多長時間來開發(fā)一個新的系統(tǒng),將JS作為HTML注入頁面所需的JSON +代碼發(fā)送數(shù)據(jù)?
返回HTML需要多長時間?如果您可以重用一些已有的服務(wù)器端代碼,可以使用多長時間?
并回答另一個答案:如果您需要更新頁面的多個部分,仍然有解決方案/黑客將所有這些部分發(fā)送到一個大字符串中,該字符串將多個HTML部分組合在一起,并在JS中提取相關(guān)部分。
例如,您可以返回一些如下所示的字符串:
<!-- MARKER_BEGIN_PART1 -->here goes the html code for part 1<!-- MARKER_END_PART1 --><!-- MARKER_BEGIN_PART2 -->here goes the html code for part 2<!-- MARKER_END_PART2 --><!-- MARKER_BEGIN_PART3 -->here goes the json data that will be used to build part 3 from the JS code<!-- MARKER_END_PART3 -->
這看起來并不是很好,但它確實(shí)很有用(我已經(jīng)使用了很多次,主要是當(dāng)HTML數(shù)據(jù)太大而無法封裝到JSON中時):你正在為頁面的各個部分發(fā)送HTML需要演示,并且您正在為您需要數(shù)據(jù)的情況發(fā)送JSON ...
...為了提取這些,我猜想JS子串方法會起作用;-)

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個贊
好,
我是那些喜歡以這種方式分離事物的少數(shù)人之一: - 服務(wù)器負(fù)責(zé)提供數(shù)據(jù)(模型); - 客戶負(fù)責(zé)顯示(查看)和操縱數(shù)據(jù)(模型);
因此,服務(wù)器應(yīng)該專注于交付模型(在這種情況下,JSON更好)。這樣您就可以獲得靈活的方法。如果要更改模型的視圖,可以讓服務(wù)器發(fā)送相同的數(shù)據(jù),只需更改將數(shù)據(jù)更改為視圖的客戶端javascript組件即可。想象一下,您有一臺服務(wù)器向移動設(shè)備和桌面應(yīng)用程序提供數(shù)據(jù)。
此外,這種方法提高了工作效率,因?yàn)榉?wù)器和客戶端代碼可以同時構(gòu)建,永遠(yuǎn)不會失去焦點(diǎn),這是當(dāng)你從js切換到PHP / JAVA /等時會發(fā)生的事情。
一般來說,我認(rèn)為大多數(shù)人更喜歡在服務(wù)器端盡可能多地做,因?yàn)樗麄儾徽莆誮s,所以他們試圖盡可能地避免它。
基本上,我和那些正在研究Angular的人有同樣的看法。在我看來,這是Web應(yīng)用程序的未來。
添加回答
舉報