Sencha Touch按钮点击比列表项单击慢?

时间:2013-08-09 15:41:13

标签: javascript performance extjs sencha-touch-2 profiling

我正在分析Sencha Touch应用程序,并且发现点击按钮会更快地触发操作,而不是从Ext.List中单击同一操作的列表项。我的时间线分析数据表明该操作是在列表项的Timer Fired条件下执行的。此计时器的超时时间为300毫秒。现在,对于按钮,没有计时器,因此只要触摸结束(以及所有点击共有的其他Sencha处理)就会执行操作。

在我的情况下,操作是一个简单的过渡到另一个没有任何动画的视图。

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

按钮点击/点击转换: Transition by button click/tap

按列表项进行转换点击/点按: Transition by list item click/tap

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

任何帮助都将受到高度赞赏!

3 个答案:

答案 0 :(得分:1)

我认为是因为了对于Ext.Button default is 0Ext.DataView is 100 ms的suppressDelay配置。

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

答案 1 :(得分:0)

知道了!

这300ms不是因为滚动事件,而是识别它是单个还是双击事件。如果查看DoubleTap识别器源代码,它在配置对象中的maxDuration为300毫秒。这用于设置触发单击事件的超时时间。

onEnd功能:

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);
    },

要注意,这是一个私人课程,所以我们不能依赖它。但是,如果有人想减少点击事件和触发其逻辑之间的持续时间,请减少这个时间。我注意到将其设置为150ms将使列表项单击更快,但同时,它也为其他屏幕中的鬼点击打开了空间,因为事件排队等候。

答案 2 :(得分:0)

您可以在Ext.application中禁用或编辑识别器配置:http://www.sencha.com/forum/showthread.php?205692-Reduce-delay-of-itemsingletap-on-xtype-list