「前端工程化」该怎么理解?

大家好,我是若川。今天分享一篇「前端工程化」的好文。非广告,请放心阅读。可点击下方卡片关注我,或者查看系列文章。今天发文比较晚,以往都是定时早上7:30发文,也不知道是不是有点早。

一.什么是前端工程?

一个类似的术语是软件工程(Software Engineering):

Software engineering is the systematic application of engineering approaches to the development of software.

将工程方法系统化地应用到软件开发中,就叫软件工程。那么,紧接着又有两个问题:

  • 工程方法是什么?

  • 系统化怎么理解?

工程是指使用科学原理设计和制造机器、结构等,比如修桥、铺路、建隧道、造车、盖房子:

Engineering is the use of scientific principles to design and build machines, structures, and other items, including bridges, tunnels, roads, vehicles, and buildings.

具体到软件领域,指的是以系统、严谨、可量化的方法开发、运营、维护软件,软件工程包括对这些方法的应用和研究:

Software engineering the application of a systematic, disciplined, quantifiable approach to the development, operation and maintenance of software and the study of these approaches.

所谓系统化,可以理解为软件生命周期中用到的这些工程方法是互补的,各自解决一部分问题,联合起来保障软件的质量、交付速度等

综上所述,前端工程可以定义为,将工程方法系统化地应用到前端开发中,以系统、严谨、可量化的方法开发、运营、维护前端应用程序

二.前端工程的演进历程

同样先看软件工程,其发展历程经历了这些关键点:

  • 将计算机硬件抽象成冯·诺依曼架构,进而有了软、硬件之分

  • 随着软件复杂度的上升,模块化和信息隐藏的理念被提出来

  • 为了理解和管理软件开发过程,软件工程变成了一个专业领域

  • 为了评估软件开发团队的能力,成熟度衡量标准(CMMI-DEV)形成

  • 基于现代软件工程最佳实践,建立起了人们普遍接受的软件工程知识体系

前端工程也经历了类似的过程

  • B/S 架构兴起,进而有了前端、后端之分

  • 随着前端复杂度的上升,模块复用、实践规范越来越重要

  • 为了管理和简化前端开发过程,前端框架、自动化、构建系统应运而生并发展迅猛

  • 基于行业最佳实践,开箱即用的框架(如dva)、工具体系等逐渐建立起来

前端越来越重,复杂度越来越高,配套的前端工程体系也在不断发展和完善,可简单分为开发、构建、发布 3 条主线:

  • 前端框架:插件化(jQuery) -> 模块化(RequireJS) -> 组件化(React)

  • 构建工具:任务化(grunt/gulp) -> 系统化(webpack)

  • CI/CD:工具化(Jenkins) -> 自动化(Web Hook)

三大主线撑起了前端工程体系,系统地覆盖了前端开发的主流程,其中的工程方法也彼此互补、相互影响,体现在:

  • 构建工具让百花齐放前端框架、类库能够无缝合作

  • 前端框架、类库也在一定程度上影响着构建工具(如模块加载、CSS 预处理)、甚至 CI/CD(如 SSR)

三.面向过程视角下的前端工程体系

(摘自Book of Modern Front-end Tooling)

典型的前端工作流分为 5 个步骤:

  1. 开发

  2. 测试

  3. 构建

  4. 部署

  5. 监控

从脚手架到监控系统,配套的前端工程体系已经融入到了前端工作流的每个环节,很大程度上决定着前端生产效率

P.S.开发环节之前的分析、设计阶段这里不展开,因为传统的软件工程方法同样适用,前端项目在这个阶段并没有太大的特殊性

开发阶段

开发阶段的首要任务是创建样板项目(一并选择前端框架、类库),接着开始修改-验证的主循环,主要涉及这些工程化设施:

  • 脚手架:创建前端应用的目录结构,并生成样板代码

  • 公共库:维护着可复用的 UI 组件、工具模块等公共资源

  • 包管理器:引入第三方库/组件,并跟踪管理这些依赖项

  • 编辑器:提供语法高亮、智能提示、引用跳转等功能,提升开发体验

  • 构建工具:提供语法校验、编译、打包、DevServer 等功能,简化工作流

  • 调试套件:提供预览、DevTools、Mock、性能分析诊断等调试功能,加速修改-验证的主循环

测试阶段

开发完成,进入测试阶段,先要对整体功能进行充分自测,再移交专业的测试人员验证,过程中需要用到工程化设施有:

  • 单元测试框架:提供针对组件、逻辑的测试支持

  • 静态扫描工具:从代码质量、构建产物质量、最佳实践/开发规约等多个维度做静态检查

  • 自动化测试工具:针对 UI 效果和业务流程,提供测试支持

  • 性能测试工具:监测并统计出相对准确的性能数据

构建阶段

不同于开发阶段,在构建阶段要做更多的极限优化和流程联动,涉及:

  • 打包脚本:在语法校验、编译、打包的基础上,进行合并、压缩、代码拆分、图片处理、SSR等极限优化

  • 构建服务:支持多任务并行打包、通知

部署阶段

最后将经过充分测试的前端应用程序部署到生产环境,需要这些工程化工具:

  • 发布平台:将前端资源上传至 CDN 或 SSR 渲染服务,或者以离线包的形式集成到移动客户端

  • 迭代管理平台:提供 CI/CD 支持

监控阶段

前端应用程序上线之后,还需要持续关注线上的实际效果和异常情况,依赖这些工程设施:

  • 埋点平台:统计、分析业务数据,跟踪性能指标

  • 监控平台:观察线上的异常信息,包括报错、白屏、流量异常等

四.过程之间的衔接

除工作流各阶段的工程设施之外,前端工程的另一部分是过程之间的衔接。前者旨在提高生产效率,后者要解决的是体验问题

总的来看,前端工程的演进体现在 2 方面:

  • 协作模式:多表现为新的理念、新的架构,如BFF/SFF

  • 开发模式:体现在新的抽象层、新的工作流上,如Sass、React、webpack、甚至Cloud IDE

无论是职责分工的变化还是具体工作内容的变化,对开发者而言,都意味着更多的学习、理解成本,并最终表现在开发体验上。而面向过程间衔接的工程设施正是为了缓解这些变化带来的升级适配成本,更平滑地走出过渡期

例如:

  • codemod:衔接新旧前端框架,降低升级适配成本

  • dva:衔接 React 生态中的各种优秀理念(redux、redux-saga 等),降低学习成本

  • IDE:一方面打包全套工程设施,降低上手成本,另一方面衔接工作流的各个阶段,提升开发体验

理想的,前端工程不仅要持续优化协作模式、提升开发效率,还应该保障开箱即用的上手体验、一气呵成的衔接体验、无缝切换的升级体验

五.总结

从面向过程的角度来看,前端工程是贯穿前端应用生命周期的一系列工程设施,用来保障前端应用的开发体验、质量和交付速度

具体的,前端工程围绕开发、构建、发布 3 条主线展开,以工具化、自动化等手段解决各个环节所遇到的问题。一方面控制前端开发的复杂度,提高前端生产效率,另一方面降低架构升级、协作模式变化等带来的迁移、适配成本,提升开发体验

参考资料

  • 大公司里怎样开发和部署前端代码?

  • 如何推动前端团队的基础设施建设

最近组建了一个江西人的前端交流群,如果你也是江西人可以加我微信 ruochuan12 拉你进群。


常驻推荐阅读

我在阿里招前端,我该怎么帮你?(现在还可以加模拟面试群)
如何拿下阿里巴巴 P6 的前端 Offer
如何准备阿里P6/P7前端面试--项目经历准备篇
大厂面试官常问的亮点,该如何做出?
如何从初级到专家(P4-P7)打破成长瓶颈和有效突破
若川知乎问答:2年前端经验,做的项目没什么技术含量,怎么办?

如何准备20K+的大厂前端面试

常驻末尾

你好,我是若川,江西人~(点击蓝字了解我)历时一年只写了一个学习源码整体架构系列 有哪些必看的JS库:jQuery、underscore、lodash、sentry、vuex、axios、koa、redux

  1. 关注若川视野,回复"pdf" 领取优质前端书籍pdf,回复"1",可加群长期交流学习

  2. 我的博客地址:https://lxchuan12.gitee.io 欢迎收藏

  3. 觉得文章不错,可以 分享、点赞、在看 呀^_^另外欢迎留言交流~

小提醒:若川视野公众号面试、源码等文章合集在菜单栏中间【源码精选】按钮,欢迎点击阅读,也可以星标我的公众号,便于查找

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

figma下载_Figma和ProtoPie中的原型制作,比较

figma下载第1部分 (Part 1) Prototyping has never had such a high profile with a whole host of tools that now give you varying ability to realize your designs beyond their static UI and into a working usable thing. It’s fair to say that prototyping within t…

「前端组件化」该怎么理解?

大家好,我是若川。今天分享一篇关于「前端组件化」的好文。欢迎点击下方卡片关注我。以下是正文~这里我们一起来学习前端组件化的知识,而组件化在前端架构里面是最重要的一个部分。讲到前端架构,其实前端架构中最热门的就有两个话题&#xff…

大屏设计的视觉统一_视觉设计中的统一

大屏设计的视觉统一视觉设计的统一性是什么? (What is unity in visual design?) The concept of unity in visual design means a group of elements working together to create a greater whole. It means, as the clich goes: A whole that is greater than th…

跟着官方文档能学懂React Hooks就怪了

大家好,我是若川。今天分享一篇关于「React Hooks」的好文。欢迎点击下方卡片关注我。以下是正文~回想下你入门Hooks的过程,是不是经历过:类比ClassComponent的生命周期,学习Hooks的执行时机慢慢熟练以后,发现Hooks的执…

origin图上显示数据标签_Origin(Pro):寒假都结束了,这个图还是不会画?【数据绘图】...

寒假前给大家分享了一个图,大家要的教程来了。【数据绘图】好图分享:寒假?不存在的!​mp.weixin.qq.com绘图思路:左侧起止时间:散点图,交换XY坐标轴;中间的连线为Drop Lines&#xf…

可以激发设计灵感的音乐_建立灵感库以激发您的创造力

可以激发设计灵感的音乐I often find a lot of inspiration from work I see while scrolling social media. Saving art or images that inspire you allows you to build a library of resources to draw from whenever you’re working on a project.在滚动社交媒体时&#…

若川知乎问答:做前端感觉很吃力怎么办?

前些日,我发了一篇推文《做前端感到越来越吃力了!怎么办?》,虽然是推广,但阅读量却很高,推广标题我们大概率不能改,感觉骗了大家,掉粉挺多人。写稿的人可能就是看到了知乎这个问答。…

d3 制作条形图_停止制作常见的坏条形图的5个简单技巧

d3 制作条形图Bar charts were probably the first type of chart you were ever introduced to in first grade. Their simplicity makes them a standard in visualizing data, but it is its accessibility that leads visualizers to often be careless with bar charts.乙…

SVN之使用原则

以下是我起草的部门SVN规范里原则的一部分。文件提交时要求必须提交注释,注明相关修改信息,例如bug号、任务描述等。具体内容可采用约定或者设置的形式。你所提交的改变将体现给其他开发者,要明白提交的后果,提交之前要慎重。代码…

图解 React-router 源码

大家好,我是若川。欢迎加我微信 ruochuan12今天分享一篇react-router源码文章,深入理解路由的本质。微信预计阅读只需8分钟。点击下方卡片关注我,或者查看源码系列文章。阅读源码小 tips:从整体到细节,刚开始不要太拘泥…

android 辅助功能_辅助功能简介

android 辅助功能Accessibility may be more than a moral imperative to ensure products are inclusive of more people who already experience barriers in daily life — it has a very practical outcome, benefiting everyone including the person with the disability…

推荐几个前端大佬,真的厉害!

新的一年,推荐几个还在坚持输出的高质量前端公众号,你想要的:React/Vue/Node/工程化/面试经验等, 这里都有。不多说,直接看介绍。???? 程序员成长指北考拉,一个有趣且乐于分享的妹子,专注 N…

RawCode-本身就是实验性的8位类型

What if a type is created solely from the bit-representation of characters?如果仅根据字符的位表示形式创建类型怎么办? This question was the basis of creating this experimental type. The type no longer uses familiar characters. ‘A’ looks like …

2d访问冲突_Light | 基于环形分隔微镜阵列的高速随机访问轴向聚焦系统

撰稿 | OSANJU 刘 扬01导读近日,来自美国加州大学伯克利分校的Rikky Muller教授团队,在国际顶尖学术期刊《Light: Science & Applications》发表了题为“A micromirror array with annular partitioning for high-speed random-access axial focus…

编译出现ARM与THUMB冲突

问题: fatal error LNK1112: module machine type THUMB conflicts with target machine type ARM 解决方法: 在project-setting-linker-command line下,添加/machine:THUMB,如下: 转载于:https://www.cnblogs.com/xfd…

阿里腾讯面试梳理个人成长经历分享

大家好,我是若川。欢迎加我微信 ruochuan12,长期交流学习。今天分享一篇江西师范大学大四同学学习一年前端入职腾讯的经历,关注很久的读者朋友应该知道我也是毕业于江西不那么知名的高校。微信预计阅读只需18分钟。点击下方卡片关注我&#x…

unity 局部照亮_通过著名的艺术家照亮“光与空间运动”

unity 局部照亮Ever since minimalism momentously gained popularity in the 1960’s, the “Light and Space” movement has naturally acquired prominence for its stunning juxtaposition in geometric abstraction, luminescence, and space. Artwork from this distinc…

如何抓住重点,系统高效地学习数据结构与算法?

你是否曾跟我一样,因为看不懂数据结构和算法,而一度怀疑是自己太笨?实际上,很多人在第一次接触这门课时,都会有这种感觉,觉得数据结构和算法很抽象,晦涩难懂,宛如天书。正是这个原因…

Google Map浏览下载器

很久没有更新博客了,最近为了玩Google Map,专门写了个小工具。用以在浏览Google地图时,将关心区域的图片保存到本地。软件主界面如下图: 主界面提取子库主要功能有: 1、可以浏览Google网站的三种图:交通、地…

Node.js 开发者 2020 年度报告

大家好,我是若川。欢迎加我微信 ruochuan12,长期交流学习。今天分享一篇Node.js报告,记得当时我还参与填写这个调查问卷了,Node.js的重要性不言而喻。微信预计阅读只需7分钟。点击下方卡片关注我,或者查看源码系列文章…