[英]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.