阅读929 返回首页    go 阿里云 go 技术社区[云栖]


前端工程——基础篇

喂喂喂,那个切图的,把页面写好就发给研发工程师套模板吧。 
你好,切图仔。




选型之后基本上就可以开始敲码了,不过光解决开发效率还不够,必须要兼顾运行性能。前端工程进行到第二阶段会选型一种构建工具,对代码进行压缩,校验,之后再以页面为单位进行简单的资源合并。 
前端开发工程化程度之低,常常出乎我的意料,我之前在百度工作时是没有多少概念的,直到离开大公司的温室,去到业界与更多的团队交流才发现,能做到这个阶段在业界来说已然超出平均水平,属于“具备较高工程化程度”的团队了,查看网上形形色色的网页源代码,能做到最基本的JS/CSS压缩的Web应用都已跨入标准互联网公司行列,不难理解为什么很多前端团队对于前端工程构建的认知还仅停留在“压缩、校验、合并”这种程度。


很多人觉得模块化开发的工程意义是复用,我不太认可这种看法,在我看来,模块化开发的最大价值应该是分治,是分治,分治!(重说三)。 
不管你将来是否要复用某段代码,你都有充分的理由将其分治为一个模块。


当我们要开发一款完整的Web应用时,前端将面临更多的工程问题,比如: 
- 大体量:多功能、多页面、多状态、多系统; 
- 大规模:多人甚至多团队合作开发; 
- 高性能:CDN部署、缓存控制、文件指纹、缓存复用、请求合并、按需加载、同步/异步加载、移动端首屏CSS内嵌、HTTP 2.0服务端资源推送

这些无疑是一系列严肃的系统工程问题。


读过《人月神话》的人应该都听说过,软件工程 没有银弹。没错,前端开发同样没有银弹,可是现在是连™铅弹都没有的年月!(刚有了BB弹,摔) 
前端历来以“简单”着称,在前端开发者群体中,小而美的价值观占据着主要的话语权,甚至成为了某种信仰,想与其他人交流一下工程方面的心得,得到的回应往往都是两个字:太重。

这些经历让我明悟了一个道理: 
进入第四阶段,我们只需做好两件事就能大幅提升前端开发效率,并且兼顾运行性能,那就是——组件化开发与资源管理。

第一件事:组件化开发 
分治的确是非常重要的工程优化手段。在我看来,前端作为一种GUI软件,光有JS/CSS的模块化还不够,对于UI组件的分治也有着同样迫切的需求:

如上图,这是我所信仰的前端组件化开发理念,简单解读一下: 
- 页面上的每个 独立的 可视/可交互区域视为一个组件; 
每个组件对应一个工程目录,组件所需的各种资源都在这个目录下就近维护; 
- 由于组件具有独立性,因此组件与组件之间可以 自由组合; 
- 页面只不过是组件的容器,负责组合组件形成功能完整的界面; 
- 当不需要某个组件,或者想要替换组件时,可以整个目录删除/替换。

第二件事:“智能”静态资源管理 
上面提到的模块化/组件化开发,仅仅描述了一种开发理念,也可以认为是一种开发规范,倘若你认可这规范,对它的分治策略产生了共鸣,那我们就可以继续聊聊它的具体实现了。

由“增量”原则引申出的前端优化技巧几乎成为了性能优化的核心,有加载相关的按需加载、延迟加载、预加载、请求合并等策略;有缓存相关的浏览器缓存利用,缓存更新、缓存共享、非覆盖式发布等方案;还有复杂的BigRender、BigPipe、Quickling、PageCache等技术。这些优化方案无不围绕着如何将增量原则做到极致而展开。 
所以我觉得:

由于先天缺陷,前端相比其他软件开发,在基础架构上更加迫切的需要组件化开发和资源管理,而解决资源管理的方法其实一点也不复杂:

最后更新:2017-11-09 10:03:51

  上一篇:go  【生物识别】阿里巴巴在移动端核身技术实践
  下一篇:go  Java程序员几年能实现月薪2万,需要具备哪些技能?