我有一个 PhoneGap/JQuery 移动应用程序,它通过 Ajax 从服务器获取数据并将其显示为列表。每次 Ajax 获取应用程序占用的内存增加大约 10 MB。对于第一次提取,它可能没问题,因为它提取了大量记录(大约 700 条)。但是,对于后续调用,我的理解是它应该重复使用内存,而不是每次都再堆积 10 MB。我已经使用 .off() 来释放事件处理程序,以防它们持有内存但没有成功。
这是显示输出的主页面 Div:
<div data-role="content" class="MainContent" style="overflow:hidden; padding-top: 0px;">
<ul data-divider-theme="b" data-role="listview" data-inset="true" class="MainMenu">
</ul>
这是从服务器获取数据并显示在上面的 div 中的 JavaScript 代码。
AjaxFile = "mydomai.com/ajax.php";
$.get(AjaxFile, function (AjaxData) {
$( ".PL" ).off();
$(".MainMenu").off();
$(".MainContent").off();
AjaxData = '<li class="MainMenuList" data-role=list-divider>' + gTitle + AjaxData;
$(".MainMenu").empty();
$(".MainMenu").html(AjaxData);
$(".MainMenu").listview('refresh');
window.scrollTo(0, 0);
$.mobile.loading('hide');
HighlightRow(gCurrentFile);
$(document).ready(function () {
$(".PL").click(function () {
if ( !$(this).hasClass("BTitleRow") )
{
$(".PL").removeClass("RowHighlight");
$(this).addClass("RowHighlight");
OpenNewLink($(this).attr('name'));
}
});
});
});
AjaxData = null;
return;
如何释放内存并确保重复使用相同的内存而不是堆积越来越多的内存?
更新
即使我删除了下面的部分,我仍然可以看到内存使用量在攀升:
$(document).ready(function () {
$(".PL").click(function () {
if ( !$(this).hasClass("BTitleRow") )
{
$(".PL").removeClass("RowHighlight");
$(this).addClass("RowHighlight");
OpenNewLink($(this).attr('name'));
}
});
});
在 Ajax 和 listview("refresh") 中似乎存在某种内存泄漏。
最佳答案
不是一个完整的答案,但如果您可以在 Chrome 中运行 web 应用程序(因此在 Phonegap 之外),您可以使用 Javascript 分析器拍摄堆快照以确定内存的使用位置。
如果您必须在 Phonegap 中运行但有 Android 设备,也可以将 Chrome 调试器连接到它,并且通过一些黑客攻击,也可以连接 iOS 设备和/或模拟器。
关于javascript - 如何调试 PhoneGap 应用程序中的内存使用量攀升?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25832142/