前端开发那些事儿Ping说Vue.js

大前端时代核心技术

2021-03-23  本文已影响0人  Ping开源

1.前端体系

1.1 HTML(结构层)

超文本标记语言,缩写为HTML,标准通用标记语言下的一个应用。HTML是一种标记语言,是网页制作所必备的工具。

1.2 CSS(表现层)

CSS层叠样式表是一门标记语言,并不是编程语言,因此不可以自定义变量,不可以引用等。换句话说,就是不具备任何语法支持。
缺点
①语法不够强大,比如无法嵌套书写,导致模块化开发中需要书写很多重复的选择器。
②没有变量和合理的样式复用机制,使得逻辑上相关的属性值必须以字面量的形式重复输出,难以维护。
为了解决上述缺点,前端开发人员使用一种称之为CSS预处理器的工具,提供CSS缺失的样式层复用机制、减少冗余代码,提高样式代码的可维护性。大大提高了前端在样式上的开发效率。

CSS预处理器

CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增加了一些编程的特性,将CSS作为目标生成文件,任何开发者就只要使用这种语言进行CSS的编码工作。转化成通俗易懂的话来说就是,用一种专门的编程语言,进行Web页面样式设计,再通过编译器转化为正常的CSS文件,以供项目使用。
常用的CSS预处理器

1.3 JavaScript(行为层)

JavaScript一门弱类型脚本语言,其源代码在发往客户端运行之前不需经过编译,而是将文本格式的字符代码发送给浏览器由浏览器解析运行。

JavaScript框架
JavaScript构建工具

1.4 UI框架

1.5 三端统一

混合开发(Hybrid App)

主要目的是实现一套代码三端统一(PC、Android:.apk、iOS:.ipa)并能够用到设备底层硬件(如:传感器、GPS、摄像头等),打包方式主要有以下两种:

微信小程序

小程序是一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。

1.6 后端技术

前端人员为了方便开发也需要掌握一定的后端技术,但后端知识体系极其庞大复杂,所以为了方便前端人员开发后端应用,就出现了NodeJS这样的技术。
NodeJS的作者已经声称放弃NodeJS(说是架构做的不好再加上笨重的node_modules)开始开发全新架构Deno。

2.前端主流框架(Vue.js)

Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库(如:vue-router 跳转、vue-resource 通信、vuex 管理)或既有项目整合。

2.1 Vue的UI框架

2.2 混合开发

2.3 微信小程序的UI框架

3.了解前后端分离的演变史

3.1后端为主的MVC时代

为了降低开发的复杂度,以后端为出发点,比如:Struts、SpringMVC等框架的使用,就是后端的MVC时代。
以SpringMVC流程为例:


SpringMVC流程

①发起请求到前端控制器(DispatcherServlet)。
②前端控制器请求HandlerMapping查找Handler,可以根据xml配置、注解进行查找。
③处理器映射器HandlerMapping向前端控制器返回Handler。
④前端控制器调用处理器适配器去执行Handler。
⑤处理器适配器去执行Handler。
⑥Handler执行完成给适配器返回ModelAndView。
⑦处理器适配器向前端控制器返回ModelAndView,ModelAndView是SpringMVC框架的一个底层对象,包括Model和View。
⑧前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(JSP)。
⑨视图解析器向前端控制器返回View。
⑩前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域。
⑪前端控制器向用户响应结果。
优点:MVC是一个非常好的协作模式,能够有效降低代码的耦合度,从架构上能够让开发者明白代码应该写在哪里。为了让View更纯粹,还可以使用Thymeleaf、FreeMarker等模板引擎,使模板里无法写入Java代码,让前后端分工更加清晰。
缺点:①前端开发重度依赖开发环境,开发效率低,这种架构下,前后端协作有两种模式:
Ⅰ第一种是前端写Demo,完成后,让后端去套模板。好处是Demo可以本地开发,很高效。不足是还需要后端套模板,套完后还需要前端来确定,来回沟通调整成本比较高。
Ⅱ另一种协作模式是前端负责浏览器端的所有开发和服务器端的View层模板开发。好处是UI相关的代码都是前端去写就好,后端不用太关注,不足就是前端开发重度绑定后后端环境,环境成为影响前端开发效率的重要因素。
②前后端职责纠缠不清:模板引擎功能强大,依旧可以通过拿到的上下文变量来实现各种业务逻辑。这样,只要前端弱势一点,往往就会被后端要求在模板层写出不少业务代码。还有一个很大的灰色地带是Controller,页面路由等功能本应该是前端最关注的,但却是由后端来实现。Controller本身与Model往往也会纠缠不清,复杂的业务代码经常会出现在Controller层。
③对前端发挥的局限性:性能优化如果只在前端做,空间非常有限,于是经常需要与后端合作,但由于后端框架限制,很难使用Comet、BigPipe等技术方案来优化性能。

3.2 基于AJAX带来的SPA时代

AJAX(Asynchromous JavaScript And XML,异步JavaScript和XML,老技术新用法)被正式提出并开始使用CDN作为静态资源储存,于是出现了JavaScript(在这之前JS都是用来在网页上贴图的)的SPA(Single Page Application)单页面应用时代。


Web 2.0

优点:这种模式下,前后端的分工非常清晰,前后端的关键协作点是AJAX接口。实际上,这与JSP时代区别不大,复杂度从服务端的JSP移到了浏览器的JavaScript,浏览器端变得很复杂。类似SpringMVC。这个时代开始出现浏览器端的分层架构。

SPA

缺点:①前后端接口的约定:如果后端的接口一塌糊涂,如果后端的业务模型不够稳定,那么前端开发会很难,尝试通过接口规则、接口平台等方式来做。有了和后端一起的接口规则,还可以用来模拟数据,使得前后端可以在约定接口后实现高效并行开发。
②前端开发的复杂度控制:SPA应用大多以功能交互型为主,JavaScript的代码量大。大量的JS代码的组织,与View层的绑定等,都非常麻烦。

3.3 前端为主的MV*时代

为了降低前端开发复杂度,涌现了大量的前端框架,比如:AngularJS、React、Vue.js、EmberJS等,这些框架框架总的原则是先按类型分层,比如Templates、Controllers、Models,然后再在层内做切分。


SPA组件化

优点:①前后端职责很清晰:前端工作在浏览器端,后端工作在服务器端。清晰的分工,可以让开发并行,测试数据的模拟不难,前端可以本地开发。后端则可以专注于业务逻辑的处理,输出RESTful等接口。
②前端开发的复杂度可控:前端代码很重,但合理的分层,让前端代码能各司其职。
③部署相对独立:可以快速改进产品体验。
缺点:①代码不能复用。比如后端依旧需要对数据做各种校验,校验逻辑无法复用浏览器端的代码。如果可以复用,那么后端的数据校验可以相对简单化。
②全异步,对SEO不利。往往还需要服务端做同步渲染的降级方案。
③性能并非最佳,特别是移动互联网环境下。
④SPA不能满足所有需求,依旧存在大量多页面应用。URL Design需要后端配合,前端无法完全掌握。

3.4 NodeJS带来的全栈时代

前端为主的MV*模式解决了很多很多问题,但如上所述,依旧存在不少不足之处。随着NodeJS的兴起,JavaScript开始有能力运行在服务端。这意味着可以有一种新的研发模式:


全新的研发模式

在这种研发模式下,前后端的职责很清晰。对前端来说两个UI层各司其职:

通过Node,Web Server层也是JavaScript代码,这意味着部分代码可前后复用,需要SEO的场景可以在服务端同步渲染,由于异步请求太多导致的性能问题也可以通过服务端来缓解。前一种模式的不足,通过这种模式几乎都能完美解决掉。
与JSP模式想不,全栈模式看起来是一种回归,也的确是一种向原始开发模式的回归,不过是一种螺旋上升式的回归。基于NodeJS的全栈模式,依然面临很多挑战:

总结:前后端分离的开发思想主要是基于SoC(关注度分离原则),上面种种模式,都是让前后端的职责更加清晰,分工更加合理高效。

上一篇 下一篇

猜你喜欢

热点阅读