欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

服务器与浏览器端技术回顾-2

程序员文章站 2022-07-14 10:07:03
...

 

各种浏览器富客户端技术的大战正如火如荼的时候,最新标准的HTML5,CSS3登场了,它不需要任何插件。只是用html+css+javascript就可编写出漂亮的,动感的,富客户端界面。完全把其它几种插件技术打的溃不成军。


它的唯一不足之处是需要浏览器本身支持html5和css3,如果大家都使用电脑上网也就罢了,用惯了IE6的网民们,没必要非得换浏览器,但是网民现在都投向了移动互联网的怀抱,各种iPhone,Android系统的智能手机让人随时随地就可以上网。而这两个系统上都没有IE的生存之地。各种浏览器都在忙着抢占这个市场,没有人会愿意受人挟制,没人愿意在本来就不大的浏览器程序上再绑一个别的公司的插件程序,于是使用html5成了最好的选择。

这样看来富客户端大战的最终赢家还是ajax。javascript这门曾经被批判的一无是处的语言,又复活了,而且以英雄的姿态重新站在开发者的面前,越来越多的人使用javascript,它的各种优点也被一一的发掘出来,甚至曾经的缺点,也被利用起来变成了特殊技巧。
但是javascript只是一门运行在浏览器上的语言,别的地方似乎没有生存之地,但是google的工程师们改变了这个事实。他们在开发chrome浏览器的时候为了让javascript语言运行的更快,专门为它变写了一个V8引擎。Chrome浏览器在市场上站稳之后,工程师们认为V8引擎可以做更多的事情,于是一门新的服务器端技术nodejs诞生了,它独特的机制吸引了很多关注,大量的开发者加入了nodejs社区,而nodejs本身也在高速发展。

我们再历数一下以往流行的WEB服务器端技术都是什么,NodeJS为什么能够脱颖而出呢?

Java

在选择服务器端技术的时候大部分企业应用都会选择Java,因为她速度快,安全。但是,她的 开发非常复杂,一个完整的java EE程序开发时间常常会超过半年,甚至1年;而且学习成本非 常高,而且各种新技术层出不穷,每个都说自己能够简化开发,但是如果你信以为真去学习的 话,你会发现你其实是重新学习了另一门语言,与java完全不相干。再然后java的效率虽然高 ,但这效率是建立在少用户,高级服务器的基础之上的。对于海量的并发访问,Java随时可能 崩溃。Java的跨操作系统宣言,现在就是一个笑话,现在新出现的语言,哪个不是跨操作系统的。。。

C#

微软发明C#的目的就是跟java竞争,它里面太多模仿Java的地方。当然缺点比java还多,最大的缺点就是不跨平台。

PHP

国内使用PHP的程序员非常多。因为它上手容易,开发方便,速度也快。在各项技术指标中,它均属于中上,但是php本身也是经常被诟病,说他不好管理,做大型项目,复杂系统的话管理成本非常高。也许有人会拿全世界最大的社交网站facebook就是使用PHP写的这种证据来表明PHP的强大和流行,但是,要知道Facebook对PHP的速度也是非常不满的,当然他们有足够的技术人才,自己写了一个优化php速度的引擎工具。不可否认php是一门非常适合大众的语言。

ROR

ROR刚出现的时候再业界引起了一场革命,它新颖的开发理念直接催生了敏捷开发的概念,每个人都在讨论怎样最快的做出让客户满意的程序,于是java,php等也都诞生了响应的敏捷开发的框架技术,虽然更多是从ROR借鉴过来,但不可否认非常有效,于是大家又站在了同一起 跑线上,但是Ruby却渐渐落后了,它编译速度以及重新学习一门语言的门槛让开发者们在语言选项中排序中放到了后面。

Python

Python是一门非常优美的语言,固定的缩进格式进行编程让代码非常的漂亮,google也力推它,国内也有不少网站的后台使用它,比如豆瓣。但是一个漂亮的花瓶放在那其实只能远观不能亵玩,虽然Python也能做不少事情,但并不是特别突出,没有独特的优势。

其它语言本人就没有研究,在此就不多说了。

NodeJs使用javascript语言,基本上不需要开发者付出更多的心血去研究语法,只需了解下它的api即可。容易上手的同时,独特的事件驱动编程更是让程序更加清晰,低耦合,高聚合在此可以轻而易举的做到。

当然NodeJS最大的噱头可不是javascript或者事件驱动编程,而是它的高效率,快速度,支持并发量大。为什么会这样,这是由它独特的机制决定的。

 

我们先看看apache是怎样处理的吧,客户端发链接请求--apache分配线程、内存--执行--返回

这里分配线程和内存都是定额的,每来一个链接就分配这么多。假如电脑的可用内存为2G,每

一个链接需要2M的内存,每个线程执行时间需要cpu时间10m,那么这一秒内apache最多只能为

min(1s/10ms,2G/2M)=100个链接提供服务,但是每个线程占用cpu时其实是有长有短不一而论

的,这个时候如果一个很简单请求访问因为一直竞争不到cpu资源而导致响应速度变的很慢。


再说NodeJS的机制,它采用单线程模式,链接请求都被同一个线程接受,它会根据实际情况给

当前请求分配线程执行。虽然在总体上来说响应的速度没太大变化。但如果对请求资源小的连接来说那就是福音了,因为它会优先执行,要知道当下流行的技术是ajax等RIA技术,他们要求服务器响应足够快,而且返回的数据非常精简,而Apache则不管什么请求都要经过层层过滤,在速度上当然要慢。

说到这里似乎偏离了我的初衷,我只是想做一个基于web的在线聊天室程序而已,不过现在看来nodejs是非常合适的技术。

 

但是。ror的前车之鉴告诉我们nodejs的模式也随时可能被其它语言模仿,比如各种使用java编写的web服务器程序,很可能就会抄袭这种模式。但是nodejs也有自己的优点:首先它跟浏览器端的javascript一脉相承,在数据通信有先天优势举例来说json数据在前后端是通用的,而java,php语言必须使用一个技术做转换才行。其次,虽然没有具体的统计,但是世界上不会javascript的恐怕没几个!

 

上一篇:服务器与浏览器端技术回顾-1

文章来源 http://www.hml520.com/archives/137