我在我的一个ember项目中使用了three.js。不幸的是,当JS Heap随着时间的推移而逐渐消失时,我在解决three.js对象方面做错了。
我创造了一个Ember Twiddle:https://ember-twiddle.com/70fcf110ceec3cd39b77cb9c8915f762
(在这个例子中,只有最小的,没有几何形状,没有材料,没有网格)
打开Chrome开发者工具性能标签,选择“内存”并开始录制。点击Ember Twiddle App中的“start”,让它运行2分钟。停止录制并查看JS堆,节点和监听器。
相关守则:
didInsertElement() {
this._super(...arguments);
const container = this.$('.webgl-container');
const renderer = new THREE.WebGLRenderer({antialias: true, alpha: true});
renderer.setSize( container.width(), container.height() );
container.append( renderer.domElement );
this.set('webGLRenderer', renderer);
const camera = new THREE.PerspectiveCamera();
const scene = new THREE.Scene();
renderer.render( scene, camera );
},
willDestroyElement() {
const renderer = this.get('webGLRenderer');
renderer.forceContextLoss();
renderer.context = null;
renderer.domElement = null;
this._super(...arguments);
}
有没有人知道如何在Ember中正确销毁three.js对象?