[英]Memory leak with jQuery ajax (json) calls
我正在制作一個基於Web瀏覽器的實時游戲。
我正在使用jQuery ajax調用來調用Web服務方法,以使客戶端通過json數據更新其速度和位置。 返回的是一個字符串列表,其中包含所有其他播放器的位置和速度的數據。
目前,我什至沒有傳遞任何數據,而是返回了示例List條目。
這是每25毫秒由javascript發出的調用:
$.ajax({
type: "POST",
url: "Default.aspx/CheckIn",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) { UpdateEntityList(response); }
});
這是Web服務方法:
[WebMethod]
public static List<String> CheckIn()//(double xPos, double yPos, double heading, double speed)
{
List<String> Entities = new List<string>();
Entities.Add("0|0|50|50|5|180");
return Entities;
}
誰能建議解決問題的方法,甚至是實現我的目標的更好方法? (由於我只從事Web開發了幾周,所以我不知道這是最好的方法)
謝謝
關於“ 完全實現我的目標的更好方法 ”,的確是的!
完整的瀏覽器游戲的概念證明已經在Google的HTML 5 Quake實現中成功進行。 您要做的就是調整技術,使其更符合HTML 5的工作方式(或將要工作)。 例如,您可能想使用Web套接字而不是AJAX調用。
另外,請瀏覽Google的代碼博客 ,以概述該游戲的實現以及項目主頁,以獲取示例代碼並從中學習。
對各種瀏覽器中的HTML 5實現級別進行一些研究,以預先了解您的游戲現在將在哪里運行。 (例如,考慮HTML標簽支持 , 媒體支持 , 畫布支持等)。 另請參閱WHATWG的 信息和Wiki 。 這是我要演示的漂亮幻燈片演示 。 但是,這些技術仍處於起步階段,因此請注意。 還有W3C規格和相關信息 。
如果您在HTML 5的早期階段就開始使用它,而不是稍后再進行,那么您可能會做得很好。 自2010年4月谷歌在瀏覽器中證明Quake以來已經過去了一段時間。 隨着時間的流逝,這項技術只會不斷發展並得到更廣泛的實施,因此我建議您繼續朝着這個方向進行實驗。
對Google Chrome實驗功能 (當然是Chrome瀏覽器專用)感到驚訝。 這些示例將為您提供一些很棒的想法。 特別注意那些已經實施的游戲及其功能,以作為衡量您自己作品的標准。
祝好運! 並在增加技能的同時獲得樂趣。
正如其他人已經說過的那樣,您不能每25毫秒執行一次XMLHttpRequest
。 我認為您感覺到的效果(瀏覽器占用了大量內存而不釋放內存)的可能性也很可能是由於:因為許多函數調用(最多每25毫秒一次),但是JavaScript引擎也很可能無法保持到此為止;請閱讀此好答案,以了解那些計時器的工作原理)不允許垃圾收集器釋放內存了。
將dataType更改為'text',然后使用json_parse.js手動解析生成的json。 它避免使用導致泄漏的eval。
$.ajax({
type: "POST",
url: "Default.aspx/CheckIn",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "text",
success: function (response) { UpdateEntityList(response); }
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.