我开发了一个带有JqueryMobile和Phoenagap的iPhone应用程序。我用代码缩小了所有文件,删除了未使用的文件,但app仍然很慢。问题是。如果我点击按钮转换将启动appdrox。 1秒后。我想更快地完成页面转换。
我还禁用了未使用的部分od设备(相机等),但它仍然很慢。
有人可以帮我解决这个问题吗?
我在iPhone 4g上测试。
答案 0 :(得分:27)
缓存jQuery对象
Ex: var header = $('#header');
考虑替代方案:
更改为display:none
要快得多。也许只需使用addClass('hidden')
和removeClass('hidden')
尽量减少使用慢速jQuery方法 为O(n ^ 2)
以下方法也很昂贵:
这些操作方法背后的过程如下:清理输入字符串,将字符串转换为DOM片段并将其注入DOM。
优化选择器:
按性能顺序:
获取具体信息,最好选择父母的ID开头:
$('#test p.description').removeClass('hidden');
instead of
$('.description').removeClass('hidden');
尽可能使用子选择器而不是后代选择器:
$('div > p').hide(); or $('div').children('p');
instead of
$('div p').hide(); or $('div').find('p');
使用find over context:
$('div').find('p');
instead of
$('div', 'p');
使用.filter()而不是使用标签选择器:
$('div.name').filter(':input');
instead of
$('div.name :input');
记忆化:
var myFunc = function (param) {
if (!myFunc.cache.hasOwnProperty(param)) {
var result = {};
// ... expensive operation ...
myFunc.cache[param] = result;
}
return myFunc.cache[param];
};
// cache storage
myFunc.cache = {};
答案 1 :(得分:7)
虽然Brett Holt的回答提供了很多提高你的应用程序效率的好方法,但我认为你所说的那个延迟的部分问题与渲染你的应用程序的WebKit引擎有关。在注册点击之前,存在 ~300ms 的内置延迟,以允许双击事件。
根据我的研究,共识似乎是绑定到'vclick
'事件而不是'click
'。点击你的物体后,vclick
就会开火。
我在我的应用中使用了一个名为jquery.touchToClick的库,该库自动处理将click
事件转换为vclick
的问题。这显着加快了我的点击事件。但请记住,它可能不是解决此问题的最有效方法。
我还看到jquery.touchToClick
的替换库,例如LightningTouch,但我还没有尝试过。
答案 2 :(得分:0)
这有助于我的情况,它减少了hoverDelay并使UI在触摸屏设备上更具响应性。
$(document).on("mobileinit", function(){
$.mobile.buttonMarkup.hoverDelay = 0;
});
你也可以禁用转换,遗憾的是这会让jQueryMobile变得更快。
$(document).on("mobileinit", function(){
$.mobile.defaultPageTransition = 'none';
$.mobile.defaultDialogTransition = 'none';
});