原文地址
客户端
刚开始的时候,Web是静态的。网页被下载到浏览器后不能发生改变。当Tim Berners-Lee在1990年发布第一款浏览器时,网页有具有一点样式的文本和其他网页的链接组成。当时只是一个信息网络,没有交互,必须要知道当时的技术水平。1990年的顶级微处理器工作在50兆赫兹,普通个人计算机平均只有几兆字节的RAM,从那时起计算器的速度呈指数级增长。
随着时间的推移,浏览器中用于内容展示的技术变得更加丰富直观。图片,音频相继添加到网页中。浏览器还可以使用插件来增强功能。为了改进样式引入了CSS。使用新的HTML标签来增强页面布局功能。
尽管网页变的越来越美观,但是依然缺少原生应用的功能。浏览器本质上时HTML文档查看器。缺少以任何动态的方式相应用户的能力。为了让Web成为交互应用的平台,客户端运行在浏览器上的编程语言被发明了。
Java Applets
Sun在1995年发布了Java1.0,并且引起了轰动。Java被承诺是一种具有熟悉的语法,内存安全,可靠,面向对象,平台独立等特性的编程语言包括运行时环境。它一个很酷的方面是被称为Applet的小应用。Java Applet是在网页中预定义的区域运行的图形界面Java程序。
Java Applet承诺只需要编写一次程序就可以在所有具有Java运行时环境和浏览器的平台上运行。一次编写,到处运行的哲学,旨在消除比如(Windows,Mac,Unix)等不同平台的区别。网景(Netscape)浏览器是第一款支持Java Applet的浏览器。
20世纪90年代后期的现实是,Java applet加载缓慢,用户界面不一致,并且在微软将自己的Java运行时环境与Internet Explorer捆绑在一起时,由于与Sun部署的版本有细微差别,出现了不兼容问题(由此引发过一场官司) 。Java applet现在仍然可以在任何带有Java插件的Web浏览器上运行,但它们变得越来越少见。 像IOS这样的移动平台缺乏对Java Applet的支持加速了它的消失。
JavaScript
JavaScript的引入实际上是与Java applet并行的。JavaScript也在1995年推出,Netscape Navigator也是第一个使用它的web浏览器。事实上,JavaScript是网景公司的员工Brendan Eich的创作,故事是他在十天内设计了整个语言。JavaScript最初并不打算用于与Java applet相同的应用程序。它应该是一种轻量级的脚本语言。以前曾有过在web浏览器中提供脚本语言的尝试,但在JavaScript之前,它们都没有Netscape或微软这样的大公司的支持。JavaScript这个名字是一种利用围绕Java的宣传的营销策略。
JavaScript作为ECMAScript由Ecma International标准化。JavaScript非常流行,以至于微软在第二年的Internet Explorer中加入了稍微修改过的版本。尽管有ECMAScript标准,微软版本的JavaScript和网景版本之间的不兼容性仍然困扰着web开发人员。
虽然JavaScript很快流行起来,但在最初的十年中,它几乎完全被我们今天认为是相当小的用例所使用。其主要原因是它的速度(或不足)。最初的JavaScript引擎是解释型的。直到21世纪初,JavaScript引擎才普遍包含即时编译器(JIT)。
在过去的十年中,随着JavaScript引擎速度的提高,其特性的扩展,以及跨浏览器的兼容性的提高,它开始被用于越来越重要的应用程序。浏览器应用程序的复杂性增加到可以与原生软件竞争的程度。JavaScript在服务器上也越来越流行(见下面服务器端)。
今天,JavaScript是Web的通用语。世界上最流行的网站,如果有的话,很少有不主要由客户端上的JavaScript提供支持的。无论如何,JavaScript是目前最流行的编程语言之一。
VBScript
微软曾一度倾向于利用其在业界近乎垄断的地位,推动有利于平台锁定的专有技术。VBScript可以说是一种专有技术。作为对JavaScript的一种回应,VBScript在1996年将其添加到Internet Explorer中,以类似于JavaScript的方式利用Java的品牌(仅在名称中)使用了Visual Basic名称。
VBScript试图填补与javascript类似的空白——作为一种轻量级的脚本语言,可以使web页面更具交互性。然而,由于VBScript的专有特性,在非微软浏览器中无法正常运行。这在一段时间内是可以接受的,那时Internet Explorer在21世纪初拥有大约90%的市场份额,然而专有技术被认为与开放网络的理想背道而驰。
VBScript输给了JavaScript,但却进入了微软的其他产品。在Internet Explorer 11中,它已经被弃用为web浏览器的脚本语言。尽管十多年来它还不是真正意义上的网络玩家,但许多人仍会对专有网络说再见。
Flash
Flash是一个互动内容平台,最常用于游戏和流媒体视频。它实际上扩展到Web之外,但是我们将把讨论限制在Flash Web浏览器插件中。Flash最初是在20世纪90年代由几家不同的公司开发的,后来在2005年收购了Macromedia后,以Adobe的名义出现。Flash是用ActionScript语言编写的。有趣的是,ActionScript是从ECMAScript继承而来的,与JavaScript是相同的标准。
在一个Java applet加载太慢、JavaScript过于简单的世界里,Flash开始主导web交付的交互体验。Flash浏览器插件一度被安装在超过90%的浏览器上,并且通常与新电脑捆绑在一起。Flash是无处不在。
Flash的大挑战者以改进的JavaScript引擎和api的形式出现。智能手机革命对Flash造成了又一次打击,因为移动网络浏览器不支持插件,最著名的是最初的iPhone。2010年,史蒂夫•乔布斯(Steve Jobs)写了一封公开信,批评Flash是一种私有的、遗留下来的技术,当时它已经过时了。这封信引起了争议,但最终标志着业界从Flash转向HTML5和JavaScript技术。
然而,Flash仍然是用于网络游戏和笔记本和桌面浏览器的流媒体视频的主要语言。有一些JavaScript和HTML5技术正在取得进展,但是Flash插件很可能还会在未来的几年里出现。尽管如此,在Flash中开发新的Web应用程序可能不是一个好主意。
Silverlight
Silverlight是微软开发的另一项技术,它似乎是对行业标准的一种回应。因为VBScript是JavaScript的回应,所以Silveright就是Flash的回应。微软的Silverlight基于.net框架的技术,这是微软复杂的技术栈,是其大多数现代平台的基础。Silverlight主要以web浏览器插件的形式发布。
Silverlight应用程序可以用几种不同的编程语言进行编程,但是浏览器插件在微软生态系统之外从未被广泛采用。值得注意的例外是Netflix,它计划在未来的[版本中放弃Silverlight。Silverlight最早发布于2007年,可能上市太晚了,无法获得广泛的应用。
官方的Silverlight浏览器插件只能在Windows OS x虽然Silverlight的免费软件版本是可用的,Linux和其他操作系统上运行,像闪光一样,你将离开iOS和Android用户不管如果你与Silverlight发展你的网站。此外,微软对Silverlight的支持似乎正在减弱。
最近的进展
在web技术(如果不是所有的技术)中,似乎有一条规则:任何一个占据主导地位的平台,很快都会有新来者试图取代它。当谈到JavaScript时,似乎更多的是接受它作为一个标准,同时尝试围绕它工作。如果你愿意,可以拥抱并扩展它。
主要的JavaScript替代方法全部编译为JavaScript。你显然已经知道了Dart,由谷歌在2011年推出。Dart是一个完全替代的平台。CoffeeScript不是那么雄心勃勃的努力。它基本上是一组语法糖块,使JavaScript更具可读性,并添加了一些更高级的语言结构,以减少等效程序的大小(以代码行为单位)。当然,语法变化的好处取决于个人的突发奇想。有些人更喜欢CoffeeScript语法(它借鉴了Ruby和Python),而有些人则更喜欢传统的JavaScript。
CoffeeScript已经获得了一些关注。它是GitHub上的一种流行语言,甚至被包含在流行的web开发框架Ruby on Rails的3.1版本中。CoffeeScript不代表范式转换。就编程语法而言,它代表了客户端语言的一个重要方向。
微软有对JavaScript和Flash的回应。当然,它必须有一个对Dart的回应……当然有!TypeScript第一次出现在2012年,是微软在JavaScript替代品领域的参与者。与Dart不同,TypeScript不代表完全独立的平台,而是JavaScript的超集。事实上,许多TypeScript的特性都将出现在即将发布的JavaScript标准ECMAScript 6中。
与Dart一样,TypeScript的目的都是为了减轻在浏览器中构建现代、大尺寸应用程序的困难。与Dart类似,它还包括对类和可选类型的支持。这就是相似之处。TypeScript并不代表一个新的平台。它代表了构建JavaScript应用程序的一个改进的环境。没有TypeScript虚拟机。如果Dart不存在,那么TypeScript将是一个更引人注目的纯JavaScript替代方案。但是,就目前的情况而言,大多数TypeScript固有的特性都将在不久的将来被包含到JavaScript中。 尽管在科技媒体中很少提及,但Haxe是一种相当出色的语言。它不仅编译成JavaScript,还编译成Flash、PHP、c++、Java等等。如果有的话,这真是一种真正的平台独立语言。与此同时,它的语法接近ECMAScript,因此JavaScript和Flash开发人员对它很熟悉。Haxe第一次出现是在2005年。
服务端
服务器端开发解决方案的多样性远远超过客户端。几乎所有主流编程语言都可以使用web框架。服务器端web框架的工作基本上可以归结为接收请求、处理请求(以及任何用户提供的参数),并将HTML输出到web服务器,以便为用户提供服务。服务器开发的发展方向,就是使Web工作流程包括和数据库的交互变得更容易。
CGI
CGI表示通用网关接口。它是一个接口,在1993年首次开发,允许发送到web服务器的请求,出发服务器上相应的处理程序。然后,程序生成的内容可以通过web服务器发送回客户机。CGI程序基本上可以用任何语言编写。该接口是作为所有web服务器都可以实现的标准开发的。
虽然在今天并不常见,但是在20世纪90年代看到用C或C++构建的大型CGI程序并不少见。它们当时是无处不在的语言,在计算机硬件(甚至是服务器端)难以满足对它们的需求时,它们提供了惊人的速度。C/ C++的问题是它们的内存不安全,并且没有用于文本处理的强大内置工具,这是许多web开发的主要内容。这些因素使得用C或C++编写CGI程序比用其他语言更困难。但这并没有阻止亚马逊在1995年使用C语言构建大型网站。
C和C++被广泛使用(在Web之外),以至于它们的语法成为上世纪90年代Web客户端和服务器端使用的大多数语言的模板,包括JavaScript、Java、Perl和PHP。现在,服务器端web应用程序很少使用C或C++开发。但是,由于性能的原因,内置另一种语言的程序可能会调用C/ C++库。一个例子是基于Python的遗传学研究web应用程序,它调用C代码进行数值分析。构建应用程序的逻辑可能都是Python,但是计算强度较大的部分将是C。 许多在Web上流行的语言都是通过CGI来使用的。他们中的大多数后来获得了他们自己的web服务器扩展,这些扩展由于性能的原因绕过了CGI。CGI仍然是现代web服务器的一种选择。
Perl
这是第一个被广泛应用于服务器端web编程的高级语言。Perl是由Larry Wall在20世纪80年代末作为一种脚本语言创建的,它实际上早于Web。Perl有广泛的处理文本的能力——这是web开发中的一个关键任务(HTML毕竟只是文本)。
Perl的一个口号是“有不止一种方法可以做到这一点”。这并不总是一件好事。Perl被认为是最可能用于编写晦涩、不可读代码的语言。如果每个人都按自己的方式做事,而个人风格胜过常见的惯例,那么这就是许多彼此难以阅读的代码的秘诀。
自从2000年发布了重新设计的Perl 6版本以来,Perl就陷入了版本控制的噩梦。14年后,Perl 6仍在开发中,而Perl 5的受欢迎程度已有所下降。拉里·沃尔继续领导Perl作为它的“生命的仁慈的Dictactor”(BDFL)。Perl中仍在开发一些流行的网站,包括2013年末雇佣了Larry Wall的Craigslist.
PHP
1994年,Ramsus Lerdorf在他的个人主页上使用了一套C CGI脚本。它逐渐发展成为一种模板语言,并随着时间的推移成为一种不同的编程语言,有点类似于Perl。PHP与HTML共存。它可以嵌入到HTML文档中的标记中,这使得部署非常简单,只需将PHP文件上载到web服务器即可。这种部署的简单性很可能使PHP成为中小型网站中最流行的服务器端web语言。注册一个小型的业务web主机而没有内置PHP支持的web服务器几乎是闻所未闻的。
PHP甚至驱动世界上最流行的内容管理系统WordPress。事实上,即使在今天,PHP仍然是如此流行,以至于其他语言社区的开发人员嘲笑它开发的代码质量低劣。作为一种流行的、易于部署的、无处不在的语言,PHP吸引了广泛的开发人员,包括许多刚刚起步的开发人员。如果没有经验的开发人员在用户中占很大比例 ,代码质量自然会受到影响。PHP在服务器端的处境与客户端的JavaScript类似,会收到其他语言使用者的嘲笑(PHP是最好的语言)。
这些批评是公平的吗?答案很大程度上是否定的。高性能、漂亮的工程代码每天都由顶级的PHP工程师编写。Facebook主要是用PHP编写的。与其他一些流行的现代服务器端产品相比,PHP具有较高的性能。PHP可能是一个人的修修补补的意外,而且作为一种语言,它在很大程度上是计划外的,但它的成功显然是有原因的——它很容易入门,性能也很高。
ASP
ASP(Active Server Pages)是微软参于服务器端web技术战争的先锋。在它最初的1996年版本中可以很容易地与PHP进行比较。它强调将逻辑嵌入标签与HTML一起。由于强调Windows服务器操作系统,鉴于大多数web服务器运行Linux或其他Unix(如操作系统),ASP从未有机会达到PHP的普遍水平。ASP被ASP.NET取代,ASP.NET是为Microsoft的多语言.NET平台量身定制的版本。微软在2003年发布了一篇题为“从PHP迁移到ASP.NET”的论文“比较PHP和ASP.NET”。从历史的角度来看,这可能很有趣。
Java
2310/5000
当Java发布时,最令人兴奋的事情是使用它来构建写一次运行的桌面应用程序和Java applet。多年来,Java在从手机、信用卡到DVD播放机的各种设备上都取得了主导地位,但它从未在企业之外的桌面领域获得突出地位。然而,它确实找到了一个令人惊讶的利基,作为许多工业实力网络基础设施背后的力量。1999年发布的J2EE (Java 2 Enterprise Edition)是第一个明确针对大型web基础设施开发人员的主要Java版本。
Java的创建者Sun Microsystems将Java创建为开放规范,其他公司可以实现它。IBM、RedHat和其他人创建了J2EE实现,可以运行在Sun的J2EE应用服务器上的相同服务器端程序。这创建了一个由世界上最大的企业技术公司支持的工业强度企业级Java应用服务器组成的生态系统。Java蓬勃发展,成为首选的企业服务器端技术。 JSP或Java服务器页面(J2EE的一部分)允许Java与PHP类似地嵌入HTML。由于Java的高性能、成熟度以及大量的开发人员和高级库,它继续被广泛地部署到服务器端堆栈中。在Java虚拟机上运行的较新的语言(类似于Scala、Clojure和Groovy的JVM)都有自己的流行web框架(例如,Play是其中之一),它具有与遗留Java库交互的额外好处。此外,将很快提到的Ruby和Python (JRuby和Jython)这两种流行语言的版本也在JVM上运行。
由于上面所阐述的所有原因,Java平台仍然是引人注目的。它可能已经失去了web开发人员的青睐,不是因为它的缺点,而是因为它之后的东西是如此引人注目。在过去的十年中,包括Ruby on Rails和Python和Django在内的快速应用程序开发框架的集中体现了这个行业的想象力,因为它们允许开发人员比传统的解决方案(如Java)更快地构建应用。
Python
与Perl一样,Python最初是由一个开发人员作为类unix系统的脚本语言创建的。在这种情况下,一年是1991年(在Perl之后仅仅4年),创建者是Guido van Rossum。虽然Perl几乎从一开始就在Web的服务器端取得了成功,但Python直到21世纪初才成为主流的服务器端Web语言。
Python简洁,易于遵循语法,开箱即用的哲学,这使它成为一种快速完成任务的优秀语言。然而,直到与核心语言的优雅相匹配的web框架出现之后,它才成为构建web应用程序的优秀语言。到目前为止,最突出的Python web框架是Django。Django于2003年开始在一家报社内部使用,并于2005年首次向公众发行。Django采用了一种经典的、强大的软件开发范例MVC(模型视图控制器),它强调数据与显示的分离。
Django并不是唯一的框架。Python在某种程度上因所谓的微框架的扩散而臭名昭著。这些都是小的web框架,并不一定包括像Django这样的完整服务框架的所有特性,但是由于它们的逻辑默认值和简洁的设置,使快速构建小的web应用程序变得非常容易。最流行的微框架可能是Flask。Flask中的Hello World(显示一个显示“Hello World”的web页面)仅仅是几行Python。
如果Python的语法受到如此的赞扬,并且它有如此棒的框架,那么为什么不是每个人都在服务器端web应用程序开发中使用它呢?与其他一些可用选项相比,Python的流行实现的性能相对较差,这使得它不适合某些应用程序。此外,对于初学者而言,Python部署比PHP更复杂,其中嵌入HTML的文件只会被丢弃在服务器上。然而,Python在今天仍然非常流行,可能不会像在Ruby开发人员中那样与PHP开发人员竞争。同样与Perl类似,Python也经历了从Python 2到Python 3的拙劣版本转换,尽管Python 3在发布5年之后,最近才获得了广泛的关注。和Larry Wall一样,Guido van Rossum继续作为Python的BDFL(仁慈的独裁者)工作。
Ruby
Ruby是由Yukihiro Matsumoto于1995年发布的一种语言。与Python一样,它的特点是简洁的语法和完全面向对象的设计。在日本之外,Ruby直到发布了web框架Ruby on Rails(也称为Rails)之后才获得了显著的流行。Ruby on Rails引起了人们对Ruby(主要是使用Rails)的极大兴趣,因为框架中开发人员的生产力很高。
Ruby与一个叫做RubyGems的流行打包系统相结合,类似于Dart的pub。一个充满活力的gems生态系统和Ruby on Rails的结合已经允许了许多web应用的快速开发。与其他语言的web框架相比,使用Ruby on Rails构建等效的web应用程序的代码行更少,这是一种非常普遍的看法。
在Ruby on Rails web应用程序的幕后,有很多“魔法”,它们只允许几行代码提供令人印象深刻的功能数组。这种魔力受到了批评,因为人们认为它会导致新手开发人员构建复杂的web应用程序,而不完全理解幕后发生的事情。RubyGems非常容易包含向Rails应用程序添加重要功能的开放源代码项目,这一点也不重要。众所周知,这导致在Rails应用程序的体系结构中存在许多不受支持的库。
与Python一样,Ruby最流行的实现也存在性能问题(甚至比Python更糟糕)。Twitter最初主要是在Ruby on Rails中开发的,但由于性能和扩展的考虑,随着它的[10]的发展,不得不将其堆栈的一部分转移到基于JVM的语言(Scala和Java)上。Ruby on Rails开发为Python提供了许多与Django相似的优点和缺陷。两者之间的选择更多地取决于个人偏好(关于语言语法和框架如何工作),而不是两者之间的固有优势。当您不需要担心大的规模时,就像大多数开始开发人员不需要担心的那样,这两个都是现代服务器端web应用程序开发的优秀选择。
JavaScript
自从在过去的十年中出现了高性能的JavaScript vm以来,JavaScript就成为了一种流行的服务器端选项。Netscape实际上早在90年代中期就提供了一个服务器端JavaScript框架,但直到Node的发布才真正实现。js在2009年开始蓬勃发展。节点。js是一个使用JavaScript构建异步web应用程序的平台。Node最流行的框架之一。js是Express.js。
为什么服务器端JavaScript是个好主意?关键的好处是能够为客户端和服务器端使用一种语言。这种熟悉性可以使代码重用得到优化,开发人员技能集更容易跨越这两个领域。
节点。js不仅提供了应用服务器,还提供了打包环境。npm是一种打包管理器。普通的JavaScript不会为包管理提供清晰的路径。
服务器端的JavaScript,特别是节点。js正被企业界所接受。微软正在帮助Node.js登陆Windons。沃尔玛使用Node.js支持其在线商店。这些是最近三年的发展。显然,服务器端JavaScript有很大潜力。