【发布时间】:2019-07-29 09:43:46
【问题描述】:
我在一个项目中工作,我正在构建一个 Web 应用程序,该应用程序从日志文件中读取任务并将数据作为 websocket 消息发送到浏览器。我将 Django 用作服务器。当我想在浏览器中显示所有消息时遇到问题。由于大量消息,浏览器变得无响应。要在浏览器中显示消息,我使用 .innerhtml。
这是我的代码:
接受消息的函数:
socket.onmessage = (e) => {
let consoleOutput = document.getElementById("console-output");
consoleOutput.innerHTML += e.data + "<br>";
console.log("message", e);
};
发送消息的函数:
def websocket_receive(self, event):
response = json.loads(event["text"])
app_name = response.get("app_name")
path_to_logs_file = f"{pathlib.Path.home()}/logs/{app_name}/file.log"
process = subprocess.Popen(["tail", "-f", path_to_logs_file],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
start_time = datetime.datetime.now()
while True:
decoded_line = process.stdout.readline().decode("utf-8")
if decoded_line == '' and process.poll() is not None:
self.send({
"type": "websocket.close"
})
break
else:
self.send({
"type": "websocket.send",
"text": str(decoded_line).strip()
})
如何加快向元素追加数据的速度?我将不胜感激任何有用的建议。
【问题讨论】:
-
consoleOutput.innerHTML +=这是不断连接一个字符串,然后导致 DOM 重新渲染,.. 你会发现使用document.createElement("div")会更好,然后使用appendChild。或者,如果您只想要没有div的文本,请使用createTextNode
标签: javascript python html websocket