Open songxuecc opened 4 years ago
很少有时间对于写过的代码重构 这次发现重构是真的很有意思的事情 所以就记录下来了
集卡属于互动类型的游戏,此页面有9个弹窗,其中有同时出现的5个弹窗的情况,且如果同时出现必须按照指定顺序弹出。 遇到复杂的交互逻辑,数据结构可以帮助理清思路,抽象逻辑,完成稳定可靠的代码。在这次交互中,弹框要一个个按照顺序弹出,可以虑有序队列。但是弹框的弹出和关闭属于事件。在上一个弹框弹出关闭后,触发下一个弹框弹出。可以考虑事件的发布订阅。
队列 是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(end)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队首。
队列的弹窗展示有三个状态
整体逻辑分析如下图
import { push } from "./utils" push(MODAL_TYPE.GIVE_CARD) push(MODAL_TYPE.ASSIST_CARD) push(MODAL_TYPE.BUY_CARD) push(MODAL_TYPE.TASK_CARD) setTimeOut(()=>{ push(MODAL_TYPE.RECEIVE_CARD) },1000) setTimeOut(()=>{ push(MODAL_TYPE.ASSIST_CARD) },4000)
游戏状态多意味着常量多,好的代码最好是不写注释也一目了然。如果可以把注释通过代码表示出来那就太棒了,限制维护者强制书写注释那就更好了。
优化后的代码index.js减少了500行左右的代码 我的处理是
写单测是和留下组建快照 是代码的一次快照缩影,以后维护中可以验证是否修改最后的html结构。用代码描述出最基本的功能,并进行验证。这样保证代码的设计合理性和容易理解的实用性。
使用stylelint检测css一些不和规则的书写 因为css里有一些属性会触发重绘 所以 按照一定的书写顺序可以减少重绘提高css加载速度 而使用简写等可以减少css的打包体积
npm install stylelint --save-dev npm install stylelint-config-standard --save-dev npm install stylelint-order --save-dev
npx stylelint "**/*.css" --fix // fix 是自动修改
下图 是stylelint检测的要修改的点 加入--fix就会自动修改了
对比 虽然很小 但是 量变产生质变 文件多了自然就减少的多了
const RedBagRain = React.lazy(() => import( /* webpackPrefetch: true, webpackChunkName: 'RedBagRain.lazy'*/ "./components/red_bag_rain" ) ) <React.Suspense fallback={null}> <RedBagRain dis_cold_start_selectors={[".mask", ".slidemodal"]} visible={!showFinishPage} /> </React.Suspense>
RedBagRain有155 kb ,组建单独打包,分包加载,最后显示分出来 我把modal,actionsheet等 需要点击才能显示出的组建分包加载。这样就达到了首要的包优先加载,其他的包懒加载。如果不需要立即加载的,延迟1000s加载的写法是
const RedBagRain = React.lazy(() => { return new Promise(resolve => setTimeout(resolve, 10 * 100)).then(() => import(/*webpackChunkName: 'RedBagRain.lazy'*/ "./components/red_bag_rain") ) })
点击进入tiny-图片压缩网站 webpack-bundle-analyzer 分析那些图片太大,如果不是主要图片就进行再次压缩
打包结果对比:
优化前
加载结果对比
学习了
为何写这个文章
很少有时间对于写过的代码重构 这次发现重构是真的很有意思的事情 所以就记录下来了
modal的fifo应用
集卡属于互动类型的游戏,此页面有9个弹窗,其中有同时出现的5个弹窗的情况,且如果同时出现必须按照指定顺序弹出。
遇到复杂的交互逻辑,数据结构可以帮助理清思路,抽象逻辑,完成稳定可靠的代码。在这次交互中,弹框要一个个按照顺序弹出,可以虑有序队列。但是弹框的弹出和关闭属于事件。在上一个弹框弹出关闭后,触发下一个弹框弹出。可以考虑事件的发布订阅。
队列图解
队列 是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(end)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队首。
弹窗和队列结合
队列的弹窗展示有三个状态
整体逻辑分析如下图
用法
结果
创建enum管理状态
游戏状态多意味着常量多,好的代码最好是不写注释也一目了然。如果可以把注释通过代码表示出来那就太棒了,限制维护者强制书写注释那就更好了。
代码抽离和模块划分
优化后的代码index.js减少了500行左右的代码
我的处理是
单测
写单测是和留下组建快照 是代码的一次快照缩影,以后维护中可以验证是否修改最后的html结构。用代码描述出最基本的功能,并进行验证。这样保证代码的设计合理性和容易理解的实用性。
加载优化
骨架屏
修改css
1. 安装
2. 在根目录下创建.stylelintrc配置文件
3. 使用
4. stylelint的检测提示
下图 是stylelint检测的要修改的点 加入--fix就会自动修改了
对比 虽然很小 但是 量变产生质变 文件多了自然就减少的多了
bundle区分 使用react lazy
RedBagRain有155 kb ,组建单独打包,分包加载,最后显示分出来 我把modal,actionsheet等 需要点击才能显示出的组建分包加载。这样就达到了首要的包优先加载,其他的包懒加载。如果不需要立即加载的,延迟1000s加载的写法是
图片压缩
点击进入tiny-图片压缩网站 webpack-bundle-analyzer 分析那些图片太大,如果不是主要图片就进行再次压缩
结果对比
打包结果对比:
优化前
加载结果对比
reference