javascript onclick处理程序中的性能问题
我用java脚本编写了一个游戏,虽然它可以工作,但对多次点击的响应很慢。下面是我用来处理点击的代码的一个非常简化的版本,如果您没有等待足够长的时间,它仍然无法响应第二次点击2。这是我需要接受的东西,还是有更快的方法为下一次点击做好准备 顺便说一句,我使用quirksmode重新编码竞赛中的AddEvent附加此函数javascript onclick处理程序中的性能问题,javascript,performance,browser,user-interface,cross-browser,Javascript,Performance,Browser,User Interface,Cross Browser,我用java脚本编写了一个游戏,虽然它可以工作,但对多次点击的响应很慢。下面是我用来处理点击的代码的一个非常简化的版本,如果您没有等待足够长的时间,它仍然无法响应第二次点击2。这是我需要接受的东西,还是有更快的方法为下一次点击做好准备 顺便说一句,我使用quirksmode重新编码竞赛中的AddEvent附加此函数 var selected = false; var z = null; function handleClicks(evt) { evt = (evt)?evt:((wind
var selected = false;
var z = null;
function handleClicks(evt) {
evt = (evt)?evt:((window.event)?window.event:null);
if (selected) {
z.innerHTML = '<div class="rowbox a">a</div>';
selected = false;
} else {
z.innerHTML = '<div class="rowbox selecteda">a</div>';
selected = true;
}
}
var selected=false;
var z=null;
功能手柄点击(evt){
evt=(evt)?evt:((window.event)?window.event:null);
如果(选定){
z、 innerHTML='a';
所选=假;
}否则{
z、 innerHTML='a';
所选=真;
}
}
在可以看到实时代码。我相信您的问题是更改
innerHTML
,这会改变DOM,这是一个巨大的性能问题。我相信您的问题是更改innerHTML
,这会改变DOM,这是一个巨大的性能问题。您可以尝试只更改类名而不是向DOM中删除/添加div(innerHTML属性就是这样做的)
比如:
var selected = false;
var z = null;
function handleClicks(evt)
{
var tmp;
if(z == null)
return;
evt = (evt)?evt:((window.event)?window.event:null);
tmp = z.firstChild;
while((tmp != null) && (tmp.tagName != 'DIV'))
tmp = tmp.firstChild;
if(tmp != null)
{
if (selected)
{
tmp.className = "rowbox a";
selected = false;
} else
{
tmp.className = "rowbox selecteda";
selected = true;
}
}
}
您可以尝试只更改类名,而不是向DOM中删除/添加div(innerHTML属性就是这样做的) 比如:
var selected = false;
var z = null;
function handleClicks(evt)
{
var tmp;
if(z == null)
return;
evt = (evt)?evt:((window.event)?window.event:null);
tmp = z.firstChild;
while((tmp != null) && (tmp.tagName != 'DIV'))
tmp = tmp.firstChild;
if(tmp != null)
{
if (selected)
{
tmp.className = "rowbox a";
selected = false;
} else
{
tmp.className = "rowbox selecteda";
selected = true;
}
}
}
我认为您的问题在于,第二次单击注册为dblclick事件,而不是单击事件。更改发生得很快,但除非等待,否则第二次单击将被忽略。我建议更改为mousedown或mouseup事件。我认为您的问题是第二次单击注册为dblclick事件,而不是click事件。更改发生得很快,但除非等待,否则第二次单击将被忽略。我建议更改为mousedown或mouseup事件。是的,您可能希望将innerHTML的性能与document.createElement()进行比较,甚至:
el.style.display = 'block' // turn off display: none.
分析您的代码可能会有帮助,因为您需要A/B各种重构:
el.style.display = 'block' // turn off display: none.
分析您的代码可能会有帮助,因为您需要A/B各种重构: