Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mip.js 优化方案 #703

Open
clark-t opened this issue Sep 25, 2019 · 0 comments
Open

mip.js 优化方案 #703

clark-t opened this issue Sep 25, 2019 · 0 comments
Assignees

Comments

@clark-t
Copy link
Contributor

clark-t commented Sep 25, 2019

目前 MIP 核心已经基本进入功能迭代的平稳期,接下来可以开始规划下对现有功能的整理和实现优化的方案了。

优化的目的是:

  1. 进一步提高 mip.js 的执行效率;
  2. 完整梳理 mip.js 代码,提高可维护性;
  3. 修复目前存在的 bug;

优化的原则是:

  1. 完全兼容 MIP v2.0 现有的全部功能和逻辑;
  2. 在现有功能基础上做体积和功能优化;
  3. 为下一步重大升级提前规划好迁移方案;

代码整理

  1. 整体梳理 mip.js 的代码结构,按功能调整文件的位置和层级关系;
  2. 找出功能重复的代码并抽象出函数、方法等等;
  3. utils 代码整理,将整体 export 的方法改为逐个 export;
  4. 找出线上未使用的代码,进行删除;
  5. Error 抛错机制进一步细化,改为使用 SyntaxError、ReferenceError、TypeError 等更为细化的错误,并指定统一的抛错规则;

模块异步加载

  1. babel polyfill 改成按需加载,即在整体代码入口处首先检测对象是否存在,如果不存在再去异步加载。这块是本次优化的重点,需要开发相应的 webpack/rollup plugin 实现,预计能够带来减小 1/4 体积的收益;
  2. sandbox 改为异步加载。sandbox 只服务于 MIP 站长组件,主要是用于确保站长组件在 runtime 时所存在的危险行为进行屏蔽,这块对于只使用官方组件的站点来说不是必须的,可以考虑在加载站长组件时,再去异步加载这块代码;
  3. mip-img 的 popup 等类似的需要用户交互之后才需要执行的功能,可以考虑等首屏加载结束之后,再去异步加载执行这块代码,以降低首屏资源消耗;
  4. deprecated 声明的代码块考虑是否能够改用异步加载的方式;

layout / fallback / prerender 机制优化

  1. 考虑新增 fill-parent、wrap-content 等 layout 属性,并且新增部分 layout 的 css 预设样式,做到整体页面框架的快速展现;
  2. 目前组件的 width/height 是由自己去管理导致了不少问题,这次优化可以考虑是否能将 width/ height/ layout 的控制权全部交给 mip 核心;
  3. 完善 placeholder 和 fallback 机制;

二跳优化

  1. 完善 service 机制,对于一些单例没必要在每个子页面当中都进行创建,可以直接通过 service 在多个 iframe 之间共享同一个实例,从而减少不必要的内存浪费;
  2. 允许自定义二跳的页面切换动画;

问题修复

  1. mip-vue 在 prerenderAllowed 为 true 的时候 mounted 方法会执行多次;

其他

  1. 制定严格模式标准,比如弹窗规范、布局规范、组件使用规范、样式规范等等;
  2. 考虑对于满足严格模式标准的页面,是否可以提供相应便捷的方式转换成小程序;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants