Javascript Sencha触摸按钮的点击速度比列表项的点击速度慢?

Javascript Sencha触摸按钮的点击速度比列表项的点击速度慢?,javascript,performance,extjs,sencha-touch-2,profiling,Javascript,Performance,Extjs,Sencha Touch 2,Profiling,我在分析Sencha Touch应用程序的过程中,遇到了这样一个事实:点击按钮触发操作的速度比点击Ext.list中的列表项触发相同操作的速度更快。我的时间线分析数据表明,该操作是在列表项的计时器触发条件下执行的。此计时器的超时时间为300毫秒。现在,对于按钮,没有计时器,所以只要有触控结束(以及所有点击所共有的其他Sencha处理),就可以执行操作 在我的例子中,动作是到另一个视图的简单过渡,没有任何动画 以下是我在iPhone4上运行的时间线数据应用程序的屏幕截图 通过按钮单击/点击进行转换

我在分析Sencha Touch应用程序的过程中,遇到了这样一个事实:点击按钮触发操作的速度比点击Ext.list中的列表项触发相同操作的速度更快。我的时间线分析数据表明,该操作是在列表项的计时器触发条件下执行的。此计时器的超时时间为300毫秒。现在,对于按钮,没有计时器,所以只要有触控结束(以及所有点击所共有的其他Sencha处理),就可以执行操作

在我的例子中,动作是到另一个视图的简单过渡,没有任何动画

以下是我在iPhone4上运行的时间线数据应用程序的屏幕截图

通过按钮单击/点击进行转换:

按列表项进行转换单击/点击:

我试图深入研究源代码,但无法理解为什么会发生这种情况。我的假设是,列表等待300毫秒,看看它实际上是一个点击动作还是一个滚动动作。但这是真的吗?如果不是,有人能告诉我正确的方向来验证这个假设是否正确吗


任何帮助都将不胜感激

我认为这是因为pressedDelay配置,它用于和

另外,该按钮直接触发处理程序函数。dataView执行store.getAt(index)来查找记录对象,并将其传递给itemTap回调,它添加了一些ms。

明白了

这300毫秒并不是因为滚动事件,而是为了识别是单点还是双击事件。如果查看识别器源代码,它在配置对象中的最大持续时间为300毫秒。这用于设置触发singleclick事件的超时

ONED功能:

else {
            this.singleTapTimer = setTimeout(function() {
                me.fireSingleTap(e, touch);
            }, maxDuration);
        }
在每个touchStart事件中,此超时都会被清除

onTouchStart: function(e) {
        if (this.callParent(arguments) === false) {
            return false;
        }

        this.startTime = e.time;

        clearTimeout(this.singleTapTimer);
    },

注意,这是一个私有类,因此我们不能依赖它。但是,如果有人想缩短tap事件和触发其逻辑之间的持续时间,请缩短此时间。我注意到,将其设置为150ms将使列表项的单击速度快得多,但同时,它也为其他屏幕中的重影单击打开了空间,因为事件是排队的

您可以在Ext.application:

True中禁用或编辑识别器配置。但是,等待时间似乎是在应用
按下CLS
之后。
pressedDelay
只是一个延迟,直到应用
pressedCls
为止。根据我的观察,
pressedDelay
与之后处理单击事件所需的时间相比,不会增加太多时间。是的,我想主要延迟是在操作处理程序搜索存储以读取记录时,使用不同的存储长度进行测试应该可以澄清这一点。有趣的是,即使我没有指定存储,处理操作仍然需要大约相同的时间。我尝试使用大型存储,但根本没有存储(视图中有数据)。事实上,在普通浏览器中也可以看到这种行为。因此,这里必须进行某种UI操作。好吧,但它始终会迭代数组,即使它不是Ext.store,它也会尝试从数据属性获取记录。你试过一家大商店吗?是的。我尝试了约1000个商店商品,但列表的过渡时间仍然相同。这可能与列表点击操作的处理方式有关。