我正在创建一个动画条形图,它会重绘从标头收到的每个新数据包消息。首先,我创建一个函数来检查图表是否已经存在,如果不存在则构建它:
function drawAccel() {
if (chart == null) {
chart = Stripchart(document.getElementById('accel'));
}
if (orienteer == null) {
orienteer = Orienteer(document.getElementById('orienteer'));
}
chart.draw();
orienteer.draw();
}
之后我运行这个函数,该函数在收到的每个标头数据包上循环并重绘图表:
function messagecb(header, message) {
if(header.type == 6) {
// echo reply
// processEchoReply(message);
}else if(header.type == 4) {
// accel
var accels = message.b64UnpackAccelMsg();
for(var index in accels) {
var accel = accels[index];
var totalClock = accelEpochAdjust(accel.clock);
addAccelDatum(totalClock, accel.x, accel.y, accel.z);
}
drawAccel();
} else if(header.type == 3) {
// info
var info2 = message.b64UnpackInfo2Msg();
displayCurrentPosition(info2.fixtime, info2.lat, info2.lon, info2.alt);
displayMobileStatus(info2.rssi, info2.bandClass, info2.batt);
} else if(header.type == 11) {
btReceive(header, message);
}
}
我在使用这种方法的所有现代浏览器中都没有问题,但在 IE8 中它确实慢了很多。这会导致出现运行缓慢的脚本错误,最终导致应用程序崩溃。我还认为我当前的逻辑导致图表重绘,即使图表在视觉上没有改变,但我不确定如何检查。很抱歉啰嗦了,非常感谢任何帮助!