【发布时间】:2017-07-11 13:51:29
【问题描述】:
使用 RecordRTC 库,我将我的 React Web 应用程序与网络摄像头视频录制、回放和保存功能挂钩。来自原生应用程序开发,我总是担心潜在的内存泄漏,这通常可以通过检查系统内存或滞后的 UI 体验来轻松诊断。在 Web 应用程序中,您可以执行哪些诊断来查看 JS 对象是否被正确创建和删除而没有泄漏。
当我开始集成回放功能时,我的担忧出现了,如下所示。 requestusermedia 方法在 React 组件挂载时实例化网络摄像头流。事实上,src 状态被分配到视频流的 url。之后,只要单击停止按钮,就会创建一个新的 url,代表录制视频的 webm 文件,并将其分配给相同的 src 状态。流式传输和回放的功能按计划工作。但是,我担心继续创建和重播视频,本质上创建一个新的 url 包装 webm 文件只会导致内存泄漏,除非刷新浏览器。
我可以在浏览器级别进行任何检查来诊断此问题吗?或者这是我在 Web 应用程序世界中根本不应该关心的事情?
requestUserMedia() {
captureUserMedia((stream) => {
this.setState({ src: window.URL.createObjectURL(stream)});
});
}
handleRecord(){
if (!this.state.record) {
captureUserMedia((stream) => {
var recorder = RecordRTC(stream, {
type: 'video'
});
recorder.startRecording();
this.state.recordVideo = recorder;
});
} else {
var recorder = this.state.recordVideo
recorder.stopRecording(() => {
var blob = recorder.getBlob();
var url = window.URL.createObjectURL(blob);
this.setState({ src: url })
});
}
let newRecordState = !this.state.record
this.setState({
record: newRecordState
})
}
【问题讨论】:
-
Javascript 有垃圾收集。如果您担心,不再引用的对象将被垃圾收集。如果您保留对不需要的对象的不必要引用,那当然是实现问题。 Chrome 在检查工具栏中有一个性能选项卡,可以记录内存使用情况。