我有一個php應用程序,其中每隔2分鐘將.load()大量內容放入div。瀏覽器(我必須爲IE8構建它)通常在重新加載數據幾分鐘後開始減慢。 我已經知道原因 - 只要頁面本身已加載,內存就不會擺脫之前加載的數據。。在間隔中使用時發生性能問題
有沒有辦法做到這一點,以便內存不會在幾次/多次重新加載後被淹沒?
我發現這一點:
jQuery load() method memory leak?
和涼爽的答案在這裏(見全螺紋https://stackoverflow.com/a/2180355/3424808):
這不是一個完整的答案,但我很快就發現如何用最少的更改修復我的所有代碼。在我的「鹼」 JS類(這是通過類名等爲標準按鈕進行連接的每一個頁面上使用的對象)添加以下方法,該方法確實爲欺騙處理程序檢查:
BindOnce: function(triggerName, fn) {
function handlerExists(triggerName, theHandler) {
function getFunctionName(fn) {
var rgx = /^function\s+([^\(\s]+)/
var matches = rgx.exec(fn.toString());
return matches ? matches[1] : "(anonymous)"
}
exists = false;
var handlerName = getFunctionName(theHandler);
if ($(document).data('events') !== undefined) {
var event = $(document).data('events')[triggerName];
if (event !== undefined) {
$.each(event, function(i, handler) {
if (getFunctionName(handler) == handlerName) {
exists = true;
}
});
}
}
return exists;
}
if (!handlerExists(triggerName, fn)) {
$(document).bind(triggerName, fn);
}
}
然後我只是調用它而不是綁定方法!
但我不能得到這個工作(當我重寫簡單的工作.bind()FN它停止工作)。 有沒有辦法實現這一點的其他方式?
或者有人能幫我用我發佈的腳本嗎?當我將它分配給按鈕時什麼都不做。 我使用的功能,如:
$('#myButtonID').BindOnce("click", function() {
alert("User clicked on 'foo.'");
});
它可以用於簡單.bind()
編輯
繼承人原.load()這就是我的命。
<script type="text/javascript">
var skill = <?php echo json_encode($skill_, JSON_UNESCAPED_UNICODE); ?>;
var skill_final = <?php echo json_encode($skill_final, JSON_UNESCAPED_UNICODE); ?>;
var camp_final = <?php echo json_encode($camp_final, JSON_UNESCAPED_UNICODE); ?>;
var jmeno = <?php echo json_encode($jmeno_, JSON_UNESCAPED_UNICODE); ?>;
var pozice = <?php echo json_encode($pozice_, JSON_UNESCAPED_UNICODE); ?>;
var delka = <?php echo json_encode($delka_, JSON_UNESCAPED_UNICODE); ?>;
var opravneni = <?php echo json_encode($opravneni, JSON_UNESCAPED_UNICODE); ?>;
$(document).ready(function(){
refreshPrehled();
});
function refreshPrehled(){
$('#checkboxes').load('load_prehled.php', {
skill: skill,
skill_final: skill_final,
camp_final: camp_final,
jmeno: jmeno,
pozice: pozice,
delka: delka,
opravneni: opravneni
}, function(){
setInterval(refreshPrehled, 120000);
});
}
</script>
'重新加載'表明您正在多次加載相同的數據。難道你不能跟蹤已經加載的服務器並只發送新的/已更改的內容嗎? – jeroen
@jeroen我有一個腳本,每2分鐘用更新的數據重寫少量.txt文件,並基於此重構表格。 – IRMA
你能展示你實際使用的代碼嗎?你使用的是什麼版本的jQuery?目前這看起來像一個x/y問題,你有問題x,並嘗試用y解決它,並試圖找出爲什麼y不工作時,你真的應該看看x。 http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –