前端简史之裂变:Ajax变法

💡 知来处,明去处。了解一门技术的历史,可以帮助我们从历史的角度上去理解这门技术背后的原理,知道这门技术为什么会产生,为什么会变成现在这个样子,它未来的一个发展趋势又是什么样的。

课程简介

《前端简史》系列技术分享课程通过讲述前端演变的发展历史,介绍前端重要技术的实现原理与使用方法,带你走进前端,感受前端的“前世今生”,结交前端历史上举足轻重的几位“大佬”,例如:Ajax、Node、Webpack、SPA、PWA、RN、Flutter等等。

该系列课程目前一共分为三节:《前端简史之裂变:Ajax变法》《 前端简史之纵横:Node东出》《前端简史之崛起:Router迁鼎》。以及不一定会有的《前端简史之天下:跨端跨平台》。

通过这门课程你将获得什么?

  • 宏观上,你将了解前端发展演变的过程,清楚前端岗位的定义与定位,有助于自己做好在前端领域上的职业规划。
  • 微观上,你将学到Ajax、Webpack、前端路由等一系列前端重要技术背后的原理与使用方法,有助于自己在实际项目开发过程中应用更加得心应手。

课程目录

一、前端简史

1、前端起源(1900~1994)

  • 1990 年,万维网之父蒂姆·伯纳斯-李(Tim Berners-Lee)在NeXT电脑上发明了第一个Web浏览器。
  • 1991年8月6日,Tim在alt.hypertext新闻组贴出了一份关于World Wide Web的简单摘要,这标志了Web页面在Internet上的首次登场。
  • 1994年,W3C(万维网)成立,制定HTML/CSS标准,被称为“前端历史的起点”「静态页面」。

2、浏览器战争(1994~2005)

浏览器战争一共打了三场,IE浏览器vs网景浏览器、IE浏览器vs火狐浏览器、IE浏览器vs谷歌浏览器

2.1 IE浏览器vs网景浏览器

  • 1993年3月,第一个面向普通用户的Mosaic浏览器(马赛克)发布,不过仅针对当时少数的Unix操作系统,它的最大特色就是具有方便易用的图形界面。
  • 1993年9月,Mosaic浏览器发表了1.0版本。NCSA中Mosaic项目的负责人Marc Andreesen辞职并建立了网景通讯公司。
  • 1994年10月13日,该公司(Netscape通信公司/网景通讯公司)发布了Mosaic Netscape 0.9,虽然仍是beta版本,成为当时最热门的浏览器。同年12月15日,经过修正后1.0正式版发布,软件改名为Netscape Navigator。  网景导航者的功能和市场占有率,在1.0版推出之后飇升。
  • 1995年8月16日,微软发布IE1。IE(Internet Explorer 在 IE7以前,中文直译为“网络探路者”,但在IE7以后官方便直接俗称”IE浏览器”。)自1995年诞生以来,截至到2014年,共有11个主版本。IE在2015年3月被Microsoft Edge取代。

微软在落后的情况,反编译Netscape的源码,推出IE与JScript。但是由于Bug非常多,大家不愿意为IE开发网站,因此发掘出UA,专门过滤掉IE浏览器。

UA即Navigator.userAgent ,是用一个字符串来记录用户当前运行在什么操作系统与浏览器中。当前IE3的UA是这样的:
Mozilla/2.0 (compatible; MSIE 3.02; Windows 95)
程序判断UA信息,假如发现当前运行的环境是IE浏览器的话,就提示用户用网景浏览器打开。因此微软不得不让自己的UA尽量伪装成网景的UA,欺骗用于检测UA的脚本,达到IE浏览器可以跑这些网站的目的。

最终,第一次浏览器之战以微软胜利,Netscape被美国在线收购,而落下帷幕。

2.1.1 Ajax诞生

英文名:Asynchronous Javascript And XML
中文名:异步JavaScript和XML
Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。使用 JavaScript 向服务器提出请求并处理响应而不阻塞用户核心对象XMLHttpRequest。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果。

  • 1999年,微软公司发布IE浏览器5.0版,第一次引入新功能:允许JavaScript脚本向服务器发起HTTP请求。这个功能当时并没有引起注意,直到2004年Gmail发布和2005年Google Map发布,才引起广泛重视。
  • 2005 年2月,杰西·詹姆士·贾瑞特(Jesse James Garrett)发表了一篇名为《Ajax:一种Web应用程序开发的新方法》的文章后,Ajax被挖掘出,大家才开始重视起这技术的应用。
  • 2005年2月,AJAX这个词第一次正式提出,指围绕这个功能进行开发的一整套做法。从此,AJAX成为脚本发起HTTP通信的代名词。
  • 2006年W3C发布了它的国际标准。

2.2 IE浏览vs火狐浏览器

  • 2002年9月,Mozilla(摩斯拉)发布Phoenix首个版本0.1
  • 2003年4月14日,因为和凤凰科技(Phoenix Technologies)的名称冲突改为“Firebird”
  • 2004年2月9日,Mozilla Firebird决定改称Mozilla Firefox,简称Firefox,正式缩写为Fx或fx
  • 2006年10月底,IE7和火狐浏览器2相继发布,IE7获胜。

2.3 IE浏览器vs谷歌浏览器

  • 2008年,谷歌推出Chrome浏览器,打败IE,自此IE开始走向衰落。
  • 2015年,微软在Win10中内置Microsoft Edge浏览器。
  • 2018年12月,微软正式确认,新的Edge浏览器将从EdgeHTML内核迁移为Chromium内核。
  • 2020年1月,基于Chromium开发的Microsoft Edge正式发布。
  • 2021年5月19日,微软宣布IE浏览器将在次年退出市场。
  • 2022年6月15日,大多数版本的Windows 10系统不再支持IE浏览器,取而代之的是更新、更快、更安全的Edge浏览器。微软在浏览器方面主推Edge,这款产品于2015年启用,与谷歌旗下的Chrome浏览器基础技术相同。
  • 微软建议仍在使用Internet Explorer的用户在2022年夏天之前更换浏览器。

Chromium是Google为发展自家的浏览器Google Chrome(以下简称Chrome)而开启的计划,所以Chromium相当于Chrome的工程版或称实验版(尽管Chrome自身也有β版阶段),新功能会率先在Chromium上实现,待验证后才会应用在Chrome上。

Chromium和Chrome所使用的webkit内核,是目前公认的最快的网页浏览方式。使用Chromium开源代码(基于webkit内核)的浏览器有360极速浏览器、枫树极速浏览器、太阳花浏览器、世界之窗极速版、傲游浏览器和UC浏览器电脑版等。搜狗高速浏览器和qq浏览器官网未提及Chromium,只是说采用webkit内核,经网友测试这两款浏览器,极有可能也是使用的Chromium,只是官方不承认而已。

3、Prototype时代(2005~2009)

prototype教程
Prototype.js 是Sam Stephenson写的一个非常优雅的javascript基础类库,对javascript做了大量的扩展,而且很好的支持Ajax,国内外有多个基于此类库实现的效果库,也做得很棒。

在prototype.js中,prototype对象是实现面向对象的一个重要机制。

每个函数(Function)就是一个对象,函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类的成员的集合。

4、jQuery 时期(2009~2012)

jQuery
jQuery API 中文文档 | jQuery 中文网

jQuery 是继prototype 之后又一个优秀的轻量级JavaScript 框架。其宗旨是———“Write Less, Do More”,写更少的代码,做更多的事情。 它是一个快速和简洁的JavaScript 库,可以简化HTML 文档元素的遍历,事件处理,动画和Ajax 交互以实现快速Web 开发,它被设计用来改变编写JavaScript 脚本的方式。

jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的CSS选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。

当时前端界首要面对的是浏览器兼容性问题,jQuery在处理DOM兼容上真是知微见著, 发掘出大量的DOM/BOM兼容方案(例如Dean Edwrad的addEvent(), IE的px转换方案,domReady的doScroll方案,globalEval的兼容方案等)

  • 2005年8月,John Resig提议改进Prototype的“Behaviour”库,于是他在blog上发表了自己的想法,并用了3个例子做简单的流程说明。
  • 2006年,jQuery发布,它当时的竞争对手很多:Dojo、Prototype、ExtJS、MooTools。 jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)。
  • 2009年,Sizzle选择器引擎研发成功,jQuery才取得压倒性的优势。
  • 2009年1月,jQuery 1.3版发布,它使用了全新的选择符引擎Sizzle,在各个浏览器下全面超越其他同类型JavaScript框架的查询速度,程序库的性能也因此有了极大提升。

5、后jQuery时期(2012~2016)

前端模块化阶段、node.js、npm、webpack、Vite、SVN、Git

jQuery的出现让前端工程师开发更加轻松,假如工程师想实现一个功能,搜索出一个jQuery插件来实现。那时候大家在前端网站就整天介绍jQuery插件,很少讨论一些底层的实现。

同时也冒出很多新的问题:前端工程师通常编写一个页面,会引入十多个乃至几十个jQuery插件,页面上塞满了Script标签。众所周知,Script的加载,会影响到页面的解析与呈现,导致著名的白屏问题(当时前端用力过猛,body中的所有东西都是动态生成的)。

浏览器是多进程的,浏览器每一个 tab 标签都代表一个独立的进程。

浏览器每个tab进程有多个线程,其中GUI渲染线程负责把HTML渲染成可视化的UI,JavaScript引擎线程负责解析和运行JavaScript代码逻辑,两者互斥,js 运行耗时过长就会导致页面阻塞。

当JavaScript代码被执行的时候,GUI渲染进程就会被挂起,等待JavaScript引擎进程空闲了再被执行,以免在渲染期间被JavaScript重复修改DOM造成不必要的渲染压力,采用互斥的的模式等待JavaScript代码执行完毕之后,可以保证渲染是最终的执行结果。

于是一些优秀的前端工程师们决定向后端取经,引入模块机制。早期,这种模块机制在Dojo、EXT这些框架中都是内置的,但是显然说服不了另一个框架的用户用对方的模块机制,于是有人立志要统一这种模块定义方式,成立了CommonJS。CommonJS诞生很久一段时间后,在后端的Node.js出现时才有用武之地。

历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他语言都有这项功能,比如 Ruby 的require、Python 的import,甚至就连 CSS 都有@import,但是 JavaScript 任何这方面的支持都没有,这对开发大型的、复杂的项目形成了巨大障碍。

在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。

6、三大框架割据时代(2016~至今)

前端工程化阶段、MVVM、SPA、小程序、跨端、跨平台

6.1 MVVM框架

2009年,AngularJS开源,Google。Angular

AngularJS诞生于2009年,由Misko Hevery 等人创建,是一款构建用户界面的前端框架,后为Google所收购。

2013年,ReactJS开源,Facebook。React

起初是脸书的内部项目,该公司对市场上所有 JavaScript MVC框架都不满意,决定自行开发一套,用于架设Instagram的网站。

2014年,VueJS开源,尤雨溪。Vue

Vue.js 的 API 是参考了AngularJS、KnockoutJS、Ractive.js、Rivets.js。

6.2 跨平台框架

2015年,React Native (简称RN)发布。React Native

RN是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架 React 在原生移动应用平台的衍生产物,支持iOS和安卓两大平台。RN使用Javascript语言,类似于HTML的JSX,以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。

2016年,Weex开源。WEEX

2016年4月21日,阿里巴巴在Qcon大会上宣布跨平台移动开发工具Weex开放内测邀请。
业内评价:1.0仿RN 2.0仿Flutter 彻头彻尾的KPI产物,文档维护较差

2017年,Flutter发布。Flutter

Flutter 的前身是 2015 年在 Dart Developer Summit(Dart开发者峰会)上发布的 Sky , Sky 使用 Dart 开发,可以在 Android 上开发高达 120FPS 的应用。
2017 年 Google I/O 大会上,Google 首次推出了一款新的用于创建跨平台、高性能的移动应用框架——Flutter。

二、AJAX

简介

英文名:Asynchronous Javascript And XML
中文名:异步JavaScript和XML
Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。使用 JavaScript 向服务器提出请求并处理响应而不阻塞用户核心对象XMLHttpRequest。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果。

代码演示

// 1 - 创建 XHR对象
var request = new XMLHttpRequest();// 2 - 向服务器发送请求
request.open('get', 'https://unpkg.com/axios/dist/axios.min.js', true);
request.send();// 3 - 接收服务器响应
request.onreadystatechange = function () {// 请求成功的状态if (request.readyState == 4 && request.status == 200) {// do something ...document.getElementById("myDiv").innerHTML = 'XHR 请求:' + request.responseText;}
}

三、Axios

简介

Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。

代码演示

axios.get('https://unpkg.com/axios/dist/axios.min.js').then(function (response) {// handle successdocument.getElementById("myDiv").innerHTML = 'Axios 请求:' + response.data;}).catch(function (error) {// handle errordocument.getElementById("myDiv").innerHTML = 'Axios 请求:' + error.message;}).then(function () {// always executedconsole.log('/// axios always executed! ///')});

实现一个简单的 MyAxios 库(我不配) 构造方法

// 构造函数
class MyAxios {get(url) {return new Promise((resolve, reject) => {const xhr = new XMLHttpRequest()xhr.open('get', url, true)xhr.onload = function () {const res = {}res.data = xhr.responseTextres.status = xhr.statusresolve(res)}xhr.send()})}
}// 实例应用
var myAxios = new MyAxios();
myAxios.get('https://unpkg.com/axios/dist/axios.min.js').then(function (response) {// handle successdocument.getElementById("myDiv").innerHTML = 'MyAxios 请求:' + response.data;})

以上演示代码完整版地址 👉 github仓库

四、项目实践

请求流程图 & 代码解读

⚠️ 内部文档不宜公开

五、参考资料

XMLHttpRequest - Web API 接口参考 | MDN

AJAX 教程 | 菜鸟教程

Axios

Home - Ecma International

World Wide Web Consortium (W3C)

Front-end Developer Handbook 2019 - Learn the entire JavaScript, CSS and HTML development practice!

前端开发 20 年变迁史 - 知乎

- 完 -

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

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

相关文章

“她”和“杰西”:虚拟助手的机器人魅力

Over the years — usually courtesy of bizarre Channel 4 documentaries — I’ve heard about people falling in love with all sorts of weird and wonderful things. 版本岁月-通常是礼貌离奇4频道的纪录片-我听说过的人爱上了各种各样的神秘和奇妙的事情 。 Some of th…

投机之王杰西·利弗莫尔的经典炒股语录

1、优秀的投机家们总是在等待,总是有耐心,等待着市场证实他们的判断。要记住,在市场本身的表现证实你的看法之前,不要完全相信你的判断。 2、要想在投机中赚到钱,就得买卖一开始就表现出利润的商品或者股票。那些买进…

交易原则Jesse Livermore 杰西·利弗莫尔

交易原则(Jesse Livermore 杰西利弗莫尔): https://www.youtube.com/watch?v8cph2_Xvfbo&listPL-c0DN3fTeQcjsrsRJVET4RWLQBQRx_bb&index19&ab_channel%E5%B0%8FLin%E8%AF%B4 1、 2、 1和2本质上都是对抗自己的本能&#xff1…

【深度学习】CVPR 2023论文总结!CV最热领域颁给多模态、扩散模型

编辑:桃子 好困 来源:新智元 【导读】CVPR 2023有哪些亮点?从录用论文中我们又能看到CV领域有哪些趋势? 一年一度的CVPR即将在6月18-22日加拿大温哥华正式开幕。 每年,来自世界各地的成千上万的CV研究人员和工程师聚…

如何彻底隐藏表?

哈喽,哈喽,大家好。我的Edon 最近chatGPT很火,这个AI不光会聊天,还会写论文,写诗词,做PPT,写代码,等等。有些人就开始急了,说现在AI都这么强了,那我们这些码…

人工大模型给VBA纠错实践 大赞

近期想给部门办公软件Excel升级一块产品复验期限预警功能报表,日常我们使用思路是:从Excel中写好数据通过按钮(查看报表)点击调取宏(VBA)把数据存储到ACCESS数据库中,需要使用的时候再从数据库中…

基于Bi-LSTM与CRF实现中文命名实体识别任务

一、基于Bi-LSTM与CRF实现中文命名实体识别任务 命名实体识别是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。本项目实现一个简单的命名实体识别方法,该方法通过BiLSTMCRF模型预测出文本中文字所对应的标签,再根…

前沿技术揭秘:云原生-展望容器、自动化和DevOps的发展趋势

2023年最火热的就是ChatGPT,当然还有5G技术、AI、机器学习、区块链等技术。另外还有一个现象就是网上热点及企业招聘JD,都会出现一个词汇那就是“云原生”。云原生究竟是上帝的宠儿还是时代的骄子呢,我们来盘一盘 1、什么是云原生技术? 云原生…

一键安装langchain-ChatGLM

最近开源大模型层出不穷,非常火爆。好多小伙伴跃跃欲试,但是,大模型本地搭建,就算是只做推理也需要性能强悍的机器,更不要说微调和全参数训练,没有几十万的显卡投入是搞不定的。chatGLM推理可以在cpu上运行…

重磅!GPT-4发布,目前最先进人工智能系统

今天OpenAI发布了GPT-4,ChatGPT Plus订阅用户(20美元/月)可以使用最新的GPT-4,免费用户不变。 根据OpenAI官方对GPT-4新特性的介绍,这里总结有下面5个特性: GPT-4 可以更准确地解决难题,这要归功…

火爆的GPT-4来了!

3月14日,人工智能公司OpenAI发布了ChatGPT(GPT-3.5阶段)的升级版GPT-4,让原本已经略显沉寂的ChatGPT话题再次迎来了“爆炸式热议”,毫无悬念地冲上了社交平台热搜。“AI 终将取代人类”、“GPP-4考试能力强国90%的人类…

ChatGPT的公司CEO:Altman 认为的优秀人才品质

Altman 认为的优秀人才品质 Sam Altman认为下面这些是优秀创业者的共有品质: 1 清晰的愿景 能准确地阐明他们在做什么以及原因。如果创业者不能够清晰的阐明,也就没有真正理解自己的创业。在Airbnb申请时,他们做了绝大部人永远不会做的事情——在陌生人的客厅睡充气床。…

Python+Socket实现多人聊天室,功能:好友聊天、群聊、图片、表情、文件等

一、项目简介 本项目主要基于python实现的多人聊天室,主要的功能如下: 登录注册添加好友与好友进行私聊创建群聊邀请/申请加入群聊聊天发送图片聊天发送表情聊天发送文件聊天记录保存在本地中聊天过程中发送的文件保存本地 二、环境介绍 python3.8my…

Linux-Socket实现模拟群聊(多人聊天室)

Linux-Socket实现模拟群聊&#xff08;多人聊天室&#xff09; 简单版本 服务端源码 #include<stdio.h> #include<stdlib.h> #include<pthread.h> #include<unistd.h> #include<string.h> #include<sys/socket.h> #include<arpa/ine…

不要拿 ChatGPT 干这 6 件事

虽然 ChatGPT 是一个强大的 AI 工具&#xff0c;能够生成连贯和相关性极强的回复&#xff0c;但它也有其局限性。它不是敏感信息的安全渠道&#xff0c;也不是法律或医疗咨询的可靠来源&#xff0c;不能替代人类的决策或专业的心理健康支持&#xff0c;也不是事实信息的权威来源…

宽客挑战赛: 量化投资基础知识12题

跨界知识聚会系列文章&#xff0c;“知识是用来分享和传承的”&#xff0c;各种会议、论坛、沙龙都是分享知识的绝佳场所。我也有幸作为演讲嘉宾参加了一些国内的大型会议&#xff0c;向大家展示我所做的一些成果。从听众到演讲感觉是不一样的&#xff0c;把知识分享出来&#…

为了做宽客选择读一个PhD值得吗

转 为了做宽客选择读一个PhD值得吗&#xff1f; 编者按语&#xff1a;接触不少想往quant方向走的童鞋,对于量化交易是很感兴趣也觉得未来大有可为&#xff0c;但是quant由于其行业性质其门槛具有一定的专业要求。现在很多投行、银行、公募、私募等招聘职位基本都要求硕士学历&…

“宽客鼻祖”的诞生——爱德华·索普

本文摘自《算法交易员&#xff1a;会赚钱的人工智能》 1961 年某个炎热的夜晚&#xff0c;美国拉斯维加斯赌场里有个男人正在玩“21点”&#xff0c;他的身后围着数十名看客。虽然这个男人已经淡定地玩了整整 6 小时&#xff0c;但从他戴着的大黑框眼镜和淋漓的汗水中还是可以…

克里夫·阿斯内斯:量化天才的宽客人生

克里夫阿斯内斯 &#xff08;Clifford Asness&#xff09;&#xff0c;1966年10月1日出生在美国纽约皇后区的一个普通中产阶级家庭。父亲是一名律师&#xff0c;母亲独立经营一家医疗教育公司。在宾夕法尼亚大学取得商学院和工程与应用科学院的两个学士学位之后&#xff0c;他进…

宽客人物事件图谱

看完了《宽客》这本书&#xff0c;描述的是20世纪美国华尔街对冲基金、股票市场、证券市场从早期的投资者靠直觉交易进化为数学家、物理学家靠数学模型进行交易的发展历程&#xff0c;这些进入金融界的数学家、物理学家依靠大数据分析、自动化交易找到市场中稍纵即逝的交易机会…