阅读更多

3顶
0踩

数据库

转载新闻 非关系型数据库 NoSQL 的崛起

2012-12-06 17:10 by 副主编 WnouM 评论(7) 有10973人浏览
《连线》杂志网络版近日刊载文章,对NoSQL(非关系型数据库)的来源与历史进行了追溯。文章主要介绍了最古老的NoSQL数据库之一CouchDB,这种数据库的创造者达米安•卡茨受到了在线协作平台Lotus Notes的启发,他的故事有助于帮助解释NoSQL运动的兴起,及为何这种数据库与以往的数据库存在如此巨大的差异。


CouchDB的创造者达米安·卡茨


以下是这篇文章的全文:

在追溯NoSQL运动的源头时,大多数互联网人士都会想到谷歌和亚马逊。

随 着自身网络服务日益取得巨大而成功的增长,谷歌和亚马逊需要新的方法来存储不断增加的服务器所带来的数量庞大的数据,于是两家公司都为此而创造了一个新的 软件平台——谷歌构建了BigTable平台,而亚马逊则构建了Dynamo平台。在这两家互联网巨头发布研究论文来描述其各自的数据存储平台以后,其他 许多公司也都寻求进行复制。

其结果是,一支NoSQL(非关系型数据库)“大军”就此产生,这种数据库是专为在数千台服务器之间运作而设计的。这些新时代的软件平台——包括Cassandra、HBase和Riak等——对数据库市场进行了改造,不仅有助于Facebook和Twitter等诸多互联网巨头的运作,同时也涵盖了更多的传统业务。

“如 果你看看市场上所有的NoSQL解决方案,那么就会发现每一种解决方案都能追溯至亚马逊Dynamo论文或谷歌BigTable论文。”云计算公司 Joyent首席技术官贾森•霍夫曼(Jason Hoffman)说道。“如果谷歌或是亚马逊没人曾写过一份学术报告(来描述NoSQL平台)的话,那么今天的世界将会是个什么样子呢?”

好 吧,如果真是那样,那么世界还将拥有另一种最古老的NoSQL数据库之一,那就是CouchDB。CouchDB的创造者达米安•卡茨(Damian Katz)并未受到谷歌、亚马逊或是其他任何网络巨头的启发,而是受到了在线协作平台Lotus Notes的启发,这个平台最初是在二十世纪七十年代和八十年代开发的。

虽然 Lotus Notes以身为一个电子邮件系统而闻名于世,但事实上它并非只是个电邮系统,同时还是构建依赖于数据库的应用的基础——换句话说,是有组织的信息集合。 通过使用Lotus Notes这个平台,企业能构建从开支申报应用到IT帮助桌面工具等所有东西。卡茨就是构建这种应用的人之一,他从1995年开始就为Lotus开发 Notes应用。他表示,即使是在那时,这个平台也已经展示出一些特性,而正是这些特性让今天的NoSQL数据库取得了如此之大的成功。

正 如其他NoSQL后继者一样,Lotus Notes也同样来自于关系数据库的“领地”。关系数据库是建立在关系数据库模型基础上的传统数据库,借助于集合代数等概念和方法来处理数据库中的数据。 “那是一个复杂的系统,能通过关系数据库让原本难以做到的事情变得简单。”卡茨说道。

从 很多方面来说,卡茨的故事都有助于帮助解释NoSQL运动的兴起——以及为何这种数据库与以往的数据库存在如此巨大的差异。虽然这场运动毫无疑问是取得了 成功,但NoSQL数据库的概念仍旧很难确定下来——“NoSQL意味着如此之多且各有不同的事情,要看你正在讨论什么而定。”谷歌杰出工程师安德鲁•菲 克斯(Andrew Fikes)最近曾这样对我们说道——在整个科技行业中,还有很多人尚未把握到这些新数据库的重要性。

“NoSQL” 其实该算是用词不当,因为NoSQL数据库并不是为了摒弃SQL(Structured Query Language,结构化查询语言,这是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展 名);更好的名称本来应该是“non-relational database”(非关系型数据库)。NoSQL数据库不使用为关系数据库提供支撑的整齐数据图表。

NoSQL数据库拥有两种基本特性:首先,这种数据库能在许多服务器之间延展——允许用户在必要时候扩大运算,甚至是在不同的地理位置之间也可以——其次,这种数据库能给用户带来按自己喜欢的方式架构数据的自由度,正是这第二个特性与Lotus Notes非常相似。

柏拉图式的理想

Notes 平台是受PLATO Notes的启发而创造出来的,后者是一个在伊利诺斯大学PLATO主机上运行的在线社区。PLATO Notes的创造者大卫•伍利(David R. Woolley)曾在1994年写道,这个项目始于1973年,当时还只是一个简单的报错系统。在最开始的时候,人们通过编辑一个文本文件的方式来报错, 但这种方式带来了一些问题。

“那样做根本没有安全性可言,想要确切地知道是谁写了一份报错文件是不可能做到的。”伍利说道。“大多数人都会报错时签上名字或至少是名字的首字母缩写,但没有什么东西能强制他们这样去做。有些时候,会有爱开玩笑的人觉得,删除整个文件是件很有意思的事情。”

因 此,当时年仅17岁的伍利就被分配到了一项任务,那就是创造一个更具结构性的系统来报错。他开发出来的工具允许用户将其报错报告输入到一个应用中去,该应 用会把报告保存为文本文件,并加上用户的姓名和提交日期。然后,支持部门的员工能分屏显示和查看这些文件,就像我们今天的电子邮件客户端一样:报错报告列 表在上面,报告文本在底下。

随后,所有这些信息会被保存为一个大的文本文件,而不是关系数据库。今天,我们将其称为“文件数据库”(document database)。

你可以把一个关系数据库看作一个庞大的电子表格,数据以图表、行和列的方式组织起来。如果你想要增加一个域,那么就新增一列,这一列会在表格的每一行中出现,从而让你的数据变得结构化和统一化,但管理许多无结构性的数据或是以多种方式构建结构的数据则要困难一些。

文件数据库更像是文件的集合,每一个“入口”都是一个文件,而且都能拥有自己的结构。如果你想要对一个“入口”添加一个域,那么这样做的同时不会对其他任何“入口”造成影响。

不久以后,PLATO开发者就添加了更多的Notes应用。到二十世纪七十年代末,他们拥有了一个电子邮件应用,一个一般用途留言板,以及网络游戏等,诸如此类。

在 1984年,雷•奥兹(Ray Ozzie)——一名Lotus开发者,在伊利诺斯大学上学时曾在PLATO工作过——离开了Louts,自己开创了一家名为Iris Associates的公司。随后,Lotus对这家公司进行了投资,双方签署了一项协议,内容是Lotus将拥有使用Iris旗舰产品的独家权利:一个 基于PLATO的企业用系统。

时至今日,许多人都认为Lotus Notes是一个过时的系统,应该像WordPerfect和Novell Netware那样被扔进同一个垃圾桶。但是,Notes为它之后的几乎所有类型的企业通信和协作应用铺平了道路,从微软Outlook电子邮件客户端到Jive Software等社交网络工具再到CouchDB数据库都是如此。

卡茨与CouchDB

1995年时,卡茨以夏季实习生的身份加入Lotus;大约就在同一时间,Lotus被IBM收购。卡茨在Lotus Notes顾问部门工作了一段时间,然后又回到这家公司,加入了Iris团队,当时Iris已被Lotus正式收购。

在 Iris,卡茨对Lotus Notes的精髓作出了改进。他重写了为Formula提供支持的引擎,这是用来开发Notes应用的脚本语言。卡茨表示,当时他远不能胜任这项工作,但 他同时认为自己天生就是要写代码的人。“每完成一个@function,我就跟打了一针毒 品似的;我就像是个瘾君子,在不停地寻找下一个需要修补的地 方。”他后来在自己的博客中这样写道。

卡茨在2005年离开Lotus,加盟了一家名 为Koobie的创业公司;但在不久以后,他就启动了一项事业,目标是将Lotus Notes的思潮带入现代社会,这最终演变成了CouchDB。卡茨曾在一篇早期的博客中谈到这个项目,当时他写道:“Couch就是为网络而从头开始构 建的Lotus Notes。”

最初版本的CouchDB使用一种类似于 Formula的编程语言,但不久以后卡茨就带领这个项目走向了新的方向,从平台转变成了一个专用的数据库。“MySQL是其人气度达到顶峰的产物。”卡 茨说道。“当时如果你告诉人们说,你在开发某种类似于Lotus Notes的东西,那么就会让他们发出惊叹的声音。”

在 这条发展的道路上也存在不少坎坷。在2007年初,卡茨到了Sun Microsystems的MySQL团队工作,放弃了构建CouchDB的工作。但是,这个开源项目吸引了其他的开发者坚持不懈地为之努力,其中著名的 有詹•雷纳德(Jan Lehnardt)和诺亚•斯莱特(Noah Slater)等。斯莱特推出了JSON,在当时以文本文件来对数据进行结构化的新格式。在Sun休陪产假时,卡茨最后替换了整个CouchDB存储引 擎,用XML取代了JSON。在那时,卡茨认识到与使用Formula式的引擎相比,使用网络应用标准语言JavaScript可能是一种更好的想法。 “一旦我们推出JavaScript以后,”他说道,“这个项目就真正腾飞了起来。”

Couch的商业化

在 2007年,“复活”后的CouchDB受到了IBM的关注。不久以后,卡茨的名字回到了这家公司的工资单上,负责全职开发CouchDB。最为关键的 是,IBM同意将这个项目捐给非营利组织Apache基金会(Apache Foundation),这意味着IBM还不得不向开发者和CouchDB用户授权使用该公司的相关专利。这也就是说,IBM将无法起诉CouchDB侵 犯了与Lotus Notes相关的专利。

与此同时,NoSQL运动则全速展开。谷歌和亚马逊的论文令这种模式——此前已经有开源开发者倡导这种模式——变得流行起来,同时也为如何让其在现实世界中运作起来提供了某种深刻的理解。

一 家名为10gen的公司从2007年开始致力于开发一个名为MongoDB的NoSQL文件数据库,用BigTable作为参照模式。“那是完全独立 的,MongoDB、Couch和Lotus Notes两两之间没有太多的平行之处。”10gen创始人德怀特•梅里曼(Dwight Merriman)说道。一年以后,Facebook开放了Cassandra的源码,那是一个NoSQL数据库,整合了来自于Dynamo和 BigTable的概念。到2009年,随着CouchDB、Cassandra、MongoDB及其他NoSQL数据库加速发展,科技博客 ReadWriteWeb提出了一个问题,那就是关系型数据库是否已注定灭亡。

与此同时,当时供职于Last.fm的约翰•奥斯卡森(Johan Oskarsson)主持召开了首次NoSQL会议,无意中给这场原本定义松散的运动起了一个名字。

在 形势一片大好的大肆宣传浪潮中,卡茨、雷纳德和克里斯•安德森(J. Chris Anderson)创立了Couch.io,来对CouchDB进行商业化。到这个时候,一个由麻省理工学院物理学家组成的团队已经开创了一家名为 Cloudant的CouchDB公司,致力于开发自己版本的数据库,这个数据库名为BigCouch。虽然Couch.io(后来更名为 CouchOne)难以在现实世界中找到自己的位置,但很快就通过与另一家NoSQL公司Membase合并的方式找到了自己的立足点。

Membase 需要一名新的首席技术官,而CouchOne则需要一名首席执行官;Couch需要一种更好的方式来将规模扩大至大量的服务器,而这正是Membase所 能提供的;Membase需要一种更好的数据结构,而CouchDB能提供这种结构;很可能最重要的是,Membase拥有被卡茨认为是能够持续运营的商 业模式。在合并以后,新公司和新的数据库都被命名为Couchbase。

但是,此次合 并交易所带来的一个麻烦的结果是与Apache基金会的关系破裂。“我们真的曾付出过很多努力来让这种变化同步发生。”卡茨说道。“但到最后的结果是,与 Apache项目所能达到的前进速度相比,我们需要的速度要快得多。”最终的结局是,卡茨决定放弃他自己创立的项目,全心致力于Couchbase的发 展。在2012年1月份,也就是合并交易完成的一年以后,他在自己的博客上发表了一封措辞强硬的“告别信”,写道:“CouchDB的未来是什么?那就是 Couchbase。”

斯莱特此时已经成为Apache的CouchDB项目负责人,他用一条简短的Twitter消息对此作出了回应:“CouchDB的未来还是CouchDB。”

卡 茨承认,他原本可以处理得更加老练一些,但说到最后,这个故事证明了NoSQL已经变得多么活力四射。开发者仍在顽强地致力于开发CouchDB,哪怕没 有卡茨的参与也还是坚持不懈。Cloudant也仍旧致力于开发CouchDB,承诺将把BigCouch的代码还给这个项目。

Couchbase也正处在发布2.0版本数据库的边缘,此前该公司已经争取到了NTT DoCoMo和AOL等大客户。文件数据库的想法在开发者的脑海中已经生根,这不仅要感谢CouchDB及其诸多分支,同时也要感谢MongoDB所带来的人气。

与此同时,IBM则将放弃Lotus这个品牌名;Notes则将继续生存下去,至少现在是这样。在它的背后可能是最好的年华,但它为未来更多的美好时光搭好了舞台。

附:数据库大事年表

  • 1961年:通用电气着手开发Integrated Data Store(IDS,集成数据存储)。通常来讲,IDS被认为是第一个“完全的”数据库。在今天的NoSQL数据库出现的数十年以前,IDS所做的就是如今NoSQL和大数据的工作。
  • 1967:IBM 开发出Information Control System and Data Language/Interface(ICS/DL/I,信息控制系统与数据语言/界面),这是阿波罗(Apollo)项目的分级数据库。ICS随后变 成了Information Management System(IMS,信息管理系统),与IBM的System360主机整合到一起。
  • 1970年:IBM研究员埃德加•科德(Edgar Codd)发表题为《大型共享数据库的关系模型》(A Relational Model of Data for Large Shared Data Banks)论文,建立了关系型数据库所使用的数学基础。
  • 1973年:大卫•伍利(David R. Woolley)开发出了PLATO Notes,用一个文本文件作为报错系统的数据存储方式。PLATO Notes对随后Lotus Notes的出现形成了影响。
  • 1974 年:IBM着手开发System R,将科德的关系型数据库模型变成了现实,首次使用了SQL(结构化查询语言),随后这个系统演变成了商业化产品IBM DB2。在科德研究的启发下,伯克利大学的学生迈克尔•斯通布雷克(Michael Stonebraker)和尤金•王(Eugene Wong)开始开发INGRES,它随后成为了PostGreSQL、Sybase及其他许多关系型数据库的基础。
  • 1979年:第一个公开可用版本的Oracle数据库发布。
  • 1984年:雷•奥兹(Ray Ozzie)成立Iris Associates,创造了一个受PLATO Notes启发的组合件系统。
  • 1988年:由文件数据库提供支持的Lotus Agenda发布。
  • 1989年:Lotus Notes发布。
  • 1990年:Objectivity发布了期间对象数据库。
  • 1991年:Key-value类型数据库Berkeley DB发布。
  • 2003年:Live Journal开放最初版本Memcached的源码。
  • 2005年:达米安•卡茨(Damien Katz)开放CouchDB源码。
  • 2006年:Google发表BigTable论文。
  • 2007年:亚马逊发表Dynamo论文。10gen开始编制MongoDB代码。Powerset开放BigTable clone克隆版Hbase的源码。
  • 2008年:Facebook开放Cassandra源码。
  • 2009年:科技博客ReadWriteWeb提出一个问题:“关系型数据库是否已注定灭亡?” Redis发布。首次NoSQL会议在旧金山召开。
  • 2010年:Memcached项目的一些负责人与社交游戏公司Zynga开放Membase源码。
  • 大小: 23.9 KB
来自: 腾讯科技
3
0
评论 共 7 条 请登录后发表评论
7 楼 transist 2013-01-10 09:41
mongodb在并发查询压力下频繁crash;虽然数据插入速度快,但即使做replica sets,也会造成部分数据不一致,只能说NoSQL的适用场景有限。
6 楼 allenny 2012-12-10 13:07
kjj 写道
freish 写道
nosql解决了几个重要的问题就能大范围使用:1、事务 2、抽象的标准API

能解决事务问题,基本就可以击溃传统sql了


鱼与熊掌不可兼得,混合模式才是正道。
5 楼 kidneyball 2012-12-10 08:33
kjj 写道
freish 写道
nosql解决了几个重要的问题就能大范围使用:1、事务 2、抽象的标准API

能解决事务问题,基本就可以击溃传统sql了


CAP理论已经证明了一个系统不可能同时获得高可用性,高一致性和高分区容错性。而任何一个在线系统都不可能牺牲可用性去换其他特性。传统sql(ACID体系数据库)强调可用性和一致性,nosql提供可用性和分区容错性。nosql的立足点就是牺牲一定的一致性去换分区容错性。除非CAP被推翻了,否则nosql是不会完全取代传统sql的。
4 楼 kjj 2012-12-09 14:25
freish 写道
nosql解决了几个重要的问题就能大范围使用:1、事务 2、抽象的标准API

能解决事务问题,基本就可以击溃传统sql了
3 楼 zg_wxl 2012-12-08 23:04
看用在哪了  关系复杂的业务 就不能用了
这东西最近还是很火的   我还不会   后期关注
2 楼 freish 2012-12-07 17:10
nosql解决了几个重要的问题就能大范围使用:1、事务 2、抽象的标准API
1 楼 white_crucifix 2012-12-07 10:28
沙发~ Couch

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 实现和IE浏览器交互的几种方法的介绍

    如何实现对IE浏览器中对象的操作是一个很有实际意义问题,通过和IE绑定的DLL我们可以记录IE浏览过的网页的顺序,分析用户的使用行为和模式。我们可以对网页的内容进行过滤和翻译,可以填写网页中经常需要用户填写的Form内容等等,我们所有的例子代码都是通过VC来表示的,采用的原理是通过和IE对象的接口的交互来实现对IE的。实际上是采用COM的,我们知道COM是和语言无关的一种二进制对象交互的模式,所以

  • 使用python+selenium控制手工已打开的浏览器

    我们可以利用Chrome DevTools协议。它允许客户检查和调试Chrome浏览器。 打开cmd,在命令行中输入命令: chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile" 对于-remote-debugging-port值,可以指定任何打...

  • ie浏览器提示 "Internet Explorer 已经限制此网页运行脚本或Activex控件"

    “Internet Explorer 已经限制此网页运行脚本或Activex控件”出现的条件有以下几种:1、本地调试html页 2、内有js (外部引用,内部引用,标签绑定等) 3、特殊的css(filter behavior expression等) 4、flash等插件调用 5、activex控件为了防止出现这种提示,可以在ie浏览器中设置。具体是选择Internet选项-》高级-》在

  • 阻止IE弹出“在此页上的 ActiveX 控件和本页上的其他部份的交互可能不安全。你想允许这种交互吗?”对话框

    //在包含DllRegisterServer和DllUnregisterServer函数的cpp文件中加入以下代码 //加入一个新的头文件 #include //以下GUID为为当前使用的组件的GUID const GUID CDECL CLSID_SafeItem ={ 0x6a3227ec, 0x9371, 0x4294, { 0x82, 0xee, 0x29, 0x9d, 0xd, 0x

  • 浏览器访问网页的原理

    原理: 转载于:https://www.cnblogs.com/fuxuyu/p/7623321.html

  • js实现网页和控件的简单交互

    本功能不仅实现网页和控件的简单交互,还实现了点击网页网页内容被修改。 1. 通过点击网页中的网页链接,调用脚本; 2. 脚本调用控件里的函数,控件里的函数把结果返回; activeXtest.html ActiveX function GetUrl4(id) { var items=documen

  • 实现前后端数据交互的方法

    前端工程师的职责:1、UI重构 2、在正确的区域渲染出服务端的数据。 毕竟,我们要构建一个大的web应用,必然不是普普通通的静态页面构成。 下文将罗列前端工程师应该必备的同后端打交道的常用技能。 1、服务端渲染   谈起服务端渲染,对于动态服务而言,这个世界上跑的大多数页面都经过服务端的数据渲染,接口->前端赋值->模板渲染。   这些都是在服务器完成,在我们查看源码的时候...

  • 前端必经之路:浏览器底层工作原理

    今天要写的是一篇关于浏览器底层工作原理的技术科普文,作为一个前端爱好者,在平时的日常工作中,最常打交道的莫过于浏览器了。不过,大多数人并不知道,在我们打开浏览器并浏览一个网页时,浏览器底层具体进行了什么工作。今天我将带领大家,逐步剖析我们在使用浏览器访问网页的过程中,浏览器究竟为我们做了些什么。 在进入正文之前,先给大家引入一个话题。相信每个人都曾迷惑于互联网一些复杂难...

  • 模拟登录知乎:利用selenium接管浏览器

    本文借鉴于:https://www.cnblogs.com/lovealways/p/9813059.html 我们先使用浏览器登录退出知乎,电脑上还带着知乎的cookie,所以我们模拟登录的时候就可以跳过验证码(手动滑稽) 原理:我们使用selenium中的webdirver打开的浏览器没有浏览器记录,也就是最纯净的浏览器,所以也不会携带cookie之类的信息,但是我们使用selenium接管浏...

  • 实现和IE浏览器交互的几种方法

    计算机世界2000年第25期实现和IE浏览器交互的几种方法浙江大学计算机系 胡朝晖 陈 奇 俞瑞钊  如何实现对IE浏览器中对象的操作是一个很有实际意义的问题,通过和IE绑定的DLL 我们可以记录IE浏览过的网页的顺序,分析用户的使用行为和模式。我们可以对网页的内容进行过滤和翻译,可以自动填写网页中经常需要用户填写的Form内容,等等。  本文所有的例子代码都是通过VC来表示的,采

  • 吐槽不好的交互设计2——便利通

    如实记录我在便利通上注册账号、绑定便利通金卡、缴纳公共事业费的经历。也许其中有某一步是“其实是有的/可以的,你怎么没看到”,但,确实,我就是这么理解我操作中的每一个步骤的。 用户经常不认真看屏幕就点击按钮或者链接。他们更多是靠以往的经验来引导他们对界面的感知,而不是看清屏幕上的实际内容。 ——Jeff Johnson 得到三张便利通卡,需要去网站上注册一个账号来绑定这些卡。 注册了一个...

  • DOM应用---遍历网页中的元素

    DOM应用---遍历网页中的元素作者:杨老师下载源代码一、摘要  在我们编写的程序中,如果想要实现对浏览器打开的网页进行监视、模拟操纵、动态提取用户输入、动态修改......等功能,那么请你抽出宝贵的时间,继续往下阅读。本文介绍的知识和示例程序都是围绕如何遍历 HTML 中的表单(form)并枚举出表单域的属性为目标的,对于网页中的其它元素,比如图象、连接、脚本等等,应用同样的方法都可以轻松实

  • 浏览器显示及交互背后的原理

    浏览器显示及交互背后的原理 引子 因为笔者(爱编程的光头强)近期在写一本关于小程序入门的书籍。其中有一章是介绍虚拟DOM的,它是位于Javascript和真正DOM之间的一层缓存层。为什么引入它,为什么它这么流行,前端三大框架,小程序等,随处可见它的身影。其背后原理是什么。不基于浏览器背后的...

  • Web建站基本概念

    首先要知道网站访问大概是什么个过程: 假设你在浏览器地址栏输入这个问题的地址 http://www.zhihu.com/question/22689579 访问过程和下图差不多,浏览器和服务器交流,服务器和数据库交流(有时候数据库就在服务器那台机子上) HTML 与 CSS 你家电脑拿到一个 html (就是上图 HTTP 响应的 body 里的内容)之后,就会对它进行

  • 数据库和网页之间的数据交互

    浏览器发送请求 localhost:8080/home 通过thymeleaf (xmlns:th=“http://thymeleaf.org”>)和model.addAttribute实现 服务器和网页的连接 通过userDao里面的jdbcTemplate的方法实现服务器和数据库的操作 spring MVC 其实是通过服务器作为中介实现页面和数据库的数据交互 1.Controller部分...

  • Python接管本地浏览器或者接管pyqt5搭建的浏览器,绕过WebDriver识别

    Python接管本地浏览器,绕过WebDriver识别 首先打开chrome的目录,然后在命令行输入一下命令,为chrome开启一个端口 chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile" 对于-remote-debugging-port值,可以指定任何打开的端口。 对于-user-data-dir标记,指定创建新Chrome配置文件的目录。它是为了确保在单独的配置文件中启动chrom

  • 浏览器的底层是如何完成一次网络请求的?

    对于面试的大部分前端开发者来说,对浏览器的了解也算是一知半解,因为我们一开始前端觉得,我们开发中通常使用浏览器来显示和调试页面用的,不会涉入到太过的相关浏览器工作原理知识。 这你就大错特错了,虽然浏览器默默的为我们工作,但是有关浏览器的工作原理不但在你就业前端面试中属于重中之重,也是在前端优化中占有很大比重。作为一个前端开发如果不了解浏览器的工作原理,只能永远停留在前端“切图仔”水平。 PS...

  • 浏览器与服务器交互的过程

    https://www.cnblogs.com/lyc-smile/p/5111606.html

Global site tag (gtag.js) - Google Analytics