分帧加载

  /**

     * 分帧执行 Generator 逻辑

     *

     * @param generator 生成器

     * @param duration 持续时间(ms)

     *          每次执行 Generator 的操作时,最长可持续执行时长。

     *          假设值为8ms,那么表示1帧(总共16ms)下,分出8ms时间给此逻辑执行

     */

    private executePreFrame(generator: Generator, duration: number) {

        return new Promise<void>((resolve, reject) => {

            let gen = generator;

            // 创建执行函数

            let execute = () => {

                // 执行之前,先记录开始时间戳

                let startTime = new Date().getTime();

                // 然后一直从 Generator 中获取已经拆分好的代码段出来执行

                for (let iter = gen.next(); ; iter = gen.next()) {

                    // 判断是否已经执行完所有 Generator 的小代码段

                    // 如果是的话,那么就表示任务完成

                    if (iter == null || iter.done) {

                        resolve();

                        return;

                    }

                    // 每执行完一段小代码段,都检查一下是否

                    // 已经超过我们分配给本帧,这些小代码端的最大可执行时间

                    if (new Date().getTime() - startTime > duration) {

                        // 如果超过了,那么本帧就不在执行,开定时器,让下一帧再执行

                        scheduleOnce(this, () => {

                            execute();

                        });

                        return;

                    }

                }

            };

            // 运行执行函数

            execute();

        });

    }


///使用

 await this.executePreFrame(this.LoadBuildTexture(), 8);

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容