繁体   English   中英

Sencha Touch按钮单击的速度比列表项单击的速度慢?

[英]Sencha Touch button click slower than list item click?

我正在对Sencha Touch应用程序进行性能分析,并遇到一个事实,即单击按钮可以更快地触发操作,而不是从Ext.List中为相同操作单击列表项。 我的时间轴分析数据表明该操作是针对列表项目的“计时器已触发”条件执行的。 该计时器的超时时间为300毫秒。 现在,对于按钮而言,没有计时器,因此只要触摸结束(以及所有单击共有的其他Sencha处理),便会立即执行操作。

就我而言,该动作是简单过渡到另一个视图而没有任何动画。

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

通过单击/点击按钮进行过渡: 通过单击/点击按钮进行过渡

按列表项单击/点击的过渡: 按列表项单击/点击转换

我试图深入研究源代码,但不明白为什么这实际上正在发生。 我的假设是列表等待300毫秒,以查看它实际上是轻击动作还是滚动动作。 但这是真的吗? 如果不是,谁能指出我正确的方向,以验证这个假设是否正确?

任何帮助将不胜感激!

我认为是因为pressedDelay配置,对于Ext.Button默认为0 ,对于Ext.DataView为100 ms

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

得到它了!

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

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将使列表项单击更快得多,但是同时,由于事件已排队,因此它还为在其他屏幕中进行幻像单击提供了空间。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM