前言
在工程化思维进入前端领域的几年内,前端社区一直在试图给前端工程化下一个精确的定义。人们喜欢从历史讲起,然后将视角延伸到时代背景下的宏观技术理论,最后聚焦到自身业务的工程实践。在这个过程中,从第一步过渡到第二步的历程中能够提取出具有普适性的指导思想,宽泛地讲就是规范化、工具化、自动化;而发展到第三步的时候难免会带入一些只适合自身业务特征的方法论和实践模式。一部分声音认为这些狭隘的理论属于功能解决方案,脱离了前端工程化的范畴,但其实这恰恰是工程最基本且最核心的出发点:一切以业务为基准。
在对前端工程化进行讨论和研究之前,一定要摆脱“前端工程化是一种新技术”的错误认识,前端是软件开发的一个细化分支,前端工程化本质上是软件工程理论在前端范畴内的具象实践。方法、工具和过程是软件工程也是前端工程化的三要素,方法面向编码和功能解决方案;工具的根本目的是降低时间成本以提高效率;过程追求高效、有序的工作流程,它是一个抽象的概念,具体到实施中则是方法和工具的综合体。一切编码方案均是为了解决业务的功能需求,在此基础之上以分治和聚合为基本原则设计合理的软件架构,最后进一步规范工作流程和产品发布策略,这便是工程化的理论模型。总结为一句话:以业务为出发点,架构聚焦于代码,工程聚焦于流程。
内容概览
本书所有内容遵循一个基本出发点:业务是架构和工程的核心。
第1章围绕上述基本出发点讲解前端自诞生至今在不同时代背景下的意义以及业务特征,进而引申出架构和工程的子集与超集的关系。然后在此基础之上探讨前端工程化在架构以及架构之外的困难之处和核心关注点。
第2章在前端单一的编程语言基础上,从技术选型、辅助工具、实现方案以及架构模式的角度思考和探索如何更合理地应用HTML、JavaScript、CSS。
第3章聚焦于编码和架构这些“硬实力”之外的“软实力”——技术规范。除去所有编程领域的一些普适规则(比如技术选型、目录规范和命名规范),由于前端的特殊性,有些技术规范并不仅仅是为了提高代码的可维护性,它们还兼具了架构层面上的设计考虑,比如JavaScript在性能与易读性之间的抉择、CSS的编程范式等。
第4章介绍实现前端组件化的Web Components技术,以及通过开发合理的工具打造更友好的编码方式。然后从生命周期和宿主环境两个角度介绍前端组件设计模式。
第5章描述了两种常见的前后端分离架构模型:SPA和同构编程。前者是最普遍、实施成本最低、最极端的分离模式,但对SEO的弱支持导致其并非适用于所有产品类型;而后者则与前者相反,对SEO的良好支持背后是昂贵的实施成本和学习成本,同时对技术选型有一定的限制。探讨两者的综合优劣性时必须结合具体的产品需求。
第6章以前端应用的性能评估模型为前提,剖析加载和执行过程中影响性能的各项因素(包括网络、渲染和内存管理)以及对应的优化策略。最后探索综合运用Web Worker、WebAssembly甚至WebGPU,以发挥出浏览器的极限运算能力。
第7章将一个完整的迭代流程拆分为开发、测试、部署和发布,然后讨论在传统开发模式下前端如何从开发、测试和运维层面进行工程优化,其中包含高效的工具、合理的规范以及严谨的制度。
第8章在第7章描述的前端工程服务体系的前提之下,探讨在目前的技术背景下,前端工程化在本地化的基础上进一步演进的方向(DevOps)以及目标(持续交付)。最后,在本书的末尾对继AJAX和Node.js之后可能引起第三次前端革命的Serverless进行了展望。
读者对象
本书内容并非告诉读者如何实现具体的业务需求,所举示例也只是为了辅助理解相关内容背后的思想和理念。换句话说,本书不是教读者怎么编码的,而是从宏观角度讲解了如何实现高可用、高性能、可扩展的软件架构,以及高效、规范、有序的工作流程,所以本书的主要目标读者是有多年一线编码经验、充分理解Web整体架构并且具有一定的团队管理和多人协作经验的资深前端开发者和技术经理。
资源链接
本书所有示例的源代码均可以访问http://www.broadview.com.cn/38061进行下载。书中提供的额外参考资料也可从上述网站下载,如正文中标有参见“链接1”“链接2”等字样时,即可从上述网站下载的“参考资料.pdf”文件中进行查询。
致谢
本书的写作和出版得到了许多同事、朋友和家人的支持和帮助。本书中的很多技术细节得到了我的同事和领导的指正。感谢电子工业出版社的付睿编辑和审校人员对本书的策划和编审,他们是本书出版背后的重要功臣。此外,本书的写作占用了我很多业余时间,感谢我的妻子刘女士在此期间对我的理解、包容和支持。
谨以此书献给我的妻子和父母。
《前端工程化系列》丛书
本书是《前端工程化系列》丛书之一,从宏观角度讲解前端技术架构和工程的各项关注点。与本系列另一本图书《前端工程化:体系设计与实践》不同的是,本书对于前端工程服务体系的讲解侧重方法论和指导思想,并未深入具体实现的每一行代码。如果在将此部分理念应用于实践的过程中遇到问题,或许同时参阅两本书能够获取更全面的答案。
帮助与支持
如果你在阅读本书的过程中有任何问题,可以发送邮件到我的个人邮箱zjp0432@163.com。
读者服务
微信扫码回复:38061
● 获取博文视点学院20元付费内容抵扣券
● 获取本书的配套代码资源
● 获取更多技术专家分享的视频与学习资源
● 加入读者交流群,与更多读者互动