大前端时代核心技术

1.前端体系

  • HTML(结构层):超文本标记语言(Hyper Text MarkUp Language),决定网页的结构和内容。
  • CSS(表现层):层叠样式表(Cascading Style Sheets),设定网页的表现样式。
  • JavaScript(行为层):是一种弱类型的脚本语言,其源代码不需经过编译,而是由浏览器解释运行。

1.1 HTML(结构层)

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

1.2 CSS(表现层)

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

CSS预处理器

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

  • SASS:基于Ruby,通过服务端处理,功能强大。解析效率高,上手难度高于LESS。
  • LESS:基于NodeJS,通过客户端处理,使用简单。功能比SASS简单,解析效率也低于SASS,但实际开发中足够了,所以后台人员需要使用的话,建议使用LESS。

1.3 JavaScript(行为层)

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

  • Native原生JS开发
    原生JS开发,也就是按照ECMAScript标准的开发方式,简称是ES,特点是所有浏览器都支持。ES标准已发展到如下版本:ES3、ES4(内部,未正式发布)、ES5(全浏览器支持)、ES6(常用,当前主流版本,可用webpack打包成为ES5支持)、ES7、ES8、ES9、ES10、ES11,这些版本逐步增加新特性。
  • TypeScript微软的标准
    TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基本类的面向对象编程。
    该语言的特点就是除了具备ES的特性之外还纳入了许多不在标准范围内的新特性,所以会导致很多浏览器不能直接支持TypeScript语法,需要编译后(编译成JS)才能被浏览器正确执行。
JavaScript框架
  • jQuery:常用的JavaScript框架,优点是简化了DOM操作,缺点是DOM操作太频繁,影响前端性能。
  • Angular:Google收购的前端框架,由一群Java程序员开发,其特点是是将后台的MVC模式搬到了前端并增加了模块化开发的理念,与微软合作,采用TypeScript语法开发。对后端程序员友好,对前端程序员不太友好。最大的缺点是版本迭代不合理,不同版本完全不相同。
  • React:Facebook出品,一款高性能的JS前端框架,特点是提出了新概念——虚拟DOM,用于减少真实的DOM操作,在内存中虚拟DOM操作,有效的提升了前端渲染效率。缺点是使用复杂,需要额外掌握JSX语言。
  • Vue:一款渐进式JavaScript框架,所谓渐进式就是逐步实现新特性的意思,如实现模块化开发、路由、状态管理等新特性。其特点是综合了Angular(模块化)和React(虚拟DOM)的优点。
  • Axios:前端通信框架。因为Vue的边界很明确,就是为了处理DOM,所以并不具备通信能力,此时就需要额外使用一个通信框架与服务器交互,当然也可以直接选择使用jQuery提供的AJAX通信功能。
JavaScript构建工具
  • Babel:JS编译工具,注意用于浏览器不支持的ES新特性,比如用于编译TypeScript。
  • WebPack:模块大宝漆,主要作用通过是打包、压缩、合并及按需加载。

1.4 UI框架

  • Ant-Design:阿里巴巴出品,基于React的UI框架。
  • ElementUI、iView、ICE:饿了么出品,基于Vue的UI框架。
  • Bootstrap:Twitter推出的一个用于前端开发的开源工具包。
  • AmazeUI:又叫“妹子UI”,一款HTML5跨屏前端框架。

1.5 三端统一

混合开发(Hybrid App)

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

  • 云打包:HBuild——>HBuildX,DCloud出品,API Cloud。
  • 本地打包:Cordova(前身是PhoneGap)
微信小程序

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

  • WeUI:这是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一。

1.6 后端技术

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

  • Express:NodeJS框架。
  • Koa:Express简化版。
  • NPM:项目综合管理平台,类似于Maven。
  • YARN:NPM的替代方案,类似于Maven和Gradle的关系。

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

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

2.1 Vue的UI框架

  • iView
    iView是一个强大的基于Vue的UI库,有很多实用的基础组件比ElementUI的组件更丰富,主要服务于PC界面的中后台产品。使用单文件的Vue组件化开发模式基于NPM+WebPack+Babel开发,支持ES2015高质量、功能丰富友好的API,自由灵活的使用空间。
    备注:属于前端主流框架,选型时可考虑使用,主要特点是移动端支持较多。
  • ElementUI
    ElementUI是饿了么前端开源维护的Vue的UI组件库,组件齐全,基本涵盖后台所需的所有组件,文档讲解详细,例子也很丰富。主要用于开发PC端页面,是一个质量比较高的Vue的UI组件库。
    备注:属于前端主流框架,选型时可考虑使用,主要特点是桌面端支持较多。
  • ICE
    飞冰是阿里巴巴团队基于React/Angular/Vue的中后台应用解决方案,在阿里巴巴内部,已经有270多个来自几乎所有BU的项目在使用。飞冰包含了一条从设计端到开发端的完整链接,帮助用户快速搭建属于自己的中后台应用。
    备注:主要组件还是以React,目前已经支持Vue。
  • VantUI
    VantUI是有赞前端团队基于有赞统一的规范实现的Vue组件库,提供了一整套UI基础组件和业务组件。通过Vant,可以快速搭建出风格统一的页面,提升开发效率。
  • AtUI
    AtUI是一款基于Vue 2.x的前端UI组件库,主要用于快速开发PC网站产品。它提供一套NPM+WebPack+Babel前端开发工作流程,CSS样式独立,即使采用不同的框架实现都能保持统一的UI风格。
  • CubeUI
    CubeUI是滴滴团队开发的基于Vue.js实现的精致移动端软件库。支持按需引入和后编译,轻量级灵活,扩展性强,可以方便地基于现有组件实现二次开发。

2.2 混合开发

  • Flutter
    Flutter是谷歌的移动端UI框架,可在极短的时间内构建Android和iOS上高质量的原生级应用。Flutter可与现有代码一起工作,它被世界各地的开发者和组织使用,并且Fultter是免费和开源的。
    备注:Google出品,主要特点是快速构建原生APP应用程序,如做混合应用该框架为必选框架。
  • lonic
    lonic即是一个CSS框架也是一个JavaScript的UI库。lonic是目前最有潜力的一款HTML5手机应用开发框架。通过SASS构建应用程序。它提供了很多UI组件来帮助开发者开发强大的应用。它使用JavaScript的MVVM框架和AngularJS/Vue来增强应用,提供数据的双向绑定,使用它成为Web和移动开发者的共同选择。

2.3 微信小程序的UI框架

  • mpvue
    mpvue是美团开发的一个使用Vue.js开发小程序的前端框架,目前支持微信小程序、百度智能小程序、头条小程序和支付宝小程序。框架基于Vue.js,修改了的运行时框架runtime和代码编译器compiler实现,使其可运行在小程序环境中,从而为小程序开发引入了Vue.js开发体验。
    备注:完备的Vue开发体验,并且支持多平台
  • WeUI
    WeUI是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一。包含button、cell、dialog、toast、article、icon等各式元素。

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*时代

  • MVC(同步通信为主):Model、View、Controller
  • MVP(异步通信为主):Model、View、Presenter
  • MVVM(异步通信为主):Model、View、ViewModel

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


SPA组件化

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

3.4 NodeJS带来的全栈时代

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


全新的研发模式

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

  • Front-end UI layer处理浏览器层展现逻辑。通过CSS渲染样式,通过JavaScripty添加交互功能,HTML的生成也可以放在这层,具体看场景应用。
  • Back-end UI layer路由、模板、数据获取、Cookie等。通过路由,前端终于可以自主把控URL Design,这样无论是单页面应用还是多页面应用,前端都可以自我调控。后端也终于可以摆脱对展现的强关注,转而可以转型于业务逻辑层的开发。

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

  • 需要前端对服务端编程有更进一步的认识,比如TCP/IP等网络知识的掌掘。
  • NodeJS层与Java层的高效通信。NodeJS模式下,都在服务器端,RESTful HTTP通信未必高效,通过SOAP等方式通信更高效。一切需要在验证中前行。
  • 对部署、运维层面的熟练了解,需要更多知识点和实操经验。
  • 大量历史遗留问题如何过渡,这可能是最大的阻力。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容