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

大家好,我是若川。今天分享一篇「前端工程化」的好文。非广告,请放心阅读。可点击下方卡片关注我,或者查看系列文章。今天发文比较晚,以往都是定时早上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,一经查实,立即删除!

相关文章

axure文本框值相加_Axure教程:计数文本域实现

原标题:Axure教程:计数文本域实现制定UI规范时,遇到实现“限制字数的文本域”的交互问题,即当用户输入的字数长度超过限制要求,如何只保留规定长度的文本?效果如下:我们知道【Number】类型的文本…

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…

拗口翻译

I find many times people use temporary tables because they learned in other databases that joining too many tables in a single query is a ʹbad thingʹ. This is a practice that must be unlearned for Oracle development. Rather then trying to out‐smart the …

javascript 手机手势动作touch触屏原理分析

转载链接:http://www.lvtao.net/web/220.html $(function(){document.getElementById("moveId").addEventListener(touchstart, touchStart);document.getElementById("moveId").addEventListener(touchmove, touchMove);document.getElementBy…

并发工具类(四)线程间的交换数据 Exchanger

前言JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch、CyclicBarrier、Semphore、Exchanger、Phaser;  CountDownLatch、CyclicBarrier、Semphore、Phaser 这四个工具类提…

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

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

l2范数求导_机器学习中的范数规则化之(一)L0、L1与L2范数

source: https://blog.csdn.net/zouxy09/article/details/24971995zouxy09qq.comhttp://blog.csdn.net/zouxy09今天我们聊聊机器学习中出现的非常频繁的问题:过拟合与规则化。我们先简单的来理解下常用的L0、L1、L2和核范数规则化。最后聊下规则化项参数的选择问题。…

9.struts1.x中tiles框架的使用

在页面直接使用titles标签先引入标签&#xff1a;<%taglib uri"http://struts.apache.org/tags-tiles" prefix"tiles" %> 将模板页面要代替的内容用标签占位&#xff1a;<tiles:insert attribute"content"></tiles:insert> 在…

Debian 9.6.0 + OpenMediaVault 4.x : U盘作系统盘时遇到的问题

前几天在虚拟机试验的时候还说装到实机一般也没什么问题&#xff0c;然后突然间想试试如果把 Debian9OMV 都放到U盘里会怎么样。于是就折腾&#xff08;然后懵逼&#xff09; 先总结一下 写入openmediavault官方的iso到U盘使用UNetbootin写入Debian9的iso使用UltraISO的默认设置…

新浪微博、腾讯微博、QQ空间、人人网、豆瓣 一键分享API

转载链接&#xff1a;http://www.bluesdream.com/blog/sina-tencent-renren-douban-share-a-key-api.html 新浪微博&#xff1a; http://service.weibo.com/share/share.php?url count表示是否显示当前页面被分享数量(1显示)(可选&#xff0c;允许为空) &url将页面地址转…

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

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

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

寒假前给大家分享了一个图&#xff0c;大家要的教程来了。【数据绘图】好图分享&#xff1a;寒假&#xff1f;不存在的&#xff01;​mp.weixin.qq.com绘图思路&#xff1a;左侧起止时间&#xff1a;散点图&#xff0c;交换XY坐标轴&#xff1b;中间的连线为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.在滚动社交媒体时&#…

CentOS服务器上部署 oracle10gr2

1、下载Centos系统 Linux 镜像文件。 推荐使用 CentOS5.4&#xff0c;下载地址&#xff1a;http://isoredirect.centos.org/centos/5/isos/i386/ 。这个是 32 位的 Linux 系统镜像安装文件&#xff0c;进入下载页面后&#xff0c;如果是 DVD 光盘安装&#xff0c;可以仅…

回顾:中网通讯网络公司CEO罗与曾作客新浪嘉宾聊天室

转载链接&#xff1a;http://tech.sina.com.cn/it/w/2001-11-09/91253.shtml 回顾&#xff1a;中网通讯网络公司CEO罗与曾作客新浪嘉宾聊天室 大家好&#xff01;   主持人 &#xff1a;各位网友&#xff0c;下午好&#xff0c;今天我们请到了中网通讯网络公司首席执行官罗…

form——验证器Validators

form表单最大的作用就是验证功能了&#xff0c;通过cleaned_data清洗&#xff0c;我们可以获取传来的值&#xff0c;通过参数、验证器、自定义验证方法&#xff0c;我们可以做到很多的验证。 验证器可用于在不同类型的字段之间重用验证逻辑。validators有自带的验证器&#xff…

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

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

惠新宸php教程_惠新宸:首位国人加入PHP语言官方开发组

PHP开发组终于有了国人参与。最近&#xff0c; Laruence(真名惠新宸)加入了PHP语言官方开发组。 做PHP的同学一定很熟悉他了&#xff0c;他的博客风雪之隅(https://www.laruence.com/)发表了很多PHP源代码分析和扩展开发相关的文章。他使用PHP扩展开发的PHP框架Yaf&#xff0c;…

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.乙…