添加到Phonegap app的额外脚本会降低性能nativeFetchMessages()

时间:2013-08-15 18:35:12

标签: iphone html5 cordova kendo-ui

使用Phonegap和Kendo Mobile UI,我的应用程序从通过phonegap中的openDatabase()访问的SQL数据库中动态填充几个不同的列表视图。当我第一次启动应用程序并单击几个不同的列表时,应用程序会非常快速地导航和填充视图。翻阅屏幕超过15-20次后整个应用程序开始变慢,最终爬到难以使用的程度。

在iPhone4 - 5或模拟器上运行并没有什么区别。

启动应用程序新的第一个列表视图迎接我。 检查Web视图并查看文件列表我可以看到index.html。 在那个正常的文件夹下:脚本,图像,字体等..

点击列表项钻取到另一个列表视图。更改页面并填充新的列表视图后,我现在会注意到index.html父项下的新文件夹。一个名为“Extra Scripts”的文件夹 在Extra Scripts文件夹中,我找到了一个新的index.html文件(没有子文件)。点击它打开其内容,1行:

cordova.require('cordova/exec').nativeFetchMessages()

通过再次更改视图并填充另一个列表视图,单击另一个项目可进一步向下钻取。现在在第三个屏幕上,我注意到Extra Scripts文件夹中有2个index.html文件。

简而言之:只要显示带有列表的这些视图,就会在Extra Scripts上附加一个新文件。一旦这些文件的数量超过12个,设备就会变慢。我的应用程序中有其他视图不包含动态填充的列表视图,这些页面不会导致创建额外脚本。

我不确定Kendo Mobile ListViews或Phonegap 2.4本身是否存在问题。我还将Phonegap升级到2.9,但没有帮助。 我还有另一个运行相同版本(2.4)的应用程序并且它没有遇到任何这些问题,虽然它没有集中在列表视图上,但是存在多个列表视图并且没有问题出现。

这两个应用程序之间的另一个重要区别是,破坏的应用程序填充了来自phonegaps WebSQL数据库插件的数据,其中有效的应用程序从接受REST服务的ajax调用中提取数据。

以下是我创建和初始化列表视图的示例

<div data-role="view" id="equipmentPage" data-title="My Network" data-layout="mobile-tabstrip" >
    <ul data-role="listview" class="equipmentlist" data-source="equipmentDS" data-template="equipmentListItemTemplate">
    </ul>
</div>



 <script type="text/x-kendo-template" id="equipmentListItemTemplate">
   <div class="left wide liname">${name}</div>
   <div class="hiddenField" style='display: none'>${id}</div>
   <div class="right">
     <div class="hiddenField" style='display: none'>${id}</div>
     <div class="km-button badgeButton" id="badgeequipment_#=id#"></div>
     <button class="editEquipment" style="vertical-align: top" data-role="button" data-icon="compose"> </button>
   </div>
</script>


function equipmentliTemplateInit(){
  lockOverlay = true
  showLoadOverlay()
  console.log("equipmentInit")

  dbSelect("Select * from Equipment WHERE active = 1 and userId = " + ((temp.selected.friend > 0)?temp.selected.friend:temp.user.userID) + " AND siteId = " + temp.selected.site + "", function(tx, results){
    var equipment = new Array();
    for(var i = 0; i < results.rows.length; i++)
    {
      equipment.push(results.rows.item(i))
    }
    fillEquipment(equipment)
    lockOverlay =false
    hideLoadOverlay()
  })

}

function fillEquipment(equipment)
{
  equipment.sort(function(a, b){
    var nameA = a.name.toLowerCase();
    var nameB = b.name.toLowerCase();
    if(nameA < nameB)
      return -1
      if(nameA > nameB)
        return 1
        return 0;
  })
  /*$(".equipmentlist").data('kendoMobileListView').destroy()
  $(".equipmentlist").html("");
  $(".equipmentlist").kendoMobileListView({
    dataSource: kendo.data.DataSource.create({data: equipment }),
    template: $("#equipmentListItemTemplate").html()
  });*/
  equipmentDS.data(equipment)
  setBadges()
  if(equipment.length < 1)
    $(".equipmentlist").html("<li><center>There are no equipment to display.<br>Use the + button to add one.</center></li>");
  defineListItemActions()
}

我尝试上传图片,但新用户无法上传。

0 个答案:

没有答案