我在C#2.0中使用ASP.NET。我爲數據庫創建了一些對象,並且這些對象中的每一個都具有可以本地調用的屬性或者以類似方式調用的屬性,並從它們創建一個JSON API。服務器端和客戶端方法
我有很多標籤式的東西,我喜歡在這個網站上調用'模塊' - 模塊的功能是將數據轉換爲HTML以顯示在頁面上。理想情況下,這需要在服務器端C#代碼中加載第一個選項卡,然後在單擊選項卡時使用Ajax加載其他選項,但對於舊的瀏覽器和搜索引擎,選項卡仍然是一個鏈接,將加載相同的HTML代碼服務器端。
目前我寫的JavaScript代碼完全獨立於將每個模塊轉換爲HTML的C#代碼,但方法實際上是相同的,只是一種不同的語言。類似於這個例子。
C#代碼
public override string GetHtml()
{
IJsonObjectCollection<Person> response = ((Village)page).People;
string html = "<div id=\"test\">";
foreach (Person person in response)
{
html += "<div class=\"person\">";
html += person.Name;
if(canEdit) html += "*";
html += "</div>";
}
return html + "</div>";
}
JavaScript代碼
function getHtml() {
JsonRequest('/json/villages/1/people', function(response) {
var html = '<div id="test">';
for (int i = 0; i < response.length; i++)
{
var person = response[i];
html += '<div class="person">';
html += person.name;
if(canEdit) html += '*';
html += '</div>';
}
return html + '</div>';
});
}
你或許可以看到我這個問題去。什麼是最有效的方法呢?我正在考慮一些不同的選擇 -
1.每個ModuleToHtmlMethod可能是一個類,它定義將此數據對象轉換爲HTML的方法。我試過這個,但因爲太複雜,我停下了。
2.寫我自己的腳本語言,可以解釋爲C#,但也編譯成JavaScript代碼。
只要寫在C#中的很多,使用Ajax簡單地請求從C#
4. HTML內容保持分離的代碼,寫的每一個方法的兩倍。
我想最終讓其他開發人員編寫這些'模塊',所以也許選項是最好的選擇?
我想,這可能是最好的一段路要走。這裏的問題是大部分代碼都是循環的(可能很大),所以大部分的html都會重複使用,這會大大增加響應的大小。 gzip壓縮會幫助我嗎? – Connell 2011-06-07 09:46:07
使用gzip你應該減少50-70%的響應大小,這是你的電話,看看這是否可以接受。您應該使用JSON RESTful API和HTML RESTful API來計算相同響應之間的字節差異。如果差異小於50%,gzip肯定會解決標記開銷。 – 2011-06-07 14:11:31
我不需要測試它來告訴你它需要額外超過50%。有些循環通常循環10-20次,但可能會延長到50個循環,具體取決於所調用的數據類型。然後,html代碼類似於「