【发布时间】:2020-05-18 08:55:56
【问题描述】:
我有 9 个来自不同站点的 websocket 连接,用于使用数据更新 DOM。目前,我正在连接所有网络套接字并监听所有网络套接字,并通过函数调用更新数据。
我面临的问题是有很多 websocket 连接,并且存在内存和 CPU 使用问题。如何使用 service worker 和 web worker 来优化这么多的 websocket 连接?
async function appendGatePublicTickersData(e) {
if (e.event == "update" && e.result[0].contract == "BTC_USD") {
if ('total_size' in e.result[0]) {
$(".gate-btc-open-interest").html(commaNumber(e.result[0].total_size))
if ('last' in e.result[0]) {
$(".gate-btc-open-value").html(commaNumber(customFixedRounding((e.result[0].total_size / e.result[0].last), 4)))
}
}
if ('volume_24h_usd' in e.result[0]) {
$(".gate-btc-24-volume").html(commaNumber(e.result[0].volume_24h_usd))
}
if ('volume_24h_btc' in e.result[0]) {
$(".gate-btc-24-turnover").html(commaNumber(e.result[0].volume_24h_btc))
}
if ('funding_rate' in e.result[0]) {
var fundingRateBtcGate = customFixedRounding(e.result[0].funding_rate * 100, 4)
$(".public-gate-btc-funding").html(fundingRateBtcGate)
}
if ('funding_rate_indicative' in e.result[0]) {
var predictedRateBtcGate = customFixedRounding(e.result[0].funding_rate_indicative * 100, 4)
$(".public-gate-btc-predicted").html(predictedRateBtcGate)
}
}
}
var pubGateWs = new WebSocket("wss://fx-ws.gateio.ws/v4/ws/btc");
pubGateWs.addEventListener("open", function() {
pubGateWs.send(JSON.stringify({
"time": 123456,
"channel": "futures.tickers",
"event": "subscribe",
"payload": ["BTC_USD", "ETH_USD"]
}))
});
pubGateWs.addEventListener("message", function(e) {
e = JSON.parse(e.data)
appendGatePublicTickersData(e)
});
pubGateWs.addEventListener("close", function() {});
【问题讨论】:
-
在 Web Worker 中移动发送和接收数据部分可能会提高这方面的性能。是数据传输的瓶颈还是更新 DOM 的瓶颈?
-
我不确定,但是当我连接到所有 websocket 时,CPU 和 RAM 使用率会显着增加。如何将 websocket 移动到 Web Worker?
标签: javascript jquery websocket service-worker web-worker