- 微信小游戏纹理压缩实践
一、概述 1.1 图形资源内存 小游戏运行过程中,内存过大是最为困扰开发者的一个问题。因为小游戏的内存使用过大时,在操作系统内存管理机制下,有可能会导致闪退或无法运行从而使得用户流失。据统计有超过千款小游戏内存使用不佳(超过优化建议值500MB)。 [图片] 小游戏内存相关介绍可以参考https://developers.weixin.qq.com/minigame/dev/guide/best-practice/memory.html 现网运行时内存数据查看可使用《小游戏数据助手》-性能-运行性能 在内存的使用中, 图形渲染资源往往是游戏内存消耗大户,比如《星途》的内存使用大概如图所示(图片来自《小游戏云测试服务》,开发者请可通https://developers.weixin.qq.com/community/minigame/doc/000846255205f8c92d5912fca5e401参与内测)。 [图片] 可以看到图形内存(graphic)占比是很大的, 休闲游戏犹如是,对于重度游戏我们发现图形渲染所使用的内存占比更大。那么优化小游戏的图形内存对于整体内存使用率的降低是非常有必要的。 1.2 纹理压缩 对于图形渲染资源的内存使用是否有比较好的办法去降低呢? 纹理压缩是一种专为在计算机图形渲染系统中存储纹理而使用的图像压缩技术。与普通图像压缩算法的不同之处在于,纹理压缩算法为纹素的随机存取做了优化。 二、 压缩算法与性能 2.1 压缩算法 Android设备中一般使用ETC1压缩,一种有损的图像压缩方式。 ETC1是OpenGL2.0支持的标准,压缩之后每个像素占4bit,压缩之后的格式为KTX或者PKM,前者支持存储多纹理,后者只支持单纹理。 ETC1的缺点是不支持Alpha通道,不支持有透明度的图片压缩。 ETC2解决了Alpha通道,但是它是OpenGL3.0标准,考虑到2.0设备的市场占有率,一般使用ETC1。 iOS设备中采用的图像格式一般是PVR,也是一种有损的图像压缩方式。PVR压缩分为两种,PVRTC2和PVRTC4。 除了压缩内存,PVR可以直接被显卡读取,载入速度更快;缺点是PVR需要PowerVR芯片支持,目前iOS设备都能完美支持,Android支持尚少;此外,PVRTC4只支持方形贴图,非方形会被处理成方形,且长宽必须为2的幂。 2.2 文件格式 KTX和PKM都是纹理存储的文件格式,前者支持存储多纹理,后者只支持单纹理,大部分移动设备的 GPU 均支持这两种格式。可以有效降低设备的显存占用,提高运行效率和稳定性。 2.3 压缩纹理的性能优势 测试的手机是一加3T, 实验中使用了30张都是584KB的JPG图片进行渲染。 [图片][图片][图片] 图1:实验前初始内存 图2:经过纹理压缩的图片渲染,GPU内存消耗总量。 图3:JPG格式的图片渲染,GPU内存消耗总量。 内存比较:使用纹理压缩时内存从78(176MB-98MB)降低到了20MB(118MB-98MB), 带来约为70%的图形资源内存消耗。 下面就是使用了Snapdragon Profiler工具进行的一些测试数据 使用了纹理压缩的测试数据: [图片] Total Texture Usage 只有46M 未使用纹理压缩的测试数据: [图片] Total Texture Usage为148M 从这里也可以佐证压缩纹理时图形内存占用能得到极大的降低。 三、Cocos Creator微信小游戏纹理压缩实践 引擎文档: https://docs.cocos.com/creator/manual/zh/asset-workflow/compress-texture.html 在cocos creater里面进行简单的配置,就可以在打包小游戏的过程中把图片进行纹理压缩。 [图片] 这里不仅能选择压缩算法,还能选择压缩算法质量等参数,非常方便。 不过目前引擎自带设置还不能支持批量操作(其实有方法解决不能批量操作的问题,这就要在cocos社区上找)。 四、Egret 微信小游戏纹理压缩实践 引擎文档:http://developer.egret.com/cn/github/egret-docs/Engine2D/bitmapTexture/ktx/index.html 白鹭是没有提供像Cocos Creater那样的配置的,是需要我们手动转。 白鹭官方提供了4种工具让我们进行制作压缩纹理: [图片] 我们选择了texture-compressor 这个工具进行转换,该工具是可以批量操作的。 npm install texture-compressor 进行安装 我这里的目录结构看下图 [图片] input文件夹是存放纹理压缩前的图片,而output是存放纹理压缩后生成的.KTX后缀的文件。 index.js是执行文件,代码如下。 上面这张图的配置是转换ETC的用于安卓系统。 [图片] 下面这张图是转换PVRTC的用于IOS系统。 [图片] 运行中如何加载使用压缩纹理则可以通过上述引擎文档参考demo。 五、Laya微信小游戏纹理压缩实践 引擎文档:https://ldc2.layabox.com/doc/?nav=zh-ts-4-14-7 目前LayaAir2.x版本提供的纹理压缩功能是只有VIP会员账号才能使用,可以支持批量转换的操作如下。‘ [图片] [图片] 选择需要纹理压缩的图片所在文件夹和转换后的保存路径,接着选择使用平台按确定就可以了。使用方法也很简单:[图片] 代码片段摘自Layabox官方文档提供,代码中根据所在系统判断使用哪个的纹理压缩文件就可以了。 六、压缩纹理需要注意的一些问题 从上述实践过程中,我们发现: 1. 压缩纹理能够很好的节省图形资源内存,从而让我们小游戏的内存使用得到优化。 2. 引擎制作工具也提供了支持, 让我们在制作资源制作打包时能够快速使用压缩纹理。 然而,是否所有情况都适合使用压缩纹理呢? 是否还存在使用上需要注意的问题 资源大小 纹理压缩的资源体积会比常规压缩算法偏大, 硬件对不同压缩算法的尺寸有要求,这也是最为影响开发者制作流程的一个因素。典型地,在Android中的ETC1纹理压缩算法需要长宽尺寸是2的N次幂, 而iOS中的PVRTC则除了2的N次幂外还要求是正方形。例如原图尺寸为 228x380 的图片,转换成 PVRTC 的 ktx后,尺寸为 512x512。 我们来举个制作不太符合此规范的资源的例子,原始图像是:879 x 1242。那么:[图片] 可以看到,ETC1, PVRTC压缩后的文件体积比以前大很多(在考虑mipmap的情况下,还会增加30%左右) 因此,在使用纹理压缩时,最为挑战开发者的一个问题就是如何让美术资源更符合压缩算法的标准尺寸。美术资源最好是2的N次幂,在iOS PVRTC下则需要长宽相等。 2. alpha通道透明度 Android下ETC1是不支持alpha通道的,因此还需要额外体积去多存储这部分alpha通道数据,而PVRTC则默认支持。 3. 兼容性 硬件相关,要考虑兼容性。 我们这里总结下常见的几种纹理压缩特性:[图片] 微信小游戏开发者在研发过程中有什么技术疑问或建议,欢迎与我们交流! [图片]
2019-11-04 - 网络请求的最大并发限制是10个的具体定义是?
文档关于网络请求的限制部分有一些不明白,求解答: wx.request、wx.uploadFile、wx.downloadFile 的最大并发限制是 10 个 这里的10个,指的是同步发起的网络请求数不能超过10个,还是指已发起但是未结束的请求不能超过10个?
2022-10-20 - wx.request的最大并发限制是 10个?
wx.request、wx.uploadFile、wx.downloadFile 的最大并发限制是 10 个;请问文档中的这句话是什么意思? 除了wx.request可以网络请求,还有其他方法吗? 现在深圳地铁的小程序支付并发量应该上千了吧,这个是什么解决的。
2021-01-20 - 使用 worker 找不到模块?
[图片] [图片] wx.createWorker() 在 app.ts 中调用,我还试了 wx.createWorker('/miniprogram/workers/worker') wx.createWorker('/workers/worker') 都通通不行,这是怎么回事
2023-03-29 - 「基础库2.30.3」无法使用worker
基础库升级到2.30.3之后,创建的worker无法使用postMessage,其他基础库可以使用。急需解决!!! [图片]
2023-03-10 - 苹果手机无法获取worker文件?
[图片] 在安卓端是能正常读取的,ios之前还好好的,是更新了什么吗? 接着:结果了无法找到worker文件的问题,去掉wx.createWorker()路径/开头就好,但是错误还存在变成了以下情况: [图片]
2023-07-06 - 安卓微信客户端更新到8.0.37后,小程序 worker 内的计算效率大大降低,大概是之前的1/8
安卓微信客户端更新到8.0.37后,小程序 worker 内的计算效率大大降低,大概是之前的1/8;
2023-06-19 - 【急】微信8.0.37版本,安卓手机启动生产小程序报错,小程序使用了worker功能
[图片] 进入小程序,报错如上图,最新版本微信8.0.37会出现这个问题,旧版本微信正常,请问如何解决?急求
2023-06-16 - 部分苹果手机worker文件无法找到
https://developers.weixin.qq.com/miniprogram/dev/api/worker/wx.createWorker.htmlhttps://developers.weixin.qq.com/miniprogram/dev/api/worker/Worker.onProcessKilled.html
2023-05-26 - 优秀开发者必备条件,你具备了吗?
课程目标: 要如何设计一款创意小游戏一直是开发者们所苦恼的地方,这里推荐了留存、拉新、收入三个维度上比较值得学习的“套路”。 课程大纲: 一、留存“套路” 二、拉新“套路” 三、收入“套路” 谈及小游戏创意,不少开发者都认为要不落俗套,“反套路而行”。 小游戏设计团队主动为大家推荐了留存、拉新、收入三个维度上比较值得学习的“套路”: 留存“套路” 1、新手指引:如果想一股脑地把所有内容都塞给新手用户,用户很可能只记住了一半,没有办法上手,这样就谈不上喜欢或者继续玩下去,自然留存就低。 2、针对平台的差异化设计:想要更多小游戏的“萌新”加入,要考虑的是小游戏平台的用户差异性,建议制作团队降低一些游戏的难度,让”萌新“更好上手。 拉新“套路” 除了PVP对战、榜单等竞争性玩法外,合作性玩法也是非常常用且有效的方法。 除此之外,关系链也是能够形成深度互助的创意性玩法,可以变单向求助的互动模式为双向互动,带来更有质量的拉新。 收入“套路” 可以采用激励视频广告来更新传统的内购模式。在传统内购的基础上加上激励视频广告可以让用户更直观了解“我要买的究竟是什么”,打消用户顾虑。 广告也可以反向其道,吊起用户胃口,激发用户点击或消费广告的欲望。 [视频] 小游戏中的设计“套路” 微信公开课讲师 胥晓欢 先讲讲我们观测到这一年以来小游戏的一些优秀的案例。 当然这些优秀案例只是我们观测到平台中大量优秀案例中极少的部分,我们希望通过这几个案例以点带面来谈谈大家关注的几个维度上有哪些有创意的做法。 我的同事已经跟大家讲过微信小游戏用户画像。我们的用户有两个非常重要的特征: 相对传统游戏市场,女性占比确实比较高;成年人用户占比增长也非常快。根据这两个特征,我们可以有一个结论。我们觉得对于小游戏而言,用户确实会更偏新手向一些。 这样的结论对我们做小游戏的设计会有什么影响?先看看对留存的影响。 关于小游戏留存 为了降低新手入门的门槛,绝大部分小游戏在做时都会使用一个新手教程。 对于简单操作的游戏,只要做简单的示意就好了,比如《跳一跳》。它确实玩法特别简单,那我们只用对这个游戏的玩法进行一个录屏,把它放在开始前的背景上,就可以起到非常清晰的新手引导作用。 再比如这款射击类游戏,操作也很简单,只用在这个游戏上用手指示意点这里就可以了。 但并不是所有微信小游戏都是这种简单的游戏,面对很复杂的游戏应该怎么做? 我们前面说过我们的用户比较偏新手项,而大部分制作团队却太过专业。 专业人士做游戏时,特别是新手引导,我们觉得大家会过于追求高效表达,通常大家都想在一场新手引导中塞入所有的复杂设计。但这样的做法会很容易把新手挡在门外。 《英雄爱三国》这款小游戏,它因为玩法很早就入选了首轮创意小游戏,但最初他们只想打磨好产品,不做平台差异化的做法也遭遇到比较惨的留存。 制作团队在第一版的新手引导中几乎做了所有想塞给用户的东西,用户可能只记住了一半,没有办法上手,就谈不上喜欢。 他们团队在观察到这个现象后,就做了一个新手引导的改版。他至少做了三件事情: 增加新手语音;将一场战斗拆解为三场;引入两场复习巩固教学成果,巩固教给他的战斗技巧。这一系列更改后,这款游戏的次日留存有了20%的提升。 我们当然相信这么高的留存提升,肯定不仅仅是因为新手引导带来的。 高留存是一个细致活,除了新手引导之外还有哪些事情可以做? 《跳舞的线》是一款引入了跑酷元素的音乐游戏。制作团队把游戏从APP移植到小游戏上时,获得了一个他们以往没有听到过的反馈: 用户经常抱怨找不到路在哪儿。 为了给萌新开路,制作团队为小游戏做了差异化设计,例如删减场景动画,让用户保持更集中的注意力;做关卡定制,让路径更加清晰。 我们曾经听说制作团队考虑要不要引入公会模式。但实际上他们试用了微信PVP对战模式后,看到数据留存实际上比APP高很多。所以制作团队最终在小游戏版上也放弃了公会的做法。 刚刚提到PVP对战模式,也提到小游戏对于关系链的用法。对于关系链还有没有其他的玩法? 关于小游戏拉新 大家知道,小游戏是不会做中心化分发的,但我们还是把腾讯的杀手锏关系链释放出来给开发者,我们希望开发者能用真正的玩法去做引导,自发的进行一个传播,获得一个有质量的留存。 传统上,我们像《跳一跳》一样会做榜单,希望通过排名机制引入朋友参与互动。 除了刚才说的PVP对战和榜单这一类竞争做法外,关系链还经常能看到合作的玩法,特别是答题类的合作玩法。 曾经在网上看到一个段子。这个段子的楼主说他爸爸是一个物理老师,有一段时间他爸爸整个办公室都迷上这个游戏,但他爸爸是一个传统的中年物理老师,永远只适合达数学和物理题。 他爸爸对面坐了一个非常年轻的生物老师,很快上了白银。他爸爸有不服气,最终他们办公室的中年同盟想到一个办法,凑齐了生物老师、地理老师、政治老师、语文老师和历史老师一起组团开黑。 我第一次知道原来头脑王者也可以开黑上王者。这个说明我们的答题玩法确实很适合设计成多人玩法。 在设计成多人玩法时,很多创意游戏很好的利用了平台给到的能力,比如动态结构化消息,非常适合还没有来得及参与的好友参与其中。 除了对战和组队这些大家常见的小游戏关系链玩法外,也注意到一些小众的益智游戏做了有趣的尝试。 通常来说,在微信上求助是单向的。《1020》这款小众益智游戏在关系链上做了回放分享系统。 如果你玩到这个游戏的某一关发现玩不过去了,在微信上把这个求助发送给你的好友,当你的好友玩到这一关通关时,游戏会提醒他你各好友在这一关进行求助,你可以把你刚刚过关的步骤分享给你的好友。我们认为这个玩法形成深度互助关系,它一定能形成一个有质量的拉新。 关于小游戏收入 刚刚讲了留存、拉新,接下来讲讲收入。 对于绝大多数游戏而言,在小游戏平台上,收入有两个办法,一是广告,二是内购。 对于内购模式,从APP直接移植到小游戏平台就可以了。常见的内购模式有购买皮肤、购买道具、购买英雄。 在常见的模式上,得益于小游戏平台激励视频新的广告方式,我们看到有些创意小游戏做出了有趣的玩法。 创意小游戏《我飞刀玩的贼6》做了皮肤购买内购模式。我们知道,对于游戏的萌新们,让他们迈出游戏首充这一步有多困难。 这个小游戏在内购基础上加上激励视频,让用户通过观看激励视频方式,能在购买之前尝试到我购买的是什么样的东西,能消除用户的顾虑。这样的方式我们觉得是非常有趣的。 除了内购模式,对于绝大部分轻度小游戏而言,最主要的收入模式是广告。Banner广告形式太常见,前面李昊跟大家讲了很多,今天我们不讲Banner广告,讲讲比较有趣的激励视频。 常见激励视频广告收入模式,最常见的有类似这样的: 打完游戏后,通过观看一个激励视频,可以提高过关的奖励。或者你可能死在哪里,我们让你观看一次激励视频广告,获得一次原地复活的机会。这都是大家喜闻乐见的激励视频广告方式。 但在这个常见的模式上,也观察到有些创意小游戏做了“反套路”的设计。 《羽毛球高高手》是这么做的。它非常有趣的是在用户觉得一定会出现广告的结算页面会随机不让这个激励视频的广告出现。 我们实际上能得到一些用户的反馈,这样吊起用户胃口的“反套路”设计,更多的激发了用户反而要去点这个广告消费这个广告的欲望。 以上就是我们这一年以来设计团队观察到的创意小游戏上一些有趣的做法。 我们团队后期会持续收集我们在平台上看到的各种有趣的案例,会沉淀在这样一个文档上,希望能通过这种沉淀,为大家在未来做创意小游戏方向上给出一些支持和帮助。
2022-03-30 - worker bug 反馈,Uint8Array 通过 post到worker进程后变成对象
worker bug 反馈,Uint8Array 通过 postMessage传到worker进程后变成对象了 [图片] https://developers.weixin.qq.com/s/zviqwQms7TJI
2023-07-20 - worker 子线程问题?
我在worker子线程里面 开启并发下载任务, 当主程序worker.terminate() 以后 子线程的下载为什么不会终止呢? 当我再次下载,返回下载失败!
2022-06-08 - 请问在开发者工具模拟器里面怎么显示性能数据,FPS 顶点数,边数,drawcall等
请问在开发者工具模拟器里面怎么显示性能数据,FPS 顶点数,边数,drawcall等,手机上面打开调试,这些数据就显示出来了,但是模拟器从来没看到过。其实 fps没啥参考价值,毕竟环境不一样,但是 顶点数边数,还有drawcall次数,还是有很大参考意义的,如果每次都是手机看,很麻烦不利于调优
2020-03-22 - 是否能提供【小游戏性能优化方案】与【现网小游戏】的性能数据对比呢?
在【小游戏性能优化方案】的介绍文档中,有提到与【现网小游戏】对比在架构上的优化。理论上性能会有大幅度的提升。 不知道能不能提供一些性能方面的对比数据呢?本来我是想自己做一些性能方面的测试例,但是【小游戏性能优化方案】的参考资料、示例工程都太少了,写到一半进行不下去了...希望官方能提供更多的性能数据、开发文档、参考资料、示例工程。
2020-09-24 - web-view 是否支持service worker?
web-view 是否支持service worker? 文档里没有看到相关说明,android机上貌似是支持的,IOS上是否支持? 可否明确一下?
2023-07-12 - worker 中如何使用文件接口?
worker 中如何使用文件接口、最新版本下、 打开的文件路径 该如何设置
2021-11-10 - worker 中如何使用网络请求?
worker中如何发起服务器网络请求[图片]
2020-11-18 - 本地缓存文件200M、本地用户文件200M,那是不是就有400M的缓存可以用了?
文件主要分为两大类: 代码包文件:代码包文件指的是在项目目录中添加的文件。本地文件:通过调用接口本地产生,或通过网络下载下来,存储到本地的文件。其中本地文件又分为三种: 本地临时文件:临时产生,随时会被回收的文件。不限制存储大小。本地缓存文件:小程序通过接口把本地临时文件缓存后产生的文件,不能自定义目录和文件名。跟本地用户文件共计,小程序(含小游戏)最多可存储 200MB。本地用户文件:小程序通过接口把本地临时文件缓存后产生的文件,允许自定义目录和文件名。跟本地缓存文件共计,小程序(含小游戏)最多可存储 200MB。这里面本地缓存文件200M、本地用户文件200M。 那我可不可以认为我有400M的缓存空间可以利用呢?还是说本地缓存文件、本地用户文件是一个东西,只是为了1.7.0前后版本兼容,叫法不同呢? 官方文档: 注意:本地缓存文件是最初的设计,1.7.0 版本开始,提供了功能更完整的本地用户文件, 可以完全覆盖本地缓存文件的功能,如果不需要兼容低于 1.7.0 版本,可以不使用本地缓存文件。
2022-02-11 - 官方有自己固有的资源缓存淘汰策略吗?就是开发者什么也不用干,那200M缓存会有自己的淘汰策略。
官方有自己固有的资源缓存淘汰策略吗?就是开发者什么也不用干,那200M缓存会有自己的淘汰策略。
2022-07-29 - 小程序缓存问题
使用uniapp开发的小程序登录时设置时候会设置缓存,过段时间没有执行清空操作,代码里面也没有写清除缓存的,缓存会获取不到
2023-05-31 - 文件读写更快了,开发过程更快乐
原文来自「微信开发者」公众号 文件操作太麻烦?文件读写速度太慢? …… [视频] 随着文件系统本地存储容量的不断扩大,文件操作的流程与速度成为开发者们日益关注的重点。为了实现小程序 / 小游戏更高效、更原子化的文件操作效果,微信团队新增 FD 接口,优化小程序用户体验: 支持一次打开文件即可多次读 / 写,减少重复操作支持只读 / 写指定内容,减少无效读写实现读写耗时降低 46%,提升体验 [图片] FD 接口是微信团队新增的高性能、原子化的文件接口类型。对比原有文件接口,FD 接口不仅增加打开文件与关闭文件 2 个接口,而且更新代码实现方式,快速提升小程序性能: [图片] [图片] FD 接口支持一次打开文件,即可进行多次读 / 写操作。对比原有文件接口每项操作均需要打开、写入、关闭文件 3 个步骤,FD 接口实现一次打开文件,即可多次读取、写入文件,操作完成再关闭文件,减少重复操作。 [图片] FD 接口支持只读 / 写文件中指定内容。针对大文件操作场景,FD 接口的该项特性能够减少无效读写,降低文件读写时间。 如下图例子,原有文件接口需要全部读 / 写内容(如左下图黄色高亮内容),FD 文件接口则支持只读 / 写指定内容(如右下图黄色高亮内容),降低读写耗时。 [图片] 以连续 100 次读 + 写同一个文件 (1MB) 的实验为例,对比原有接口读写文件耗时,FD 接口在安卓端读写文件耗时降低 46%,在 iOS 端读写耗时降低 19%。 [图片] [图片] FD 接口减少重复操作、减少无效读写,降低文件读写耗时。那么如何正确应用 FD 接口? 以打开文件、读取文件内容、修改内容并写入文件的过程为例,原有接口需要每次读写文件并且完整打开关闭。 // 获取全局唯一的文件管理器 const fs = wx.getFileSystemManager() // 读取文件 data = fs.readFileSync(“FileA”) // 修改文件内容 data = modify(data) // 写入文件 fs.writeFileSync(“FileA”, data) 如果仅应用于简单的文件操作流程,原有文件接口仍可适用。但面向大量文件操作的场景,原有文件接口造成读写耗时较长,同时影响低端机型的性能,影响用户体验。因此 FD 接口一次打开、多次执行的特性能够高效解决问题,代码示例如下: // 获取全局唯一的文件管理器 const fs = wx.getFileSystemManager() // 打开文件 fd = fs.openSync(“FileA”) // 读取文件 fs.readSync({ fd, arrayBuffer, offset, length, position }) // 修改文件内容 data = modify(data) // 写入文件 fs.writeSync({ fd, data, offset, length, position }) // 关闭文件 fs.closeSync({fd: fd }) 面对文件系统本地存储容量的不断扩大的场景,FD 接口支持一次打开文件即可多次读 / 写,并且支持只读 / 写指定内容,实现文件读写耗时减少近 50%,提升用户体验。 如有其他小程序应用相关的问题,可在 微信开放社区小程序交流专区 发帖互动,技术专员将为大家解答及进行深度交流。
2022-06-29 - 现在清除微信缓存时,小程序的本地缓存和本地用户文件都会被删掉,是怎么回事儿?以前不这样啊
现在清除微信缓存时,小程序的本地缓存和本地用户文件都会被删掉,是怎么回事儿?以前不这样啊。我的一个小程序现在变了。而且显示有点不正常了,有一个按键,眼瞅着自己弹到屏幕下方,再也变不到以前了,而在别的手机上显示就没问题。
2023-02-14 - 如何快速清空【本地用户文件】
由于用户本地文件共计10m, 一个保存音频的功能,要求在使用前确保用户本地储存空间剩余10m。所以要进行清空。 是否有一个方便方法。 [代码]<[代码][代码]button[代码] [代码]type[代码][代码]=[代码][代码]"primary"[代码] [代码]bindtap[代码][代码]=[代码][代码]"clearUserData"[代码][代码]>清空用户文件</[代码][代码]button[代码][代码]>[代码] [代码]Page({[代码][代码] [代码][代码]onReady: [代码][代码]function[代码] [代码](e) {[代码][代码] [代码][代码]// 创建一个FS对象[代码][代码] [代码][代码]this[代码][代码].fsm = wx.getFileSystemManager();[代码] [代码] [代码][代码]},[代码] [代码] [代码][代码]clearUserData: [代码][代码]function[代码] [代码]() {[代码][代码] [代码][代码]const page = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]this[代码][代码].fsm.readdir({[代码][代码] [代码][代码]dirPath: `${wx.env.USER_DATA_PATH}/`,[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码](res) {[代码][代码] [代码][代码]console.log([代码][代码]'readdir'[代码][代码], res);[代码][代码] [代码][代码]// 批量删除[代码][代码] [代码][代码]res.files.forEach(element => {[代码][代码] [代码][代码]if[代码] [代码]([代码][代码]typeof[代码] [代码]element === [代码][代码]'string'[代码][代码]) {[代码][代码] [代码][代码]page.fsm.rmdir({[代码][代码] [代码][代码]dirPath: `${wx.env.USER_DATA_PATH}/${element}`,[代码][代码] [代码][代码]recursive: [代码][代码]true[代码][代码],[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码]() {[代码][代码] [代码][代码]console.log([代码][代码]'删除文件夹成功'[代码][代码], element);[代码][代码] [代码][代码]},[代码] [代码] [代码][代码]fail: [代码][代码]function[代码] [代码](e) {[代码][代码] [代码][代码]console.log([代码][代码]'删除文件夹失败'[代码][代码], e, element);[代码][代码] [代码][代码]wx.removeSavedFile({[代码][代码] [代码][代码]filePath: `${wx.env.USER_DATA_PATH}/${element}`,[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码](res) {[代码][代码] [代码][代码]console.log([代码][代码]'删除文件成功'[代码][代码]);[代码][代码] [代码][代码]console.log(res);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码]})[代码]
2019-07-26 - UpdateManager 会清空微信小程序本地用户文件的缓存吗?
[图片] [图片]
2023-07-12 - wx.getSavedFileList获取本地临时文件或本地缓存文件为什么为空?
[图片] [图片]
2019-08-23 - 文件保存相关 本地用户文件、缓存文件
wx.setStorage(Object object) FileSystemManager.writeFileSync wx.saveFile(Object object) 三者保存的数据 生命周期都是怎样的?系统会自动清理吗? FileSystemManager.writeFileSync写入的文件 如何删除?
2019-07-25 - client_credential
[图片] 我圈起来的地方,填写client_credential,没看懂是什么意思,是填写上面的那个请求地址吗
2019-12-01 - request:fail url not in domain list
错误:"errMsg": "request:fail url not in domain list" 排查方案: 1、确认域名 登录mp后台对域名进行确认(左侧导航->开发->开发管理->开发设置->服务器域名配置) 2、详情页确认 小程序右上角的胶囊->点击该小程序的名称->点击更多资料->进入到详情页 3、kill重新打开 配置完域名之后,在手机端,下拉小程序->把当前的小程序删除->再重新进行进入,重试。(需要删除手机上该小程序的开发版、体验版、正式版才会生效) 4、配置重定向域名 确认域名是否有重定向,有的话重定向后的域名也要配置。
2021-11-19 - 服务器域名已配置,要多长时间生效?
[图片] 已经配置了几个小时了,小程序里面还是报错, 而且已经减少到2个了, 以前生效很快 [图片]
2022-06-16 - HttpDNS 服务商 Id 字段httpDNSServiceId类型错了
https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html 文档中错了,miniprogram-api-typings这个库中的类型定义也错了。 同时miniprogram-api-typings库中缺少 enableChunked 字段的定义。
2022-01-25 - 小程序端可以使用腾讯HttpDNS服务吗?
小程序端可以使用腾讯HttpDNS服务吗?我看到小程序文档中已经支持此服务,但是找不到开通的入口
2021-08-11 - 请问小程序可以使用腾讯的httpDns服务吗?
请问小程序可以使用腾讯的httpDns服务吗?
2022-07-15 - httpDNS服务购买后无法找到serviceID,导致高版本基础库不能使用?
httpDNS服务购买后无法找到serviceID? 在基础库低于2.17版本时使用的是共有serviceID 在基础库高于2.17版本时无法使用httpDNS功能(因为) [图片]
2021-11-03 - 小程序服务器域名已配置,但请求依旧失败?
小程序服务器域名已配置,但请求依旧失败。 开发工具中勾选“不校验合法域名”后,即可成功请求,但取消“不校验合法域名后”,请求便不成功,且失败的回调中没有返回提示信息。 正常来说,合法域名校验未通过应该会有提示errMsg: "request:fail url not in domain list",出问题的域名是通过get请求向阿里云sls上传日志的域名,我这边已经配置了小程序服务器域名,但是不起作用,是微信这边对阿里云部分服务有拦截吗?
2021-01-18 - 小程序“服务器域名”里加了新的域名数天后仍然能收到域名不在服务器域名列表里的警告
2020-8-5: 今天上午9点左右我们在小程序管理后台上新加了一个服务器域名,直到现在都还能收到"url not in domain list"的告警,到底是为什么?让用户退出小程序重新打开可能就好了。不要怀疑域名没加对,我们拿自己手机测试过了是正常的。是不是微信更新小程序域名配置的机制有问题? AppID: wx718700a474b4fa75 2020-8-6: 超过24小时了还能看到报警,肯定不是配置的问题,我们核心功能里用的,如果配置有问题那用户那边早就炸了,我们也不可能自己测试没问题。官方看看你们的同步机制好吗? 2020-8-8: 都三四天了,还是偶尔能收到警告,但是警告已经越来越少了,估计是老用户陆陆续续都更新了。 2020-8-10: 就这样等官方回复等了几天,终于不告警了。下次加域名就知道了,最好能提前一个礼拜就加好,避免同步不及时出问题。官方的“无为而治”还真是令人印象深刻,等几天就能自己好的问题,何必解决呢...
2020-08-10 - 小程序背景音频播放结束时提示“音乐文件错误,播放失败”,怀疑是最近基础库更新导致部分机型出现了问题
小程序背景音频播放结束时提示“音乐文件错误,播放失败”,onError打印的错误信息是:"errMsg":"errCode:67, err:decode audio fail","errCode":10001 从出现问题的时间看,怀疑跟12.5号的基础库更新有关系。 我的手机是安卓10,测试没问题,以下是反馈的两个用户的手机信息,他们也不是必现的,但是概率很高: [图片] [图片] 代码片段是从这个帖子复制过来的,问题都一样,实在没必要重新写一个:https://developers.weixin.qq.com/community/develop/doc/00080ecf9c0178278b0982cc451800
2020-12-12