6

我用 JqueryMobile 和 Phoenagap 开发了一个 iPhone 应用程序。我用代码缩小了所有文件,删除了未使用的文件,但应用程序仍然很慢。问题是。如果我点击按钮转换将启动 appdrox。1 秒后。我想更快地进行页面转换。

我还禁用了未使用的部分设备(相机等),但它仍然很慢。

有人可以帮我解决这个问题吗?

我在 iPhone 4g 上测试。

4

3 回答 3

27

提高性能的指针

缓存 jQuery 对象

Ex: var header = $('#header');

考虑以下替代方案:

  • jQuery.each()
  • 。显示()
  • 。隐藏()
  • .toggle()

更改display:none为要快得多。也许只是使用addClass('hidden')removeClass('hidden')

尽量减少使用慢的 jQuery 方法 O(n^2)

  • 消除()
  • html()
  • 空的()

以下方法也很昂贵:

  • 附加()
  • 前置()
  • 前()
  • 后()

这些操作方法背后的过程如下:清理输入字符串,将字符串转换为 DOM 片段并将其注入 DOM。

优化选择器:

按表现顺序:

  • id(由于唯一性)
  • 标签
  • 名称,类(都需要检查每个 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'); 

在上下文中使用查找:

    $('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 = {};
于 2012-06-12T03:56:57.500 回答
7

虽然 Brett Holt 的回答提供了许多让您的应用程序更高效的重要提示,但我认为您所说的延迟问题的部分原因与呈现您的应用程序的 WebKit 引擎有关。在注册点击之前有一个约 300 毫秒的内置延迟,以允许双击事件。

根据我的研究,共识似乎是绑定到 ' vclick' 事件而不是 ' click'。vclick一旦你点击你的对象应该会触发。

我在我的应用程序中使用了一个名为jquery.touchToClick的库,它会自动处理将click事件转换为vclick. 这显着加快了我的点击事件。但请记住,它可能不是解决此问题的最有效方法。

我还看到jquery.touchToClick了其他库,例如LightningTouch,但我还没有尝试过。

于 2012-11-23T05:59:01.930 回答
0

这对我来说很有帮助,它减少了 hoverDelay 并使 UI 在触摸屏设备上更具响应性。

$(document).on("mobileinit", function(){
    $.mobile.buttonMarkup.hoverDelay = 0;
});

你也可以禁用转场,遗憾的是这让 jQueryMobile 很快。

$(document).on("mobileinit", function(){
    $.mobile.defaultPageTransition   = 'none';
    $.mobile.defaultDialogTransition = 'none';
});
于 2013-07-23T21:54:18.667 回答