解决小游戏播放音频大幅内存增加,导致gc频繁调用

当前 Bug 的表现 : 每次播放音频,整个音频的base64内存分配三次,导致gc频繁调用

ha = function(e) {

            var t = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : 0

              , n = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : ""

              , r = U.default.appLaunchInfo

              , o = "";

            o = Object.keys(r.query || {}).map(function(e) {

                return e + "=" + r.query[e]

            }).join("&"),

            o = encodeURIComponent(o);

重点 重点 问题出在这,.join每次播放都会把音频base64内存复制1次,每次播放要三次********

            var a = [Math.round(Date.now() / 1e3), r.scene, "", r.sessionid || r.sessionId, r.path, o, $(), wx && wx.version && wx.version.version || "", 5, t, n, e].join(",");

            Reporter.reportKeyValue({

                key: "MediaCompStatus",

                value: a

            })

        }

e是音频的base64文件数据,非常大 (几M)

  • 当前 Bug 的表现 : 每次播放音频,整个音频的base64内存分配三次,导致gc频繁调用

ha = function(e) {

            var t = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : 0

              , n = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : ""

              , r = U.default.appLaunchInfo

              , o = "";

            o = Object.keys(r.query || {}).map(function(e) {

                return e + "=" + r.query[e]

            }).join("&"),

            o = encodeURIComponent(o);

重点 重点 问题出在这,.join每次播放都会把音频base64内存复制1次,每次播放要三次********

            var a = [Math.round(Date.now() / 1e3), r.scene, "", r.sessionid || r.sessionId, r.path, o, $(), wx && wx.version && wx.version.version || "", 5, t, n, e].join(",");

            Reporter.reportKeyValue({

                key: "MediaCompStatus",

                value: a

            })

        }

e是音频的base64文件数据,非常大 (几M)

直接使用微信提供的接口解决了这个问题

wegame.js 格式化后的位置

1赞