examples-vite/dispose/index.ts (84 lines of code) (raw):

import { StandardLayer } from '@polaris.gl/gsi' import { PolarisLite } from '@polaris.gl/lite' import { PolarisThree } from '@polaris.gl/three' import { generateScene } from '@gs.i/utils-random-scene' import { IndicatorProcessor } from '@gs.i/processor-indicator' import { HelperLayer } from '@polaris.gl/layer-std-helper' const createLiteAndDispose = async () => { const p = new PolarisLite({ container: document.querySelector('#container') as HTMLDivElement, background: 'transparent', }) const h = new HelperLayer() p.add(h) h.setProps({ box: false }) const scene = generateScene({ // scale: 1000, count: 10, depth: 10, useAnimation: true, useSprite: true, usePoint: false, resolution: [500, 500], }) const l = new StandardLayer({}) l.view.gsi.group.add(scene) p.add(l) l.addEventListener('dispose', () => { console.log('layer dispose') // generateScene 中的动画使用 interval 实现,需要这样清除来避免内存溢出 scene.extras.intervalIDs.forEach((id) => clearInterval(id)) }) p.addEventListener('dispose', () => console.log('polaris dispose')) setTimeout(() => p.dispose(), 1000) } const createThreeAndDispose = async () => { const p = new PolarisThree({ container: document.querySelector('#container') as HTMLDivElement, background: 'transparent', }) const h = new HelperLayer() p.add(h) h.setProps({ box: false }) const scene = generateScene({ // scale: 1000, count: 10, depth: 10, useAnimation: true, useSprite: true, usePoint: false, resolution: [500, 500], }) const l = new StandardLayer({}) l.view.gsi.group.add(scene) p.add(l) l.addEventListener('dispose', () => { console.log('layer dispose') // generateScene 中的动画使用 interval 实现,需要这样清除来避免内存溢出 scene.extras.intervalIDs.forEach((id) => clearInterval(id)) }) p.addEventListener('dispose', () => console.log('polaris dispose')) setTimeout(() => p.dispose(), 1000) } console.group('test polaris lite') for (let i = 0; i < 20; i++) { await test(true, 'createLiteAndDispose', createLiteAndDispose) } console.groupEnd() console.group('test polaris three') for (let i = 0; i < 20; i++) { await test(true, 'createThreeAndDispose', createThreeAndDispose) } console.groupEnd() // === async function test( enable: boolean, name: string, fun: () => void | Promise<void>, duration = 1000 ) { if (!enable) return console.group(name) await fun() await new Promise((resolve, reject) => { setTimeout(() => resolve(true), duration) }) console.log(`test end (${name})`) console.groupEnd() return }