You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
AJAX 即 Asynchronous JavaScript and XML(异步的 JavaScript 与 XML 技术)。
STEP1:XMLHttpRequest 原生对象
varrequest=newXMLHttpRequest();request.open('GET','/my/url',true);request.onload=function(){if(request.status>=200&&request.status<400){// Success!vardata=JSON.parse(request.responseText);}else{// We reached our target server, but it returned an error}};request.onerror=function(){// There was a connection error of some sort};request.send();
大前端的技术原理和变迁史
本文适合前端新手入门,阅读人群最好是前端新手或者后台开发人员,因为我不敢保证对前端老司机有太多收获。
通过阅读本文,你将会大致了解前端这些年发生的事情,以及一些前端当前主流技术的简单原理介绍。所有涉及的内容,都是尽可能的让你捅破这层窗户纸,知道其大致的玩法。
目录
一、前端技术发展轨迹
本节知识点:
1.1 角色架构发展史
Web1.0 到 Web2.0过渡的标志,就是Ajax的出现(2005年)。
1.2 前端技术发展史
1.3 ECMAScript语法发展史
1.4 Ajax技术发展史
AJAX 即 Asynchronous JavaScript and XML(异步的 JavaScript 与 XML 技术)。
STEP1:XMLHttpRequest 原生对象
STEP2:$.ajax 操作
STEP3:Promise 操作
STEP4:生成器 Gererator
STEP5:Async/Await 高级操作
Ajax的相关背景资料:
二、当前主流技术原理介绍
本节知识点:
2.1 SPA 单页面应用原理
什么是SPA? SPA 即单页面,就是页面整体不刷新,不同的页面只改变局部的内容的一种实现方式。
一个完整的URI有以下几部分组成:
浏览器的URL也遵循以上规则,而对于以上规则中,只有
#
后面的fragment
发生改变时,页面不会重新请求,其它参数变化,均会引起页面的重新请求,而在Js中恰恰还有事件window.onhashchange
能监听到fragment
的变化,于是就利用这个原理来达到一个修改局部内容的操作。#fragment
部分就是对应到Js中的location.hash
的值。直接上代码描述:
以上代码直接在HTML上面有2个链接,点击后在页面的部分区域直接显示这2个链接对应的不同的页面内容。
2.2 Node.js 服务器端JS运行原理
服务器上如何应用Js呢?这句话可以理解为:在非网页情况下如何运行Js程序(或者命令行如何运行)。
与Java在服务器上运行需要按照JDK一样,Js要运行也需要安装Node环境,安装以后就可以运行了,具体的可以对照着Java程序来解释说明。
2.3 SSR 服务器端渲染原理
用过Java的人一定对
FreeMarker
不陌生,其工作原理:对于Node.js来说也是一样,只是使用的框架不是FreeMarker罢了!究其原理无非都是:
Template + Data = Output
只是现在前端说的这个SSR,其实就是指后台渲染好数据,直接返回到浏览器,浏览器就直接显示了,下面我们做一个对比,用来说明传统的AJax操作和SSR之间的区别。
使用Ajax操作数据渲染到页面
主要流程如下:
使用SSR技术显示页面
下面示例我们以Vue框架后台直出方案为例:
主要流程如下:
如果有人对这个vue示例的完整构建流程感兴趣,可以按照如下流程快速搭建环境并允许起来:
2.4 Vue MVVM原理
什么是MVC?什么是MVVM?
通过上图可以清晰的看到,MVVM相比MVC来说,缺少了
Controller
一层,传统Controller
做的事情就是处理一堆复杂的逻辑,然后将数据输出到View
上面。那么现在缺少了这一层以后,View
和ViewModel
之间如何进行双向自动关联数据绑定的呢?也就是说,页面上数据发生变化,Js中的数据如何跟着也变化;相反,Js中数据变化了,页面如何自动跟着变化?
举个例子来进一步阐明这个问题,下面的效果如何实现?
页面数据发生变化如何通知到JS
通过给页面元素添加
onchange
或者oninput
事件,在事件中获取表单的值,然后赋值给Js对应的对象上即可。比如:示例中的输入框就可以添加oninput事件
然后在js中定义这个函数执行相关赋值操作就可以:
JS数据变化如何通知到页面
JavaScript原生有个方法
Object.defineProperty()
,这个方法可以重新设置一个js对象中某个元素的一些属性,同时提供了get
和set
方法,允许用户对元素进行重新赋值和取值操作。简单分析一下代码:
正式由于我们可以通过拦截一个属性的
set
方法。所以,我们就可以在set
方法中讲获取到的新值赋值给页面元素就可以了。2.5 Webpack 打包原理
前端为什么要打包?
那么前端为什么要进行打包呢?前端代码不是直接就能运行到浏览器么,还打包干嘛?
要搞清楚这个问题,那么我们就以java为例可能比较恰当,比如:java的工程目录中有一个源码目录:
src
它是用来存放java源码的,但是java实际编译后肯定就没有src这个目录了对吧?
那么
src
源码的作用是什么呢?就是用来更好的归类整理我们的源代码,它有可能是跟我们实际运行的代码结构完全不一样,因为实际运行的是机器能读懂的,而源码是给人看的。所以前端也一样,由于当前阶段,前端的业务逻辑也变的非常复杂,再不是传统意义上的一个 html、一个js、一个css就能搞定的。所以我们要分模块,分目录存放源码,最终通过打包再组装成浏览器可以读懂的代码和目录结构。
比如:我们通过vue的脚手架创建一个vue的webpack项目,看看它的默认的源码目录(src)的树结构:
src中除了有3个子目录
assets
components
router
,还有2个.vue
结尾的文件。所以,这种目录结构和文件在浏览器中肯定是无法运行的,如果我们要运行,就必须对它进行编译,翻译成浏览器能读懂的html/js/css文件才行。当我们打包以后,看到项目的dist目录下就有了编译以后的,浏览器可执行的代码结构:
所以,当前前端代码逻辑复杂,各种框架横行的年代,源码都是不能直接在浏览器访问的,都需要借助打包工具,如:gulp、webpack这些工具进行打包翻译,才能得到真正的可执行的文件。
Webpack 打包原理
一句话概括Webpack的本质:
Webpack打包的简易示意图:
2.6 Sass CSS编译原理
什么是Sass?就是一种能提高CSS开发效率的工具。
其编译原理是:
实际在项目中怎么用Sass呢?
前面在说Webpack的时候说过了,现在前端技术离开打包工具是不能直接运行 ,类似于这种Sass文件也一样。所以,我们只需要在Webpack中增加Sass文件的Loader,这样在代码编译环境,就能自动把Sass文件转换为Css文件,最后引入到Html中的是Css文件,这样页面就能正常渲染了。
Sass有什么好处?
test.scss文件:
如果用传统的css写:
三、一些新技术探索
本节知识点:
3.1 TypeScript
什么是TypeScript?
之所以说TypeScript是JavaScript的超集,就意味着TypeScript在JavaScript的语法基础上,又扩展了更多语法,使得开发更加方便。
接下来我们看看TypeScript的相比JavaScript额外增加的部分:
1、强数据类型
2、接口
3、类
4、泛型
5、枚举
3.2 PWA
什么是PWA?
Web App
,我们都知道就是App中有网页嘛!但是Progressive
渐进式
又该怎么理解?个人理解,
渐进式
的意思就是:循序渐进的发展或者改造
。PWA更直白的意思就是:
所以,PWA就是以循序渐进的方式,提升混合类APP的用户体验,而影响体验最大的问题就是页面加载,所以PWA最核心的技术就是:
离线缓存
,离线缓存大家普遍采用的方案就是:Service Worker
3.3 GraphQL
在了解什么是GraphQL之前,我们先了解一下什么是SQL?
什么是SQL?
说白了,SQL是一种特定的语法,也可以称之为是数据库管理的API,操作数据库必须通过这个语法进行。
什么是GraphQL呢?
用一组图来说明下:
那你又要说了?没有GraphQL我现在客户端和后台之间不照样可以交互吗?
没错!你是这么交互的:
所以,不是说离开GraphQL我们就不能活,而是它给我们提供了一种全新的API查询交互方式,使得客户端和后台的接口通信更加高效罢了。
那么GraphQL相比传统的接口请求,都有哪些优势呢?
1、所见即所得
传统的API是什么样子?
2、减少网络请求次数
只需要一次网络请求,就能获得资源和子资源的数据(例如,上文中文章的评论信息)。
传统的查询,一般先查询Article,再查询Comment。当然你可以一次性去查,让后台一次性返回来,但是一般没有后台会给你设计这样的一个API:
getArticleAndComment
,如何按照Restful的接口标准,你应该需要查询2次。3、参数类型强校验
GraphQL规定了一套数据类型,这就保证接口查询的时候,字段类型就被明确定义,而传统的接口一般很难保证查询参数的类型。
比如,以下就是GraphQL的语法定义:
3.4 Flutter
什么是Flutter?
下图就是使用Flutter开发一款App的样子:
类似于
React Native
框架一样,Flutter也是可以调用一些App系统级的命令,能让你快速开发一款混合类App(Hybrid App)。有兴趣的可以去官网学习:Flutter中文网
四、两个流行的概念解答
本节知识点:
4.1 什么是大前端
本文的标题是
大前端的技术原理和演变史
,现在给大家解答一下,什么是:大前端
。大前端
就是相比前端
而言变大了,那么到底传统意义的前端指什么?变成大前端又有哪些东西变大了呢?传统的意义的前端指是什么呢?
那么大前端又指什么呢?其实经过各种资料考证,并没有这么一个明确的定义,只是随着技术的进步,大家有了一种默认的约定,大前端之所以称之为大前端,主要体现在以下一些方面:
1、大前端 - 前后端分离
随着前后端职责和技术框架的分离发展,产品对前端的要求越来越高,用户对前端的期待越来越高,前端技术发展越来越快,导致前端这个岗位并没有像JSP时代那种画画页面就完事了。这部分体现的是前端的要求更高,责任越大了。
2、大前端 - Node全栈
前后端分离后,前端要独立完成一个事情是不行的,因为缺少后台的支持。但是随着Node的出现,前端可以不用依赖后台人员,也不用学习新的后台语言,就可以轻松搞定后台的这部分事情。这样,面对一些小的系统,前端工程师就可以搞定整个系统。这部分体现了前端的全面性和全栈性。
3、大前端 - 应对各种端
传统的前端工程师,一般指网页开发工程师,网站一般指运行在PC浏览器,慢慢的也要运行在手机上。但是,随着移动互联网的发展,突然冒出来更多的移动设备,比如:手机分为Android手机和苹果手机、智能手表、VR/AR技术支撑的可穿戴设备、眼睛、头盔、车载系统、智能电视系统等等。而这些设备都需要前端的支撑,这时候对前端的技术要求、能力要求就更高。这部分体现了前端的涉猎范围变大。
4、大前端 - 微应用
当微信小程序出来以后,大家第一感觉是前端又可以火一把啦,不需要后台、不需要服务端,只需要在微信平台上开发网页就可以发布上线了。
而近期又有国内多个手机厂家联合推出
快应用
, 跟小程序差不多,只是通过简单的前端开发发布以后,用户不需要安装应用就可以直接在类似于小米、vivo、oppo等手机上打开这样的应用。类似于这些微应用,免后台、免安装的形式出现,也促使了前端这个行业也将涉及到这样的新型领域中,一起推动技术的进步。这部分体现了前端是时代发展的幸运儿。
综上所述,我们可以得到一个大致的定义:
4.2 什么是前端工程化
前端工程化的定义:
一般情况下,一个符合前端工程化要求的方案应该包含以下要素:
另外,我们再谈到工程化,不能只想着前端工程化,而应该站在整个系统考虑如何进行工程化,也就是说对于一整个项目,我们谈到工程化应该考虑哪些因素呢?
一个系统的工程化建设,应该包含以下因素:
参考资料
The text was updated successfully, but these errors were encountered: