2023年6月21日发(作者:)
Web技术发展史Web技术发展史Web开发指的是⽹页系统开发,每次在浏览器中输⼊⽹址时,总会先输⼊www,这⾥其实是World Wide Web的简称,现在也简称Web,中⽂译为万维⽹。Web设计初衷是⼀个静态信息资源发布媒介,通过超⽂本标记语⾔(HTML)描述信息资源,通过统⼀资源标识符(URI)定位信息资源,通过超⽂本转移协议(HTTP)请求信息资源。HTML、URL和HTTP三个规范构成了Web的核⼼体系结构,是⽀撑着Web运⾏的基⽯。这样说太过专业化了,⽤简单的话说,打个⽐⽅:假设有100台计算机,这100台计算机可以分布在世界任何⼀个地⽅,⽆所谓。如果我想让这100台计算机相互通信,怎么办。那把这100台计算机⽤光纤相互连接起来吧,组成⼀个⽹路。到这还不⾏,这只是硬件上连接起来了,通信是可以通信了,但计算机们都不知道对⽅发的消息是什么意思,⽽且寻址也是⼀个问题。这时就需要⼀个通信协议了,然后TCP/IP就诞⽣了。有了这个协议后,100台计算机算是真正可以发送消息了,⽽Web就是建⽴在这个基础上的。再设想⼀下,现在1号计算机想获取99号计算机上磁盘上的⼀张图⽚,怎么办?这时URI就诞⽣了,URI作为统⼀资源标识符,专做这个事情。那么拿到资源后怎么展⽰就是HTML做的事情了,⽽计算机通信的协议就是通过HTTP协议了(HTTP协议是基于TCP协议的⼀个上层协议)。因此,⼤家开发的Web应⽤本质上就是将服务器中的资源提供的互联⽹中,成为Web这个全球超⼤规模分布式系统中的⼀部分。下⾯我就来扒⼀扒Web开发经历过哪些阶段。1. 静态⽹页时代1994年,⽹景公司(Netscape)发布了Navigator浏览器0.9版。这是历史上第⼀个⽐较成熟的⽹络浏览器,轰动⼀时。但是,这个版本的浏览器只能⽤来浏览,不具备与访问者互动的能⼒。最初在浏览器中主要展现的是静态⽂本或图像信息,即将⽹页的HTML代码编写好,然后将他放在服务器上通过浏览器访问这个静态的HTML⽂件。这个时期的技术处于较为原始阶段,没有Javascript,没有CSS的年代,写出的HTML给⼈的感觉就是⼀些⽂字堆砌在⼀起,没有美感,也不存在动态交互。只有GIF图⽚第⼀次为HTML页⾯引⼊了动态元素。那时的⽹页⼤致长这个样⼦此时的⽹景公司(Netscape)也苦于浏览器没有动态效果,因此急需⼀种脚本语⾔,后来⽹景公司开发出了⼀门新语⾔javascript,有了Javascript后⽤户就具备了与浏览器交互的能⼒。但是页⾯的画风太丑,⼀直被⼈们吐槽,因此⼤概在同时期⼜诞⽣了另⼀名语⾔CSS,专门负责定义HTML的标签样式。1994年,W3C组织(World WideWeb Consortium)成⽴,CSS的创作成员全部成为了W3C的⼯作⼩组并且全⼒以赴负责研发CSS标准,层叠样式表的开发终于⾛上正轨,有越来越多的成员参与其中。Javascript与CSS两⼤前端语⾔诞⽣后,静态页⾯也可以像桌⾯应⽤程序那样美观和动态交互了,下⾯是苹果公司早期的主页那时Web的⼯作原理也相对简单,就是浏览器请求服务器的静态HTML⽂件,然后服务器将静态⽂件返回给浏览器渲染成⽂本展⽰,其⼯作流程⼤致如下图2. 动态内容CGI时代随着业务发展,⼈们已经不仅仅满⾜于访问放在Web服务器上的静态⽂件,⽐如你想让访问者看到有多少其他访问者访问了这个⽹站,或者想让客户去填写这样⼀个表单,包含有姓名和邮件地址,要实现这样的功能,意味着客户端与服务端要进⾏数据交互,⽽且服务端还需要把⽤户数据永久的保存起来,这些功能是静态页⾯⽆法实现的。于是1993年CGI(Common Gateway Interface)出现了,Web上的动态信息服务开始蓬勃兴起。CGI定义了Web服务器与外部应⽤程序之间的通信接⼝标准,因此Web服务器可以通过CGI执⾏外部程序,让外部程序根据Web请求内容⽣成动态的内容。Perl因为跨操作系统和易于修改的特性成为CGI的主要编写语⾔。当然,CGI可以⽤任何⽀持标准输⼊输出和环境变量的语⾔编写,⽐如Shell脚本,C/C++语⾔,只要符合接⼝标准即可。⽐如⽤C语⾔编写CGI程序,把希望返回的HTML内容通过printf输出就可以发送给Web服务器,进⽽返回给⽤户。CGI应⽤程序运⾏在浏览器可以请求的服务器系统上,此时Web开发的架构⼤致如下图由于CGI执⾏时需要使⽤服务器CPU时间和内存。如果有成千上万的这种程序同时运⾏,会对服务器系统提出极⾼的要求。你要慎重考虑这个问题,以防⽌服务器系统崩溃。当时组织CGI/Perl这样的脚本代码太混乱了。CGI伸缩性不是太好(经常是为每个请求分配⼀个新的进程),也不太安全(直接使⽤⽂件系统或者环境变量),同时也没提供⼀种结构化的⽅式去构造动态应⽤程序。如果⼀个CGI脚本可以在每台计算机上做同样的事情;编写脚本就会变的很容易。不幸的是,CGI脚本依赖于服务器的操作系统,因此,对于⾮UNIX服务器来说,Prl(UNIX下编写脚本的⼀个常⽤⼯具)脚本毫⽆⽤处。这也是开发⼈员最痛苦的事情,这意味着同⼀个应⽤服务,需要根据不同的操作系统各⾃开发⼀套。所以,你必须定制安装你的CGI脚本。这也是后来基于 JVM 平台的语⾔流⾏的主要因素。3. 模板引擎时代(1)PHP/ASP时代尽管CGI解决了⽹页动态数据的问题,但它的弊端也是越来越明显,依赖于操作系统,移植性差,HTML代码与服务端代码杂糅在⼀起不便于维护。为了处理更复杂的应⽤,⼈们在想能不能把HTML返回中固定的部分存起来(我们称之为模版),把动态的部分标记出来, Web请求处理的时候,程序先获取动态数据,再把模版读⼊进来,把动态数据填充进去,形成最终返回。举个例⼦,你通过页⾯搜索框搜索⼀个关键词,请求到达Web服务器,后台从数据库或是⽂件⾥拿到数据,然后把这些数据填充到返回结果的HTML模版中,返回给浏览器。但是这件事情⾃⼰来做显然太繁琐⽽且是重复劳动,于是1994年的时候,PHP诞⽣了,PHP可以把程序(动态内容)嵌⼊到HTML(模版)中去执⾏,不仅能更好的组织Web应⽤的内容,⽽且执⾏效率⽐CGI还更⾼。之后96年出现的ASP上也都可以看成是⼀种⽀持某种脚本语⾔编程,ASP使⽤VB语⾔的模版引擎。更重要的是,模板引擎的出现使得HTML代码和服务端代码分离开来,使得开发流程更加规范,逻辑更加清晰。⽽CSS允许开发者⽤外联的样式表来取代难以维护的内嵌样式,⽽不需要逐个去修改HTML元素,这让HTML页⾯更加容易创建和维护。此时,有了这些脚本语⾔,搭配上后端的数据库技术,Web更是开始⼤杀四⽅了,像电⼦商务这样的应⽤系统也可以通过Web技术来构建。Web已经从⼀个静态资源分享媒介真正变为了⼀个分布式的计算平台了。反过来看,你也应该知道,不是只有当今这些流⾏脚本语⾔可以写Web应⽤,C语⾔⼀样可以做这件事情。通过C语⾔来获取数据和渲染Web页⾯的例⼦在追求极致访问速度的互联⽹公司是⾮常常见的,但是脚本语⾔在开发效率上更胜⼀筹。(2)JSP/SERVLET时代Servlet是⼀个优秀的Web技术规范,Servlet 看起来像是通常的 Java 程序。Servlet 导⼊特定的属于 Java Servlet API 的包。因为是对象字节码,可动态地从⽹络加载,可以说 Servlet 对 Server 就如同 Applet对 Client ⼀样,但是,由于 Servlet 运⾏于 Server 中,它们并不需要⼀个图形⽤户界⾯。从这个⾓度讲,Servlet 也被称为 FacelessObject。由于前后端交互的问题,sun公司⼜发布了JSP,JSP全称是Java Server Pages,它和Servlet技术⼀样,都是sun公司定义的⼀种⽤于开发动态web资源的技术。JSP最⼤的特点在于,写jsp就像在写html,但它相⽐html⽽⾔,html只能为⽤户提供静态数据,⽽Jsp技术允许在页⾯中嵌套java代码,为⽤户提供动态数据。它的出现⼀改以前java开发⼈员需要在Servlet中⾃⼰将html代码 返回给前端的⼯作⽅式,⽽是直接在jsp中编写html代码,极⼤的⽅便了开发⼈员的使⽤。这时已经初见前端分离的雏形了。jsp出现后,美⼯可以把页⾯原型图画好,再交给前端⼯程师按照原型图将静态页⾯写出来,待静态页⾯写好后,再交给java开发⼯程师把html代码复制到jsp中,这时只需要把后端处理的值填到对应的jsp中即可。对于⼀个系统开发,⼈员可以明确分⼯,前端后端开发部分可以同时进⾏。这个时期后端架构图⼤致如下4. JavaEE时代Web开始⼴泛⽤于构建⼤型应⽤时,在分布式、安全性、事务性等⽅⾯的要求催⽣了J2EE(现在已更名为Java EE)平台在1999年的诞⽣,从那时开始为企业应⽤提供⽀撑平台的各种应⽤服务器也开始⼤⾏其道。Java Servlet、Java Server Pages (JSP)和Enterprise JavaBean (EJB )是Java EE中的核⼼规范,Servlet和JSP是运⾏在服务器端的Web组件。2000年随之⽽来的.net平台,其构件化的Web开发⽅式以及Visual 开发环境的强⼤⽀持,⼤⼤降低了开发企业应⽤的复杂度。第⼀次让程序员可以像拖拽组件来创建Windows Form程序那样来组件化地创建Web页⾯,Java平台后来出现的JSF也承袭了这⼀思想。两⼤平台在相互竞争和模仿中不断向前发展。EJB运⾏在服务器端的业务组件,是⼀种分布式组件技术J2EE⾥,除了Servlet外另⼀个重量级的规范就是EJB。EJB设计的来源是Corba技术,分布式对象技术在EJB规范中有完整的体现。Rod在著作中对EJB规范粗重庞⼤难⽤提出各种质疑,尤其是针对其强制分布的要求。我的观念是分布式⽀持没有错,现在EJB规范中对于Local和Remote的划分定义是正确的。开发⼈员应该⼀开始就需要了解接⼝粒度的划分,本地和远程接⼝是不同的。对于⼀般的⼩型应⽤,Servlet和EJB容器都在⼀个虚拟机中,本地接⼝是合理的,但对于⼤型企业应⽤和互联⽹级别应⽤,势必需要服务的远程划分和调⽤。所以早期的EJB,可以说⼀⽅⾯设计不完备,另⼀⽅⾯⼜过度设计。但EJB⾃从3以后完全脱胎换⾻,成为设计良好的规范。⼤家有没有想过所谓企业应⽤和普通应⽤之间最⼤的差别是什么?我认为是⽤户数量级别的差异,导致前端设计⽅式,软件体系,后台数据库,缓存技术应⽤,有不同的设计理念和⽅式。⽤更技术化来说,就是可扩展性,⾼可⽤性,容灾能⼒以及数据的⼀致性。实际上这样的思维⽅式很好,因为企业应⽤追求的是稳定,所以在架构设计时⼀是要求效率,⼆是⾯向失败编程,即开发时⾸先不是想正常情况下应该怎么样,⽽是把所以有能异常的情况都考虑在⾥⾯,并为异常情况做好解决措施。从软件层⾯考虑,⼀个企业应⽤软件可能⽤户数并不太多,就企业中百来号⼈,但前后台的交互是长时间,多次会话交互的。JSF技术其实是借鉴了微软,它们继承了传统IDE快速开发的思路,希望通过拖拽连接可以快速开发⼀个应⽤。页⾯上的组件,对应后台服务器的业务组件,在得到服务器请求之后,组件需要做⼀系列动作来完成解析,校验,模型重建,业务⽅法调⽤,页⾯渲染等步骤,这些必然有个较长的过程。复杂性,效率,和其他技术的融合,JSF技术从诞⽣起就被质疑不断,⽽且⾯对每个明星技术,都有些格格不⼊,⽐如Ajax出现了,⽽JSF要求的Post⽅式还需要重刷页⾯。但JSF⼀直在改进,越来越科学完善。如今,配合CDI,JSF是企业应⽤开发的⾸选技术之⼀,⼤家可以研究⼀下Oracle的应⽤产品和ADF开发框架。5. Web层框架百花齐放后端技术逐渐规范稳定后,为了提⾼⼯作效率避免重复造轮⼦。Web技术的发展开始了⼀段框架横飞的年代,各种辅助Web开发的技术框架层出不穷。虽然脚本语⾔⼤⼤提⾼了应⽤开发效率,但是试想⼀个复杂的⼤型Web应⽤,涉及到的Web页⾯多种多样,同时还管理着⼤量的后台数据,因此我们需要在架构层⾯上解决维护性和扩展性等问题。这个时候,MVC的概念被引⼊到Web开发中来了。2004年出现的Struts就是当时⾮常流⾏的Java Web开发的MVC框架。MVC早在1978年就作为Smalltalk的⼀种设计模式被提出来了,应⽤到Web应⽤上,模型Model⽤于封装与业务逻辑相关的数据和数据处理⽅法,视图View是数据的HTML展现,控制器Controller负责响应请求,协调Model和View。Model,View和Controller的分开,是⼀种典型的关注点分离的思想,不仅使得代码复⽤性和组织性更好,使得Web应⽤的配置性和灵活性更好。这是Spring MVC的⽰意图,典型的MVC架构。MVC的架构不仅仅是后端代码分层结构,由于各个层次相互解耦,因此⽤户可以根据业务场景合理选择各个层次的框架。例如View层可以使⽤jsp,thymeleaf。Model层可以使⽤mybatis,hibernate。Controller层可以使⽤Spring,Struts等等。也正是MVC的架构,使得各式各样的框架层出不穷。6. CSS,Jacascript上⾯主要说了后端web技术的演变,随着后端技术的发展前端技术也在⽇新⽉异,如今前端⽹页开发与莽荒时代的静态⽹页相⽐,不仅有各种各样的UI框架,更是参考了后端技术,在前端也实现MVC的架构。下⾯就来看⼀看前端技术的演变。⾸先就是CSS和JS的诞⽣。javacript的诞⽣还有⼀段故事,前⾯说到⽹景公司开发的浏览器只能展⽰静态页⾯,因此⽹景公司想在浏览器端嵌⼊⼀种语⾔或是脚本,使得⽤户可以和浏览器做⼀些动态交互,从⽽提升⽤户的体验。当时⽹景公司有两个⽅案:⼀个是采⽤现有的语⾔,如Perl、Python、Tcl、Scheme等等,允许它们直接嵌⼊⽹页;另⼀个是发明⼀种全新的语⾔。⾼层对于两个⽅案⼀时难以决定,就在这时,发⽣了另外⼀件⼤事:1995年Sun公司将Oak语⾔改名为Java,正式向市场推出。Sun公司⼤肆宣传,许诺这种语⾔可以”⼀次编写,到处运⾏”,它看上去很可能成为未来的主宰。⽹景公司动了⼼,决定与Sun公司结成联盟。它不仅允许Java程序以applet(⼩程序)的形式,直接在浏览器中运⾏;甚⾄还考虑直接将Java作为脚本语⾔嵌⼊⽹页,只是因为这样会使HTML⽹页过于复杂,后来才不得不放弃。此时,34岁的系统程序员Brendan Eich登场了。1995年4⽉,⽹景公司录⽤了他。公司决定指派他作为新语⾔的开发者,并要求这个语⾔必须与java⾜够相似,但⽐java简单。但是,他对Java⼀点兴趣也没有。为了应付公司安排的任务,他只⽤10天时间就把Javascript设计出来了。(ps:与⼤神的差距,别⼈10天开发出⼀门语⾔,我10天能完全上⼿⼀门新技术就不错了:)由于设计时间太短,语⾔的⼀些细节考虑得不够严谨,导致后来很长⼀段时间,Javascript写出来的程序混乱不堪。谁也想不到如今世界排名前5五的Javascript竟是在10天内被开发出来的。随着HTML的成长,为了满⾜页⾯设计者的要求,HTML添加了很多显⽰功能。但是随着这些功能的增加,HTML变的越来越杂乱,⽽且HTML页⾯也越来越臃肿。于是CSS便诞⽣了。1994年哈坤·利提出了CSS的最初建议。⽽当时伯特·波斯正在设计⼀个名为Argo的浏览器,于是他们决定⼀起设计CSS。其实当时在互联⽹界已经有过⼀些统⼀样式表语⾔的建议了,但CSS是第⼀个含有“层叠”丰意的样式表语⾔。层叠样式表(英⽂全称:Cascading Style Sheets)是⼀种⽤来表现HTML(标准通⽤标记语⾔的⼀个应⽤)或XML(标准通⽤标记语⾔的⼀个⼦集)等⽂件样式的计算机语⾔。CSS不仅可以静态地修饰⽹页,还可以配合各种脚本语⾔动态地对⽹页各元素进⾏格式化。CSS 能够对⽹页中元素位置的排版进⾏像素级精确控制,⽀持⼏乎所有的字体字号样式,拥有对⽹页对象和模型样式编辑的能⼒。7. 浏览器的魔术:AJAXJavaScript最终被提交到欧洲计算机制造商协会(ECMA),做为中⽴的ECMA开始了标准化脚本语⾔之路,并将其命名为ECMAScript。JavaScript可以响应浏览器端的⽤户事件,检测表单的正确性,动态修改DOM结构,因此可以减少与服务器端的通信开销,并且做出很酷的页⾯动态效果。2005年出现的AJAX这个概念使得JavaScript再次⼤放异彩。AJAX即“Asynchronous Javascript And XML”(异步的JavaScript和XML技术)。Ajax 不是⼀种新的编程语⾔,⽽是⼀种⽤于创建更好更快以及交互性更强的Web应⽤程序的技术。AJAX是⼀种已有技术的mashup,多种技术组合在⼀起形成了其特⾊和优势,早在1998年就已经开始有⼈使⽤。Google在地图和Gmail等产品中对这项技术的深⼊应⽤,以及AJAX这个吸引眼球的名字的提出,使其正式站在了聚光灯下,开始吸引⽆数⼈的⽬光。我们知道Web应⽤中⽤户提交表单时就向Web服务器发送⼀个请求,服务器接收并处理传来的表单,并返回⼀个新的⽹页。⽽前后两个页⾯中的往往⼤部分HTML代码是⼀样的,每次都返回整个页⾯内容是⼀种带宽资源的浪费。⽽AJAX应⽤仅向服务器发送并取回必须的数据,并在客户端采⽤JavaScript处理来⾃服务器响应,更新页⾯的局部信息。使⽤Ajax的最⼤优点,就是能在不更新整个页⾯的前提下维护数据。这使得Web应⽤程序更为迅捷地回应⽤户动作,并避免了在⽹络上发送那些没有改变的信息。对应⽤Ajax最主要的批评就是,它可能破坏浏览器的后退与加⼊收藏书签功能。在动态更新页⾯的情况下,⽤户⽆法回到前⼀个页⾯状态,这是因为浏览器仅能记下历史记录中的静态页⾯。⼀个被完整读⼊的页⾯与⼀个已经被动态修改过的页⾯之间的可能差别⾮常微妙;⽤户通常都希望单击后退按钮,就能够取消他们的前⼀次操作,但是在Ajax应⽤程序中,却⽆法这样做。不过开发者已想出了种种办法来解决这个问题。AJAX的出现,催⽣诸如EXTJS、EASYUI等⼀些基于JS的前端框架。⼤⼤提⾼了前端页⾯的开发效率。8. 前端MVC:Angular/React/Vue这种模式下,前后端的分⼯⾮常清晰,前后端的关键协作点是 Ajax 接⼝,规定好交互接⼝后,前后端⼯程师就可以根据约定,分头开⼯,开发环境中通过Mock等⽅式进⾏测试,同时在特定时间节点进⾏前后端集成测试。但是,随着业务功能的愈发复杂,这种模式本质上和JSP时代的Web开发并⽆本质区别,只不过是将复杂的业务逻辑从JSP⽂件转移到了JavaScript⽂件中⽽已。现在,对于⼀个前端功能、交互复杂的业务,⼤量的逻辑处理使得javascript的代码量激增。很⾃然地,像服务端从JSP向MVC框架转换的过程⼀样,前端开发也出现了⼤量的MVC框架。通过MVC框架⼜衍⽣出了许多其它的架构,统称MV* ,最常见的是MVP与MVVM。总的来说,MV* 框架的提出是为了解决前端开发的复杂度,提供⼀套规则组织代码、分层,通过合理的组织和分层,前端的代码职责明确、清晰,便于开发与测试。⽬前⽐较优秀的前端MVC框架就是,和。被尊为前端三⼤框架,下⾯分别介绍⼀下这⼏个框架。(1)REACTReact 起源于 Facebook 的内部项⽬,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定⾃⼰写⼀套,⽤来架设Instagram 的⽹站。做出来以后,发现这套东西很好⽤,就在2013年5⽉开源了。由于 React 的设计思想极其独特,属于⾰命性创新,性能出众,代码逻辑却⾮常简单。所以,越来越多的⼈开始关注和使⽤,认为它可能是将来 Web 开发的主流⼯具。⽀持虚拟DOM(Virtual DOM)和组件化的开发。React和github(2) ANGULARAngularJS 诞⽣于2009年,由Misko Hevery 等⼈创建,后为Google所收购。是⼀款优秀的前端JS框架,已经被⽤于Google的多款产品当中。AngularJS有着诸多特性,最为核⼼的是:MVC(Model–view–controller)、模块化、⾃动化双向数据绑定、语义化标签、依赖注⼊等等。AngularJS是协助搭建单页⾯⼯程(SPA)的开源前端框架。它通过MVC模式使得开发与测试变得更容易。并试图成为WEB应⽤中的⼀种端对端的解决⽅案。它将指导开发整个应⽤。Angular 和github(3) VUEvue同时具备angular和react的优点,轻量级,api简单,⽂档齐全,简单强⼤,⿇雀虽⼩五脏俱全,⽬前在github上众多的前端开源MVVM框架中vue拥有star最多。Vue是⼀个构建数据驱动的 web 界⾯的渐进式框架。 的⽬标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 ⾃⾝不是⼀个全能框架——它只聚焦于视图层。因此它⾮常容易学习,易于上⼿,⾮常容易与其它库或已有项⽬整合。另⼀⽅⾯,在与相关⼯具和⽀持库⼀起使⽤时, 也能完美地驱动复杂的单页应⽤,其作者是尤⾬溪是中国⼈。Vue和github前端有了MVC框架后,web开发就真正实现了前后端解耦,分离开发。⾄此web开发的架构图⼤致如下图9. JS在服务器端的逆袭:各⼤浏览器的竞争,使其引擎的性能不断提升,⾄今Google V8引擎的性能已经⾜以运⾏⼤型Javascript程序。在V8之上加以⽹络、⽂件系统等内置模块,形成了如今的。随着的出现,JavaScript开始拥有在服务端运⾏的能⼒,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语⾔平起平坐的脚本语⾔。发布于2009年5⽉,由Ryan Dahl开发,实质是对Chrome V8引擎进⾏了封装。它的异步本质使得在处理I/O密集型业务中优势凸显,⽽⼤多Web业务中I/O性能都是瓶颈。eBay、Yahoo、甚⾄Microsoft Azure纷纷引⼊以提升性能。的package每天都有⼏千万的下载量。这对前端⼯程师来说可是⼀个好消息,精通JavaScript的他们也能够做服务端开发了!虽然现实中并不是这样美好(服务端开发涉及的不仅仅是语⾔层⾯),但⼀种新的开发模式也因此兴起:浏览器端处理展现层逻辑、⽽服务端Controller这⼀层以及相关的模板渲染、路由、数据接⼝以及Session/Cookie先关处理实际上交给了Nodejs来做。通过Nodejs, 意味着前后端很多代码可以复⽤(例如数据验证,业务逻辑)。但另⼀⽅⾯,JavaScript刚被引⼊到服务器端开发,其⽣态环境还未成熟,甚⾄⼤量的常⽤package主版本号都是0。长期⽤来实现页⾯逻辑,天⽣⾃由的JavaScript,在服务器端开发中,仍未形成统⼀的开发范型。不同开发原则和编码风格的应⽤,都将对项⽬的性能、可维护性产⽣重⼤影响。可以在不新增额外线程的情况下,依然可以对任务进⾏并发处理, 是单线程的。它通过事件循环(event loop)来实现并发操作,对此,我们应该要充分利⽤这⼀点 , 尽可能的避免阻塞操作,取⽽代之,多使⽤⾮阻塞操作。在⼏年的时间⾥,逐渐发展成⼀个成熟的开发平台,吸引了许多开发者。有许多⼤型⾼流量⽹站都采⽤进⾏开发,此外,开发⼈员还可以使⽤它来开发⼀些快速移动Web框架。总结现在Web技术依然在快速发展,Web本⾝的基础规范也在不断完善,HTML5和CSS3引⼊了更多激动⼈⼼的特性。回顾Web的发展历史,从某个⾓度看,就是抽象层次不断提⾼的⼀个过程,更⾼的抽象层次屏蔽更低层的复杂性,从⽽提⾼开发效率。但任何技术框架都不是万能的,每当技术发展到⼀定程度,或是出现某些局限性的时候,就会有更优秀的技术出现来解决这些局限性。其实这是计算机技术发展的⼀个普遍规律,⽐如⾼级语⾔的出现屏蔽了汇编语⾔的复杂性,帮助我们更快速的编程,更多的关注代码和业务逻辑;数据库技术的出现使得我们⽆需关⼼物理存储和访问细节,简单的SQL语句就能搞定我们本来需要复杂且晦涩难懂的底层的代码才能完成的事情,更进⼀步,ORM框架使得我们通过⼀条语句调⽤⼀个类的⼀个⽅法就能⽅便就⾏数据操作。我们应该让⾃⼰的技术视野具备⼀定的⾼度和⼴度,看到⼀门技术的发展规律和发展历程,这是⼀种技术修养的体现,其实跟⼈⽂修养是⼀样的。同时也应该具有⼀定的深度,因为我们往往站在⽐较⾼的抽象层次,⽐如今天你写⼏⾏代码就能把数据库创建好,增删改查的功能也⾃动⽣成好了,现在很多程序员对重复造轮⼦的事嗤之以⿐,实现功能或是遇到难点也是百度直接照搬代码。重复造轮⼦确实降低了⼯作效率,在企业中当然会使⽤前⼈造好的轮⼦,但是作为技术⼈员如果只是知其然⽽不知其所以然,那么永远只是个勤劳的搬砖⼯。要成为⾼⼿需要你对底层的原理机制有更透彻的理解,真正遇到问题的时候才能抽丝剥茧迎刃⽽解。
2023年6月21日发(作者:)
Web技术发展史Web技术发展史Web开发指的是⽹页系统开发,每次在浏览器中输⼊⽹址时,总会先输⼊www,这⾥其实是World Wide Web的简称,现在也简称Web,中⽂译为万维⽹。Web设计初衷是⼀个静态信息资源发布媒介,通过超⽂本标记语⾔(HTML)描述信息资源,通过统⼀资源标识符(URI)定位信息资源,通过超⽂本转移协议(HTTP)请求信息资源。HTML、URL和HTTP三个规范构成了Web的核⼼体系结构,是⽀撑着Web运⾏的基⽯。这样说太过专业化了,⽤简单的话说,打个⽐⽅:假设有100台计算机,这100台计算机可以分布在世界任何⼀个地⽅,⽆所谓。如果我想让这100台计算机相互通信,怎么办。那把这100台计算机⽤光纤相互连接起来吧,组成⼀个⽹路。到这还不⾏,这只是硬件上连接起来了,通信是可以通信了,但计算机们都不知道对⽅发的消息是什么意思,⽽且寻址也是⼀个问题。这时就需要⼀个通信协议了,然后TCP/IP就诞⽣了。有了这个协议后,100台计算机算是真正可以发送消息了,⽽Web就是建⽴在这个基础上的。再设想⼀下,现在1号计算机想获取99号计算机上磁盘上的⼀张图⽚,怎么办?这时URI就诞⽣了,URI作为统⼀资源标识符,专做这个事情。那么拿到资源后怎么展⽰就是HTML做的事情了,⽽计算机通信的协议就是通过HTTP协议了(HTTP协议是基于TCP协议的⼀个上层协议)。因此,⼤家开发的Web应⽤本质上就是将服务器中的资源提供的互联⽹中,成为Web这个全球超⼤规模分布式系统中的⼀部分。下⾯我就来扒⼀扒Web开发经历过哪些阶段。1. 静态⽹页时代1994年,⽹景公司(Netscape)发布了Navigator浏览器0.9版。这是历史上第⼀个⽐较成熟的⽹络浏览器,轰动⼀时。但是,这个版本的浏览器只能⽤来浏览,不具备与访问者互动的能⼒。最初在浏览器中主要展现的是静态⽂本或图像信息,即将⽹页的HTML代码编写好,然后将他放在服务器上通过浏览器访问这个静态的HTML⽂件。这个时期的技术处于较为原始阶段,没有Javascript,没有CSS的年代,写出的HTML给⼈的感觉就是⼀些⽂字堆砌在⼀起,没有美感,也不存在动态交互。只有GIF图⽚第⼀次为HTML页⾯引⼊了动态元素。那时的⽹页⼤致长这个样⼦此时的⽹景公司(Netscape)也苦于浏览器没有动态效果,因此急需⼀种脚本语⾔,后来⽹景公司开发出了⼀门新语⾔javascript,有了Javascript后⽤户就具备了与浏览器交互的能⼒。但是页⾯的画风太丑,⼀直被⼈们吐槽,因此⼤概在同时期⼜诞⽣了另⼀名语⾔CSS,专门负责定义HTML的标签样式。1994年,W3C组织(World WideWeb Consortium)成⽴,CSS的创作成员全部成为了W3C的⼯作⼩组并且全⼒以赴负责研发CSS标准,层叠样式表的开发终于⾛上正轨,有越来越多的成员参与其中。Javascript与CSS两⼤前端语⾔诞⽣后,静态页⾯也可以像桌⾯应⽤程序那样美观和动态交互了,下⾯是苹果公司早期的主页那时Web的⼯作原理也相对简单,就是浏览器请求服务器的静态HTML⽂件,然后服务器将静态⽂件返回给浏览器渲染成⽂本展⽰,其⼯作流程⼤致如下图2. 动态内容CGI时代随着业务发展,⼈们已经不仅仅满⾜于访问放在Web服务器上的静态⽂件,⽐如你想让访问者看到有多少其他访问者访问了这个⽹站,或者想让客户去填写这样⼀个表单,包含有姓名和邮件地址,要实现这样的功能,意味着客户端与服务端要进⾏数据交互,⽽且服务端还需要把⽤户数据永久的保存起来,这些功能是静态页⾯⽆法实现的。于是1993年CGI(Common Gateway Interface)出现了,Web上的动态信息服务开始蓬勃兴起。CGI定义了Web服务器与外部应⽤程序之间的通信接⼝标准,因此Web服务器可以通过CGI执⾏外部程序,让外部程序根据Web请求内容⽣成动态的内容。Perl因为跨操作系统和易于修改的特性成为CGI的主要编写语⾔。当然,CGI可以⽤任何⽀持标准输⼊输出和环境变量的语⾔编写,⽐如Shell脚本,C/C++语⾔,只要符合接⼝标准即可。⽐如⽤C语⾔编写CGI程序,把希望返回的HTML内容通过printf输出就可以发送给Web服务器,进⽽返回给⽤户。CGI应⽤程序运⾏在浏览器可以请求的服务器系统上,此时Web开发的架构⼤致如下图由于CGI执⾏时需要使⽤服务器CPU时间和内存。如果有成千上万的这种程序同时运⾏,会对服务器系统提出极⾼的要求。你要慎重考虑这个问题,以防⽌服务器系统崩溃。当时组织CGI/Perl这样的脚本代码太混乱了。CGI伸缩性不是太好(经常是为每个请求分配⼀个新的进程),也不太安全(直接使⽤⽂件系统或者环境变量),同时也没提供⼀种结构化的⽅式去构造动态应⽤程序。如果⼀个CGI脚本可以在每台计算机上做同样的事情;编写脚本就会变的很容易。不幸的是,CGI脚本依赖于服务器的操作系统,因此,对于⾮UNIX服务器来说,Prl(UNIX下编写脚本的⼀个常⽤⼯具)脚本毫⽆⽤处。这也是开发⼈员最痛苦的事情,这意味着同⼀个应⽤服务,需要根据不同的操作系统各⾃开发⼀套。所以,你必须定制安装你的CGI脚本。这也是后来基于 JVM 平台的语⾔流⾏的主要因素。3. 模板引擎时代(1)PHP/ASP时代尽管CGI解决了⽹页动态数据的问题,但它的弊端也是越来越明显,依赖于操作系统,移植性差,HTML代码与服务端代码杂糅在⼀起不便于维护。为了处理更复杂的应⽤,⼈们在想能不能把HTML返回中固定的部分存起来(我们称之为模版),把动态的部分标记出来, Web请求处理的时候,程序先获取动态数据,再把模版读⼊进来,把动态数据填充进去,形成最终返回。举个例⼦,你通过页⾯搜索框搜索⼀个关键词,请求到达Web服务器,后台从数据库或是⽂件⾥拿到数据,然后把这些数据填充到返回结果的HTML模版中,返回给浏览器。但是这件事情⾃⼰来做显然太繁琐⽽且是重复劳动,于是1994年的时候,PHP诞⽣了,PHP可以把程序(动态内容)嵌⼊到HTML(模版)中去执⾏,不仅能更好的组织Web应⽤的内容,⽽且执⾏效率⽐CGI还更⾼。之后96年出现的ASP上也都可以看成是⼀种⽀持某种脚本语⾔编程,ASP使⽤VB语⾔的模版引擎。更重要的是,模板引擎的出现使得HTML代码和服务端代码分离开来,使得开发流程更加规范,逻辑更加清晰。⽽CSS允许开发者⽤外联的样式表来取代难以维护的内嵌样式,⽽不需要逐个去修改HTML元素,这让HTML页⾯更加容易创建和维护。此时,有了这些脚本语⾔,搭配上后端的数据库技术,Web更是开始⼤杀四⽅了,像电⼦商务这样的应⽤系统也可以通过Web技术来构建。Web已经从⼀个静态资源分享媒介真正变为了⼀个分布式的计算平台了。反过来看,你也应该知道,不是只有当今这些流⾏脚本语⾔可以写Web应⽤,C语⾔⼀样可以做这件事情。通过C语⾔来获取数据和渲染Web页⾯的例⼦在追求极致访问速度的互联⽹公司是⾮常常见的,但是脚本语⾔在开发效率上更胜⼀筹。(2)JSP/SERVLET时代Servlet是⼀个优秀的Web技术规范,Servlet 看起来像是通常的 Java 程序。Servlet 导⼊特定的属于 Java Servlet API 的包。因为是对象字节码,可动态地从⽹络加载,可以说 Servlet 对 Server 就如同 Applet对 Client ⼀样,但是,由于 Servlet 运⾏于 Server 中,它们并不需要⼀个图形⽤户界⾯。从这个⾓度讲,Servlet 也被称为 FacelessObject。由于前后端交互的问题,sun公司⼜发布了JSP,JSP全称是Java Server Pages,它和Servlet技术⼀样,都是sun公司定义的⼀种⽤于开发动态web资源的技术。JSP最⼤的特点在于,写jsp就像在写html,但它相⽐html⽽⾔,html只能为⽤户提供静态数据,⽽Jsp技术允许在页⾯中嵌套java代码,为⽤户提供动态数据。它的出现⼀改以前java开发⼈员需要在Servlet中⾃⼰将html代码 返回给前端的⼯作⽅式,⽽是直接在jsp中编写html代码,极⼤的⽅便了开发⼈员的使⽤。这时已经初见前端分离的雏形了。jsp出现后,美⼯可以把页⾯原型图画好,再交给前端⼯程师按照原型图将静态页⾯写出来,待静态页⾯写好后,再交给java开发⼯程师把html代码复制到jsp中,这时只需要把后端处理的值填到对应的jsp中即可。对于⼀个系统开发,⼈员可以明确分⼯,前端后端开发部分可以同时进⾏。这个时期后端架构图⼤致如下4. JavaEE时代Web开始⼴泛⽤于构建⼤型应⽤时,在分布式、安全性、事务性等⽅⾯的要求催⽣了J2EE(现在已更名为Java EE)平台在1999年的诞⽣,从那时开始为企业应⽤提供⽀撑平台的各种应⽤服务器也开始⼤⾏其道。Java Servlet、Java Server Pages (JSP)和Enterprise JavaBean (EJB )是Java EE中的核⼼规范,Servlet和JSP是运⾏在服务器端的Web组件。2000年随之⽽来的.net平台,其构件化的Web开发⽅式以及Visual 开发环境的强⼤⽀持,⼤⼤降低了开发企业应⽤的复杂度。第⼀次让程序员可以像拖拽组件来创建Windows Form程序那样来组件化地创建Web页⾯,Java平台后来出现的JSF也承袭了这⼀思想。两⼤平台在相互竞争和模仿中不断向前发展。EJB运⾏在服务器端的业务组件,是⼀种分布式组件技术J2EE⾥,除了Servlet外另⼀个重量级的规范就是EJB。EJB设计的来源是Corba技术,分布式对象技术在EJB规范中有完整的体现。Rod在著作中对EJB规范粗重庞⼤难⽤提出各种质疑,尤其是针对其强制分布的要求。我的观念是分布式⽀持没有错,现在EJB规范中对于Local和Remote的划分定义是正确的。开发⼈员应该⼀开始就需要了解接⼝粒度的划分,本地和远程接⼝是不同的。对于⼀般的⼩型应⽤,Servlet和EJB容器都在⼀个虚拟机中,本地接⼝是合理的,但对于⼤型企业应⽤和互联⽹级别应⽤,势必需要服务的远程划分和调⽤。所以早期的EJB,可以说⼀⽅⾯设计不完备,另⼀⽅⾯⼜过度设计。但EJB⾃从3以后完全脱胎换⾻,成为设计良好的规范。⼤家有没有想过所谓企业应⽤和普通应⽤之间最⼤的差别是什么?我认为是⽤户数量级别的差异,导致前端设计⽅式,软件体系,后台数据库,缓存技术应⽤,有不同的设计理念和⽅式。⽤更技术化来说,就是可扩展性,⾼可⽤性,容灾能⼒以及数据的⼀致性。实际上这样的思维⽅式很好,因为企业应⽤追求的是稳定,所以在架构设计时⼀是要求效率,⼆是⾯向失败编程,即开发时⾸先不是想正常情况下应该怎么样,⽽是把所以有能异常的情况都考虑在⾥⾯,并为异常情况做好解决措施。从软件层⾯考虑,⼀个企业应⽤软件可能⽤户数并不太多,就企业中百来号⼈,但前后台的交互是长时间,多次会话交互的。JSF技术其实是借鉴了微软,它们继承了传统IDE快速开发的思路,希望通过拖拽连接可以快速开发⼀个应⽤。页⾯上的组件,对应后台服务器的业务组件,在得到服务器请求之后,组件需要做⼀系列动作来完成解析,校验,模型重建,业务⽅法调⽤,页⾯渲染等步骤,这些必然有个较长的过程。复杂性,效率,和其他技术的融合,JSF技术从诞⽣起就被质疑不断,⽽且⾯对每个明星技术,都有些格格不⼊,⽐如Ajax出现了,⽽JSF要求的Post⽅式还需要重刷页⾯。但JSF⼀直在改进,越来越科学完善。如今,配合CDI,JSF是企业应⽤开发的⾸选技术之⼀,⼤家可以研究⼀下Oracle的应⽤产品和ADF开发框架。5. Web层框架百花齐放后端技术逐渐规范稳定后,为了提⾼⼯作效率避免重复造轮⼦。Web技术的发展开始了⼀段框架横飞的年代,各种辅助Web开发的技术框架层出不穷。虽然脚本语⾔⼤⼤提⾼了应⽤开发效率,但是试想⼀个复杂的⼤型Web应⽤,涉及到的Web页⾯多种多样,同时还管理着⼤量的后台数据,因此我们需要在架构层⾯上解决维护性和扩展性等问题。这个时候,MVC的概念被引⼊到Web开发中来了。2004年出现的Struts就是当时⾮常流⾏的Java Web开发的MVC框架。MVC早在1978年就作为Smalltalk的⼀种设计模式被提出来了,应⽤到Web应⽤上,模型Model⽤于封装与业务逻辑相关的数据和数据处理⽅法,视图View是数据的HTML展现,控制器Controller负责响应请求,协调Model和View。Model,View和Controller的分开,是⼀种典型的关注点分离的思想,不仅使得代码复⽤性和组织性更好,使得Web应⽤的配置性和灵活性更好。这是Spring MVC的⽰意图,典型的MVC架构。MVC的架构不仅仅是后端代码分层结构,由于各个层次相互解耦,因此⽤户可以根据业务场景合理选择各个层次的框架。例如View层可以使⽤jsp,thymeleaf。Model层可以使⽤mybatis,hibernate。Controller层可以使⽤Spring,Struts等等。也正是MVC的架构,使得各式各样的框架层出不穷。6. CSS,Jacascript上⾯主要说了后端web技术的演变,随着后端技术的发展前端技术也在⽇新⽉异,如今前端⽹页开发与莽荒时代的静态⽹页相⽐,不仅有各种各样的UI框架,更是参考了后端技术,在前端也实现MVC的架构。下⾯就来看⼀看前端技术的演变。⾸先就是CSS和JS的诞⽣。javacript的诞⽣还有⼀段故事,前⾯说到⽹景公司开发的浏览器只能展⽰静态页⾯,因此⽹景公司想在浏览器端嵌⼊⼀种语⾔或是脚本,使得⽤户可以和浏览器做⼀些动态交互,从⽽提升⽤户的体验。当时⽹景公司有两个⽅案:⼀个是采⽤现有的语⾔,如Perl、Python、Tcl、Scheme等等,允许它们直接嵌⼊⽹页;另⼀个是发明⼀种全新的语⾔。⾼层对于两个⽅案⼀时难以决定,就在这时,发⽣了另外⼀件⼤事:1995年Sun公司将Oak语⾔改名为Java,正式向市场推出。Sun公司⼤肆宣传,许诺这种语⾔可以”⼀次编写,到处运⾏”,它看上去很可能成为未来的主宰。⽹景公司动了⼼,决定与Sun公司结成联盟。它不仅允许Java程序以applet(⼩程序)的形式,直接在浏览器中运⾏;甚⾄还考虑直接将Java作为脚本语⾔嵌⼊⽹页,只是因为这样会使HTML⽹页过于复杂,后来才不得不放弃。此时,34岁的系统程序员Brendan Eich登场了。1995年4⽉,⽹景公司录⽤了他。公司决定指派他作为新语⾔的开发者,并要求这个语⾔必须与java⾜够相似,但⽐java简单。但是,他对Java⼀点兴趣也没有。为了应付公司安排的任务,他只⽤10天时间就把Javascript设计出来了。(ps:与⼤神的差距,别⼈10天开发出⼀门语⾔,我10天能完全上⼿⼀门新技术就不错了:)由于设计时间太短,语⾔的⼀些细节考虑得不够严谨,导致后来很长⼀段时间,Javascript写出来的程序混乱不堪。谁也想不到如今世界排名前5五的Javascript竟是在10天内被开发出来的。随着HTML的成长,为了满⾜页⾯设计者的要求,HTML添加了很多显⽰功能。但是随着这些功能的增加,HTML变的越来越杂乱,⽽且HTML页⾯也越来越臃肿。于是CSS便诞⽣了。1994年哈坤·利提出了CSS的最初建议。⽽当时伯特·波斯正在设计⼀个名为Argo的浏览器,于是他们决定⼀起设计CSS。其实当时在互联⽹界已经有过⼀些统⼀样式表语⾔的建议了,但CSS是第⼀个含有“层叠”丰意的样式表语⾔。层叠样式表(英⽂全称:Cascading Style Sheets)是⼀种⽤来表现HTML(标准通⽤标记语⾔的⼀个应⽤)或XML(标准通⽤标记语⾔的⼀个⼦集)等⽂件样式的计算机语⾔。CSS不仅可以静态地修饰⽹页,还可以配合各种脚本语⾔动态地对⽹页各元素进⾏格式化。CSS 能够对⽹页中元素位置的排版进⾏像素级精确控制,⽀持⼏乎所有的字体字号样式,拥有对⽹页对象和模型样式编辑的能⼒。7. 浏览器的魔术:AJAXJavaScript最终被提交到欧洲计算机制造商协会(ECMA),做为中⽴的ECMA开始了标准化脚本语⾔之路,并将其命名为ECMAScript。JavaScript可以响应浏览器端的⽤户事件,检测表单的正确性,动态修改DOM结构,因此可以减少与服务器端的通信开销,并且做出很酷的页⾯动态效果。2005年出现的AJAX这个概念使得JavaScript再次⼤放异彩。AJAX即“Asynchronous Javascript And XML”(异步的JavaScript和XML技术)。Ajax 不是⼀种新的编程语⾔,⽽是⼀种⽤于创建更好更快以及交互性更强的Web应⽤程序的技术。AJAX是⼀种已有技术的mashup,多种技术组合在⼀起形成了其特⾊和优势,早在1998年就已经开始有⼈使⽤。Google在地图和Gmail等产品中对这项技术的深⼊应⽤,以及AJAX这个吸引眼球的名字的提出,使其正式站在了聚光灯下,开始吸引⽆数⼈的⽬光。我们知道Web应⽤中⽤户提交表单时就向Web服务器发送⼀个请求,服务器接收并处理传来的表单,并返回⼀个新的⽹页。⽽前后两个页⾯中的往往⼤部分HTML代码是⼀样的,每次都返回整个页⾯内容是⼀种带宽资源的浪费。⽽AJAX应⽤仅向服务器发送并取回必须的数据,并在客户端采⽤JavaScript处理来⾃服务器响应,更新页⾯的局部信息。使⽤Ajax的最⼤优点,就是能在不更新整个页⾯的前提下维护数据。这使得Web应⽤程序更为迅捷地回应⽤户动作,并避免了在⽹络上发送那些没有改变的信息。对应⽤Ajax最主要的批评就是,它可能破坏浏览器的后退与加⼊收藏书签功能。在动态更新页⾯的情况下,⽤户⽆法回到前⼀个页⾯状态,这是因为浏览器仅能记下历史记录中的静态页⾯。⼀个被完整读⼊的页⾯与⼀个已经被动态修改过的页⾯之间的可能差别⾮常微妙;⽤户通常都希望单击后退按钮,就能够取消他们的前⼀次操作,但是在Ajax应⽤程序中,却⽆法这样做。不过开发者已想出了种种办法来解决这个问题。AJAX的出现,催⽣诸如EXTJS、EASYUI等⼀些基于JS的前端框架。⼤⼤提⾼了前端页⾯的开发效率。8. 前端MVC:Angular/React/Vue这种模式下,前后端的分⼯⾮常清晰,前后端的关键协作点是 Ajax 接⼝,规定好交互接⼝后,前后端⼯程师就可以根据约定,分头开⼯,开发环境中通过Mock等⽅式进⾏测试,同时在特定时间节点进⾏前后端集成测试。但是,随着业务功能的愈发复杂,这种模式本质上和JSP时代的Web开发并⽆本质区别,只不过是将复杂的业务逻辑从JSP⽂件转移到了JavaScript⽂件中⽽已。现在,对于⼀个前端功能、交互复杂的业务,⼤量的逻辑处理使得javascript的代码量激增。很⾃然地,像服务端从JSP向MVC框架转换的过程⼀样,前端开发也出现了⼤量的MVC框架。通过MVC框架⼜衍⽣出了许多其它的架构,统称MV* ,最常见的是MVP与MVVM。总的来说,MV* 框架的提出是为了解决前端开发的复杂度,提供⼀套规则组织代码、分层,通过合理的组织和分层,前端的代码职责明确、清晰,便于开发与测试。⽬前⽐较优秀的前端MVC框架就是,和。被尊为前端三⼤框架,下⾯分别介绍⼀下这⼏个框架。(1)REACTReact 起源于 Facebook 的内部项⽬,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定⾃⼰写⼀套,⽤来架设Instagram 的⽹站。做出来以后,发现这套东西很好⽤,就在2013年5⽉开源了。由于 React 的设计思想极其独特,属于⾰命性创新,性能出众,代码逻辑却⾮常简单。所以,越来越多的⼈开始关注和使⽤,认为它可能是将来 Web 开发的主流⼯具。⽀持虚拟DOM(Virtual DOM)和组件化的开发。React和github(2) ANGULARAngularJS 诞⽣于2009年,由Misko Hevery 等⼈创建,后为Google所收购。是⼀款优秀的前端JS框架,已经被⽤于Google的多款产品当中。AngularJS有着诸多特性,最为核⼼的是:MVC(Model–view–controller)、模块化、⾃动化双向数据绑定、语义化标签、依赖注⼊等等。AngularJS是协助搭建单页⾯⼯程(SPA)的开源前端框架。它通过MVC模式使得开发与测试变得更容易。并试图成为WEB应⽤中的⼀种端对端的解决⽅案。它将指导开发整个应⽤。Angular 和github(3) VUEvue同时具备angular和react的优点,轻量级,api简单,⽂档齐全,简单强⼤,⿇雀虽⼩五脏俱全,⽬前在github上众多的前端开源MVVM框架中vue拥有star最多。Vue是⼀个构建数据驱动的 web 界⾯的渐进式框架。 的⽬标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 ⾃⾝不是⼀个全能框架——它只聚焦于视图层。因此它⾮常容易学习,易于上⼿,⾮常容易与其它库或已有项⽬整合。另⼀⽅⾯,在与相关⼯具和⽀持库⼀起使⽤时, 也能完美地驱动复杂的单页应⽤,其作者是尤⾬溪是中国⼈。Vue和github前端有了MVC框架后,web开发就真正实现了前后端解耦,分离开发。⾄此web开发的架构图⼤致如下图9. JS在服务器端的逆袭:各⼤浏览器的竞争,使其引擎的性能不断提升,⾄今Google V8引擎的性能已经⾜以运⾏⼤型Javascript程序。在V8之上加以⽹络、⽂件系统等内置模块,形成了如今的。随着的出现,JavaScript开始拥有在服务端运⾏的能⼒,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语⾔平起平坐的脚本语⾔。发布于2009年5⽉,由Ryan Dahl开发,实质是对Chrome V8引擎进⾏了封装。它的异步本质使得在处理I/O密集型业务中优势凸显,⽽⼤多Web业务中I/O性能都是瓶颈。eBay、Yahoo、甚⾄Microsoft Azure纷纷引⼊以提升性能。的package每天都有⼏千万的下载量。这对前端⼯程师来说可是⼀个好消息,精通JavaScript的他们也能够做服务端开发了!虽然现实中并不是这样美好(服务端开发涉及的不仅仅是语⾔层⾯),但⼀种新的开发模式也因此兴起:浏览器端处理展现层逻辑、⽽服务端Controller这⼀层以及相关的模板渲染、路由、数据接⼝以及Session/Cookie先关处理实际上交给了Nodejs来做。通过Nodejs, 意味着前后端很多代码可以复⽤(例如数据验证,业务逻辑)。但另⼀⽅⾯,JavaScript刚被引⼊到服务器端开发,其⽣态环境还未成熟,甚⾄⼤量的常⽤package主版本号都是0。长期⽤来实现页⾯逻辑,天⽣⾃由的JavaScript,在服务器端开发中,仍未形成统⼀的开发范型。不同开发原则和编码风格的应⽤,都将对项⽬的性能、可维护性产⽣重⼤影响。可以在不新增额外线程的情况下,依然可以对任务进⾏并发处理, 是单线程的。它通过事件循环(event loop)来实现并发操作,对此,我们应该要充分利⽤这⼀点 , 尽可能的避免阻塞操作,取⽽代之,多使⽤⾮阻塞操作。在⼏年的时间⾥,逐渐发展成⼀个成熟的开发平台,吸引了许多开发者。有许多⼤型⾼流量⽹站都采⽤进⾏开发,此外,开发⼈员还可以使⽤它来开发⼀些快速移动Web框架。总结现在Web技术依然在快速发展,Web本⾝的基础规范也在不断完善,HTML5和CSS3引⼊了更多激动⼈⼼的特性。回顾Web的发展历史,从某个⾓度看,就是抽象层次不断提⾼的⼀个过程,更⾼的抽象层次屏蔽更低层的复杂性,从⽽提⾼开发效率。但任何技术框架都不是万能的,每当技术发展到⼀定程度,或是出现某些局限性的时候,就会有更优秀的技术出现来解决这些局限性。其实这是计算机技术发展的⼀个普遍规律,⽐如⾼级语⾔的出现屏蔽了汇编语⾔的复杂性,帮助我们更快速的编程,更多的关注代码和业务逻辑;数据库技术的出现使得我们⽆需关⼼物理存储和访问细节,简单的SQL语句就能搞定我们本来需要复杂且晦涩难懂的底层的代码才能完成的事情,更进⼀步,ORM框架使得我们通过⼀条语句调⽤⼀个类的⼀个⽅法就能⽅便就⾏数据操作。我们应该让⾃⼰的技术视野具备⼀定的⾼度和⼴度,看到⼀门技术的发展规律和发展历程,这是⼀种技术修养的体现,其实跟⼈⽂修养是⼀样的。同时也应该具有⼀定的深度,因为我们往往站在⽐较⾼的抽象层次,⽐如今天你写⼏⾏代码就能把数据库创建好,增删改查的功能也⾃动⽣成好了,现在很多程序员对重复造轮⼦的事嗤之以⿐,实现功能或是遇到难点也是百度直接照搬代码。重复造轮⼦确实降低了⼯作效率,在企业中当然会使⽤前⼈造好的轮⼦,但是作为技术⼈员如果只是知其然⽽不知其所以然,那么永远只是个勤劳的搬砖⼯。要成为⾼⼿需要你对底层的原理机制有更透彻的理解,真正遇到问题的时候才能抽丝剥茧迎刃⽽解。
发布评论