小程序性能优化之页面预加载方案——让你的小程序运行如飞 进阶篇

小程序性能优化之页面预加载方案 进阶篇

转载请注明出处:https://blog.youkuaiyun.com/sinat_27612147/article/details/80798452

写在前面

预加载方案的集成方式请参考上篇 小程序性能优化之预加载方案 集成篇

有网友发现,这个项目无法运行在使用了组件的小程序中,所以大家如果使用了组件的话,就不要直接用这个项目了。当然还是推荐你看下这个项目的思想,毕竟工程师在工作中思想是很重要的。

再次声明,这个预加载方案要求与服务器的通信时间,不能大于**350ms**,渲染时传入的data数据量也不能太大,若超过这个值或数据量过大,页面依旧会先空后有数据,也就是跳转后闪一下。如果超过了这个值,建议服务器优化数据处理速度,或者拆分协议,先请求一部分轻量级的数据,繁重的数据根据时机之后再请求。

还有,一定要记住,在真机上测试时,一定要关闭小程序的调试模式,否则,会极大的减慢渲染数据的速度!

技术原理流程图

预加载技术原理流程图

技术原理详解

这个技术核心思想是延迟跳转和预加载

延迟跳转

延迟跳转是什么?通常情况下,一个按钮,你都要给他加点击反馈的,在小程序的view组件里是有这么两种属性。

  • hover-class:指定按下去的样式类。当 hover-class=“none” 时,没有点击态效果,默认值是none
  • hover-stay-time:手指松开后点击态保留时间,单位毫秒。默认值是400ms。

一个按钮的点击态持续时间,100ms的体验是很好的(我自己是这么感觉的,哈哈)。
按钮点击态可以这样处理:

  1. wx.navigateTo上包裹一层setTimeout,延迟时间设置为150ms。
  2. view添加了hover-classhover-stay-time这两个属性。
  3. 指定hover-stay-time的值为100。这里比上面少了50ms是为了让用户看到点击态消失时页面再跳转,体验要好很多。

这样就实现了延迟加载。
从点击按钮开始算,到执行第二个页面的onLoad方法,我们算下现在页面跳转的总时间,大概在200ms左右:

  • 延迟150ms执行wx.navigateTo
  • 本身的普通跳转时间50ms

到此为止,跳转页面的时间从原来的50ms被活生生拖到了200ms。(在这里多说几句,js单线程原因,setTimeout函数是不准确的,而且普通跳转的50ms也是有上下浮动的。所以这个200ms是大概的一个值。)
你可能会很纳闷,不是要缩短加载时间吗,怎么这还得拖长时间呢?我说下我考虑的几个方面。
假设一个协议的总时间是300ms。我们取一个两个极端情况,页面跳转不花时间,打开一个新页面只花协议收发的300ms,那么有两种选择,一个是正常的方式,页面打开后发协议,等300ms看到结果;还有一个是,立刻发送协议,同时花300ms的时间来等待获取数据,获取到后进行页面跳转,那么跳转到下个页面时,数据能立刻被渲染出来!
这两种情况对应了用户的两种心态:

  1. 就算是0ms跳转完成,第二个页面没有获取到数据,用户也是一种等待的心理,也要等获取到数据后才能看到页面的样子,还会感觉你这页面加载好慢啊。
  2. 如果一个页面的跳转的做150ms的延迟处理,再加上本身跳转需要的50ms,会极大的延长跳转时间,但是却能保证轻量级的协议在这段时间内有足够的时间来完成预加载。
  3. 将按钮的点击态持续时间设置为100ms,既可以延缓用户在点击按钮时等待跳转的焦急心理,又能提供额外的时间来预加载。

所以我们可以这么处理,点击按钮立即发送协议,同时延迟150ms跳转,用按钮的点击态100ms来遮盖延迟跳转造成的等待时间,之后再花50ms时间完成页面跳转。页面跳转完成后,从开始执行onLoad()函数到页面首次渲染数据时不闪屏的极限时间是150ms

<think>嗯,用户这次明确要找微信游戏小程序的开发源码和示例,还特别提到github资源。之前对话里用户已经了解过Cocos和Phaser两种开发框架,现在显然是想要实际操作资源了。用户可能是个刚入门的游戏开发者,正在寻找可参考的项目。ta特意强调“源码示例”,说明需要能直接运行或借鉴的完整项目,而不仅仅是片段代码。考虑到微信小游戏的特殊性,那些适配了微信API的开源项目对ta会特别有用。翻看之前的引用资源,第1条里其实有相关资源线索:那个高仿QQ的小程序和知乎风格应用虽然不是纯游戏,但展示了微信生态的交互模式。不过更符合需求的应该是专门收集小游戏源码的仓库。准备推荐几个重点仓库:Cocos官方示例仓库很权威,phaser-ce-examples有现成演示,小熊猫出没的案例够完整。特别加上tumobi的系列项目,因为覆盖了不同游戏类型,用户能找到自己想要的风格。需要提醒用户注意API版本问题——微信的更新可能导致旧代码报错。另外,现在流行的卡牌、休闲类小游戏应该成为重点推荐方向。生成问题时需要侧重进阶开发:性能优化是个坎,提交审核也是个痛点问题。考虑到用户看完源码后总要自己修改,调试技巧和审核流程就很实用了。</think> 以下是精选的微信游戏小程序开发源码和示例项目(GitHub资源),涵盖多个框架和游戏类型,包含技术细节和实现功能: --- ### 一、主流框架开发源码 #### 1. Cocos Creator 示例项目 - **项目名**:[Cocos官方示例集合](https://github.com/cocos-creator/example-cases) - **技术点**: - 动画系统:骨骼动画、帧动画实现(`spine`组件) - 物理引擎:使用`Box2D`实现碰撞检测 - 微信API适配:音效控制、分享接口封装 - **示例片段**(动画创建): ```typescript // 加载spine动画 const spineNode = new sp.Skeleton('res/anim/skeleton.json'); this.node.addChild(spineNode); spineNode.setAnimation(0, 'run', true); // 循环播放跑步动画 ``` #### 2. Phaser CE 游戏模板 - **项目名**:[微信小游戏Phaser适配版](https://github.com/iamcd/phaser-ce-weixin) - **核心能力**: - 物理引擎:支持Arcade(轻量级)、P2(复杂物理) - 跨平台适配:自动处理微信画布渲染差异 - **物理碰撞示例**: ```javascript this.physics.add.collider(player, platforms); // 玩家与平台碰撞 this.physics.add.overlap(player, coins, collectCoin); // 玩家与金币重叠检测 ``` --- ### 二、完整小游戏源码(GitHub开源) | 项目名 | 类型 | 技术栈 | 核心功能 | |--------|------|--------|---------| | [微信跳一跳复刻](https://github.com/stephenml/wechat-jump-game) | 休闲 | Canvas原生 | 抛物线计算、分数判定 | | [2048小游戏](https://github.com/gabrielecirulli/2048) | 益智 | JavaScript | 触控滑动、动画过渡 | | [像素鸟Flappy Bird](https://github.com/kubowania/flappy-bird-phaser3) | 动作 | Phaser3 | 管道生成、碰撞检测 | | [卡牌对战模板](https://github.com/peterawe/card-game-weapp) | 策略 | Three.js | 3D卡片渲染、状态同步 | --- ### 三、关键开发技巧(附代码) #### 1. 微信API调用 ```javascript // 分享功能 wx.shareAppMessage({ title: '快来一起玩!', imageUrl: 'res/share.jpg' }); // 获取用户授权 wx.getSetting({ success: res => { if (res.authSetting['scope.userInfo']) { wx.getUserInfo({ openIdList: ['selfOpenId'] }); } } }); ``` #### 2. 性能优化 - **资源加载策略** ```javascript // 分阶段加载资源 cc.loader.loadResDir('textures/level1', (err) => { this.startLevel(1); // 第一关资源加载完成后启动 }); ``` - **离屏Canvas** 复杂特效预渲染到离屏Canvas,避免主线程卡顿。 --- ### 四、推荐学习路径 1. **基础入门**:从[官方教程](https://developers.weixin.qq.com/minigame/dev/)了解微信游戏API 2. **框架选择**: - 轻量级游戏 → Phaser(简单2D) - 复杂项目 → Cocos Creator(跨平台支持) 3. **进阶**:分析开源项目中的`game.js`/`game.json`配置逻辑 ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值