项目地址
pm.js
另外捎带个项目,golang 高性能、功能丰富的网络交互 /RPC 框架 ARPC
因为本来是想写点前端的项目辅助宣传 ARPC 的,但是迫于前端学不动,并且从理论上讲,react 、vue 那些最终还是原生、虚拟 dom 也不可能比高手写的原生性能好,所以写了 pm.js ,不求为前端社区做出多大贡献,但愿能给道友们带来一些新的思路、简化工程、保住秀发
一些示例
主要功能
- 发布订阅
- 元素与事件订阅
- 多页面 /元素显示隐藏互斥关系管理(构建单页面)
- 简单的请求、html/js 异步加载封装
- 源码 200 多行,有需要的请自行压缩,压缩后 2-3k
pm.js 实现原生单页面的原理
- 传统 web 前端开发多是通过改变路由切换页面,reload 消耗大、性能差
- 近几年 react 、vue 的崛起很大程度上提升了性能,主要是单页面、router 之类的,一些原生单页面应用的方案应该也是类似的思路,具体原理是啥没深入研究,只说说 pm.js 的实现方案吧:
- html 主页面包含一组空 dom 元素,非默认显示页的 dom 元素设置隐藏( display: none )
- 使用 pm.js 根据配置绑定这组 dom 元素的关联关系,按照实际子页面的显示时机比如 $pm.select(dom id),同步或异步加载该 html 子页面作为主页面的 dom 元素内容
- 通过 style.display 属性控制不同子页面元素的显示或隐藏,只有当前页面被显示、其他页面被隐藏
- 不需要改变路由,而只是选择当前页面
- 可以绑定触摸时间的 src-dst 关系,点击 src 时自动切换页面
- 提供释放页面方法,可以在页面隐藏时释放、下次显示时重新加载,业务层可以根据需要自行管理
一点工程性建议
- 鼓励使用有组织有纪律的 id 进行 dom 元素的工程管理
- 鼓励使用事件 /发布订阅机制,统一处理 dom 事件、网络消息事件等的分发,页面内容进行事件绑定 /订阅,从而事件触发时的内容自动更新(这本来是个挺简单的事情,但是 react redux 之类的搞得过于复杂、云里雾里,前端阵营老师这么玩、所以才有前端学不动了现象)
- 少即是多,鼓励简化工程复杂度
周一搬砖日,up up ~
看来大家都去搞 react 、vue 了,没人关心 native 了