我正在使用大量的javascript开发一个phonegap应用程序。现在我正在使用Safari Developer Tool对其进行调试,特别是我专注于设备上的一些按钮似乎有点懒散。
所以我添加了一些console.timeEnd()
以更好地理解代码减速的位置,但“问题”是当我打开控制台时代码开始运行得更快而没有延迟,如果我再次关闭它,滞后回来
也许我的问题很愚蠢,但我无法弄清楚
由于
编辑:添加了代码
function scriviNumeroTastiera(tasto){
console.time('Funzione ScriviNumeroTastiera');
contenutoInput = document.getElementById('artInserito').value;
if ($('#cursoreImg').css('display') == 'none'){
//$('#cursoreImg').show();
}
else if (tasto == 'cancella'){
//alert(contenutoInput.length);
if (contenutoInput.length == 0) {
}
else {
indicePerTaglioStringa = (contenutoInput.length)-1;
contenutoInput = contenutoInput.substr(0, indicePerTaglioStringa);
$('#artInserito').val(contenutoInput);
//alert('tastoCanc');
margineAttualeImg = $('#cursoreImg').css('margin-left');
indicePerTaglioStringa = margineAttualeImg.indexOf('p');
margineAttualeImg = margineAttualeImg.substr(0, indicePerTaglioStringa);
margineAggiornato = parseInt(margineAttualeImg)-20;
$('#cursoreImg').css('margin-left', margineAggiornato+'px');
}
}
else {
//contenutoInput = document.getElementById('artInserito').value;
contenutoAggiornato = contenutoInput+tasto;
margineAttualeImg = $('#cursoreImg').css('margin-left');
indicePerTaglioStringa = margineAttualeImg.indexOf('p');
margineAttualeImg = margineAttualeImg.substr(0, indicePerTaglioStringa);
margineAggiornato = parseInt(margineAttualeImg)+20;
$('#cursoreImg').css('margin-left', margineAggiornato+'px');
$('#artInserito').val(contenutoAggiornato);
}
console.timeEnd('Funzione ScriviNumeroTastiera');
}
代码有点蹩脚,但它只是一个开始;)
答案 0 :(得分:7)
这可能发生,因为PhoneGap / Cordova创建了自己的控制台对象(在cordova.js中),当你打开Safari控制台时它会被覆盖(safari可能比phonegap更快,这可能是你更快注意到它的原因)。
因此,在不打开控制台的情况下正确测量时间的一种方法是转到旧的警报,因此您首先要在应用中的任何位置添加此代码:
var TIMER = {
start: function(name, reset){
if(!name) { return; }
var time = new Date().getTime();
if(!TIMER.stimeCounters) { TIMER.stimeCounters = {} };
var key = "KEY" + name.toString();
if(!reset && TIMER.stimeCounters[key]) { return; }
TIMER.stimeCounters[key] = time;
},
end: function(name){
var time = new Date().getTime();
if(!TIMER.stimeCounters) { return; }
var key = "KEY" + name.toString();
var timeCounter = TIMER.stimeCounters[key];
if(timeCounter) {
var diff = time - timeCounter;
var label = name + ": " + diff + "ms";
console.info(label);
delete TIMER.stimeCounters[key];
}
return diff;
}
};
(这只是模仿console.time和console.timeEnd方法,但它返回值,以便我们可以提醒它。)
然后,而不是呼叫:
console.time('Funzione ScriviNumeroTastiera');
你打电话给:
TIMER.start('Funzione ScriviNumeroTastiera');
而不是叫:
console.timeEnd('Funzione ScriviNumeroTastiera');
你打电话给:
var timeScriviNumeroTastiera = TIMER.end('Funzione ScriviNumeroTastiera');
alert('Ellapsed time: ' + timeScriviNumeroTastiera);
这样可以在不打开控制台的情况下为您提供适当的时间,因此可以计算出手机应用中的实际时间。
希望这有帮助。
干杯
答案 1 :(得分:1)
这真的不是你通常所期望的 - 打开控制台不应该加速任何事情。如果有的话,由于额外的调试挂钩和状态显示,它会使事情变慢。但是,我自己也有这样的案例。原因很简单:打开控制台会使网站的显示部分变小,代码效率在很大程度上取决于视口大小。因此,如果我是对的,那么缩小浏览器窗口应该与打开控制台具有相同的效果。