我有一个
当我的笔记本电脑插入电源时,这很有效,但是如果我拔掉电源,我的笔记本电脑的处理能力会下降(较低规格的平板电脑、手机等也存在同样的问题)。当可用的处理能力较少时,浏览器(Chrome)完全锁定。
我猜想 javascript 接收更新的速度比浏览器渲染它们的速度快,因此导致选项卡被锁定。
如果浏览器无法按请求的速率更新,我希望它在准备好渲染新更新之前放弃新数据。是否有一种标准方法来检查浏览器是否有足够的时间来渲染更新,并在这种情况下丢弃新帧?
*[编辑]
我使用 Chrome 的分析器进行了一些挖掘,确认(如预期)重新绘制图表占据了大部分处理能力。
WebSocket
,以大约50hz的速率接收数据。每次将更新推送到浏览器时,它会将JSON数据转换为一些漂亮的图表。$(document).ready(function() {
console.log('Connecting web socket for status publishing')
allRawDataPublisher = new ReconnectingWebSocket("ws://" + location.host + '/raw/allrawdata');
var rawUnprocessedData = [];
for (i = 0; i < 256; i++)
{
rawUnprocessedData.push({x:i, y:0});
}
var unprocessedRawChart = new CanvasJS.Chart("rawUnprocessedData",{
title :{ text: "Raw Unprocessed Data"},
axisX: { title: "Bin"},
axisY: { title: "SNR"},
data: [{ type: "line", dataPoints : rawUnprocessedData},{ type: "line", dataPoints : noiseFloorData}]
});
var updateChart = function (dps, newData, chart) {
for (i = 0; i < 256; i++)
{
dps[i].y = newData[i];
}
chart.render();
};
allRawDataPublisher.onmessage = function (message) {
jsonPayload = JSON.parse(message.data);
var dataElements = jsonPayload["Raw Data Packet"]
updateChart(rawUnprocessedData, dataElements["RAW_DATA"].Val, unprocessedRawChart)
};
unprocessedRawChart.render();
});
当我的笔记本电脑插入电源时,这很有效,但是如果我拔掉电源,我的笔记本电脑的处理能力会下降(较低规格的平板电脑、手机等也存在同样的问题)。当可用的处理能力较少时,浏览器(Chrome)完全锁定。
我猜想 javascript 接收更新的速度比浏览器渲染它们的速度快,因此导致选项卡被锁定。
如果浏览器无法按请求的速率更新,我希望它在准备好渲染新更新之前放弃新数据。是否有一种标准方法来检查浏览器是否有足够的时间来渲染更新,并在这种情况下丢弃新帧?
*[编辑]
我使用 Chrome 的分析器进行了一些挖掘,确认(如预期)重新绘制图表占据了大部分处理能力。
setTimeout
不会启动任何单独的进程-它只是使回调函数的执行异步化。 - nicholaswminsetTimeout
将会到期并调用它们的回调函数,从而导致相同的问题。 - nicholaswmin