jQuery在iPad上运行极慢
我在一个测试用例上运行了一些jQuery,它在我们的iPad2上运行得非常慢 不过,它在我们的台式机和笔记本电脑上反应迅速。我已经尝试删除所有选择器(如果可能的话),而是使用存储的引用,这没有多大帮助 在那次改变之前是在那之后 以下是当前jQuery代码:jQuery在iPad上运行极慢,jquery,performance,ipad,Jquery,Performance,Ipad,我在一个测试用例上运行了一些jQuery,它在我们的iPad2上运行得非常慢 不过,它在我们的台式机和笔记本电脑上反应迅速。我已经尝试删除所有选择器(如果可能的话),而是使用存储的引用,这没有多大帮助 在那次改变之前是在那之后 以下是当前jQuery代码: $().ready(function () { var $varSelected = 'undefined'; var $this = 'undefined'; var varPrev = ''; var va
$().ready(function () {
var $varSelected = 'undefined';
var $this = 'undefined';
var varPrev = '';
var varNew = '';
$('.btn').click(function () {
$this = $(this);
if ($varSelected !== 'undefined') {
// Get previous value
varPrev = $varSelected.text();
// Find value we're trying to add
varAdding = $this.attr('value');
if (varAdding == 'Clr') {
varNew = '';
} else {
varNew = varPrev + varAdding;
}
// Write new value
$varSelected.text(varNew);
}
});
$('.qtyBox').click(function () {
$this = $(this);
// Check if we've previously had a selected box
if ($varSelected === 'undefined') {
// Didn't have one before -- nothing special
} else {
// Had one selected. We need to unselect it.
$varSelected.removeClass('Selected');
}
// Select the one we have now
$varSelected = $this;
// Add formatting
$this.addClass('Selected');
// Clear value
varNew = '';
$this.text(varNew);
});
});
我将/5/版本(预参考)上载到,而/6/版本(参考)上载到
有人有什么见解吗
谢谢我可以在我的iPad2上测试你的页面。输入延迟似乎是移动点击事件延迟,在移动浏览器(.)上,点击事件在0.3秒后触发。此延迟是为了让浏览器可以监听双击。移动浏览器提供了四个额外的事件处理程序,您可能感兴趣的是clickend。当用户从屏幕上抬起手指时,clickend事件被触发 下面的代码来自MDN
到底什么是慢的?页面的加载?与页面交互?二者都您可以使用事件委派进行一些优化,但这只会改善最初的影响,不会改善与页面的交互。点击/单击方框、运行
$('.qtyBox')时会感觉到缓慢。单击
功能以及点击/单击按钮输入数量时,当它运行$('.btn')时。单击
函数。@KevinB-它实际上加载得很好。它可能加载得很慢,但速度不够慢,以至于我注意到了它。点击/单击时,在那里运行的脚本响应速度非常慢。谢谢对我来说似乎很正常,问题是ipad上300毫秒的点击延迟吗@rlb-请为问题添加一个答案,这样我就可以给你应得的积分。;)*编辑——如在一般回答中。你用你的bit o’Research解决了我的问题,只是为了其他人搜索——我使用了典型的jQueryclick
事件,它的延迟很慢。当我切换到jquerymobile并将事件更改为tap
s时,它毫不延迟地工作了。谢谢我在一个主干应用程序中遇到了这个问题,通过包含这个库解决了这个问题(因此它可以在iPad和非触摸设备上工作):
var el = document.getElementsById("MyButtonID");
el.addEventListener("touchend", handleEnd, false);