我正在开发一个带有phonegap的应用程序。在我的电脑上一切运行正常,但在我的移动设备上它太慢了。
我认为问题出在show函数上,android浏览器似乎需要很长时间来隐藏和显示元素
可以改进什么?
function show(id){
$('.view').hide()
//alert('show ' + id)
$('#'+id+'View').show()
scroll(0,0)
}
function getSoundHTML(id, myname, del){
if (del != true){
var imgsrc = 'plus.png'
var f = function(){
addToCostumSounds(id)
alert('added to favorites')
}
}else{
var imgsrc = 'minus.png'
var f = function(){
removeFromCostumSounds(id);
$(this).fadeOut().next('div').fadeOut();
}
}
var div = $('<div></div>').addClass('box').html(myname).css('border-color', '999999').click(function(){
play(id)
})
var img = $('<img></img>').attr('src', imgsrc).addClass('sideimg').click(f)
return $('<div></div>').append(img).append(div)
}
for(var category in categories){
var f = function(category){
$('#'+category+'Btn').click(function(){
show(category)
var categoryView = $('#'+category+'View')
for(var key in categories[category]){
var div = getSoundHTML(key, categories[category][key])
categoryView.prepend(div)
}
var img = '<img src="menu.png" class="menuimg"/>'
categoryView.prepend(img)
categoryView.append(img)
})
}
f(category)
}
html:
<div class="btn" id="noBtn">no _</div>
<div class="btn" id="thatIsBtn">that is _</div>
<div class="btn" id="thereIsBtn">there is _</div>
<div class="btn" id="thisIsBtn">this is _</div>
...
<div class="view" id="noView"></div>
<div class="view" id="thatIsView"></div>
<div class="view" id="thereIsView"></div>
<div class="view" id="thisIsView"></div>
...
答案 0 :(得分:2)
虽然它可能不会对桌面产生影响,但是在正确位置大量缺少分号可能会对移动设备产生影响。
JavaScript引擎必须运行并尝试找出分号需要去的地方。请参阅this transcript from the ECMAScript specification。
老实说,我认为这只节省了几毫秒的时间,但它是现在的起点 - 也是未来的良好实践。
答案 1 :(得分:1)
这是你的问题:
for(var category in categories){
var f = function(category){
...
for(var key in categories[category])
...
}
f(category)
}
这里有两个大问题:
f
函数完全移出循环。for ... in
循环中有一个for ... in
。这很大程度上是由于我指出的第一个问题,但一般而言,从性能的角度来看,嵌套循环是一个很大的禁忌。答案 2 :(得分:0)