前几年某人写过一个上海的MBA出租车司机,很多人说是杜撰的,后来据说是真的去微软给上了堂课,那人叫“臧勤”。
前些日子又看到一“沈阳的哥用MBA理论开车月入7000”。
今天去机场接女友,到达厅门口人多,要排很长时间对,我们就去二楼搭车。我们从背面过来,刚一出门,就有一的哥迎上来问我们是不是住酒店,示意我们他的车在前面。外面停了两台车,他的是较前面那辆。我对这种主动推销的一般比较反感,不过看他的车比后面那辆新就坐了。
上车后,这家伙就开始滔滔不绝,说他专门趴在机场载客,我们还没出来,他就看到我们了,以为是情侣过来肯定是要住酒店的,厦门的酒店除了海景,他都能拿到回扣。
刚刚拉了一趟80块,昨天跑了一趟长途400块,上个周拉一个老板从厦门去杭州5000块…说的甚是得意。
江西南昌人,看得出,确实很有头脑,人也勤快,厦门到杭州900多公里,他一个人一晚上开过去,挺不容易。说的我挺佩服,他自称小学没毕业,来厦门10多年了,因为开车经常要跟不同的人交流的缘故,不单能说好几个地方的方言,粤语、闽南话都说得很地道,甚至英语、日语、韩语都能说上两句,还听得懂!
上海那个的哥的事他也听过,他说在上海本地人开车完全有可能。他自夸在厦门的士行业里也算得上“状元”,每天比别人多赚50块是小轻松。
今天晚了,简单写写。
这篇文章拖了好久,中间也曾写过一些,忽然之间冒出很多想法,有点混乱,不知从何说起了。
今天重新写,先说下我对web的看法。
首先明确,我所说的web不等于互联网,我的理解是:互联网是包含基于Tcp/ip协议的所有应用,而web是指基于Http协议的,尤其是用浏览器作为客户端的应用的集合。
web依然是每个网民都接触过的最基本的网络应用(关于他为什么会有这样的地位,我本来写了一大堆,后来感觉啰嗦,有谁不明白,单独问我吧),并且会是可预见的未来最重要,最有发展潜力的网络应用领域(相对于qq、传统网络游戏等非web应用,本来也写了一大堆,有谁不明白,请问我吧,有谁怀疑,欢迎拍砖)。
正因我如此看好web,所以才写这个系列文章,web开发将向什么方向发展,是本篇讨论的内容。浏览器和服务器是web运行的平台,所以一切问题,都要围绕浏览器和服务器展开。
每个人电脑上都有各种各样的软件,word、浏览器、qq、迅雷、甚至foxmail等等,程序多了带来的不便相信大家都有所体会。分久必合,各种应用应该会向统一的方向发展,显然浏览器是不可能被其他应用取代的,那么其他应用会不会向着浏览器集中呢?答案是肯定的,并且也确实在向着这个方向发展。比如Google Docs是一整套web办公平台,比如Gmail其实就是一个web版的邮件客户端,同时里面的gtalk就是一个web版的IM。
web应用正在向着专业化,复杂化发展,很多原来的桌面软件,现在变为浏览器上的软件,这样的变化有很多显而易见的好处:方便不需要安装,数据在服务器不需要携带,减少程序占用的内存和切换的麻烦等,在目前阶段也有一些明显的不足,比如网速慢会让用户体验很糟糕,浏览器bug多造成死机、js效率低初始化缓慢等,我相信网速肯定是越来越快的,其他的方面,也正是我们开发者任务和方向。ok,总之web是在向着这个方向发展。
显然这些程序已经不仅仅是一个网页,而是一个个完整的应用程序,因此你不能再用做网页的方法做这样的“软件型网站”,而要用软件开发的思想去对待:运行于浏览器上的客户端+运行于服务器上的服务器端,即基于浏览器的C/S开发或者BC/S。客户端的开发环境目前不多,我所知道的有html+css+javascript、flash、silverlight。传统的网站或者网页,所有的程序都在服务器端,客户端什么都没有,只有一个浏览器,每个请求都会从服务器把界面传到客户端,而基于浏览器的C/S开发则是在访问第一次的时候,把客户端所有的界面相关的程序发送过来,并在浏览器上初始化,之后所有的请求都只传输必要的数据,而不传输界面信息。
这就是我所说的web开发向C/S回归。
这并不是说所有的web应用都回向C/S方向发展,有些内容为主,界面占少部分代码,操作流程比较简单的应用,比如普通的文章发布系统的前台、Google这样的搜索引擎,用C/S实现反而弄巧成拙。也不是说所有的桌面软件都回向web发展,具体哪些软件不适合,我还没认真想过(作为浏览器插件不算真正意义上的web软件,它还是桌面软件,还需要安装,只不过把脸放在浏览器上而已,安装率超过90%的另当别论(比如flashplayer))
向着C/S方向发展的应该是一些功能有一定复杂度的应用,比如上面提到的word、mail客户端、im。另外,我觉得可能的,还有bbs(bbs其实是个操作频繁的应用软件,用现在这种方式,每次请求都有大量无用代码,反应很慢,我曾说过rss reader其实是个bbs)、一些网站的后台、我正在用的这个live writer。
目前的各种ajax框架的迅速发展和广泛应用,其实就是因为web应用的复杂和多样化需求导致的,但是大多数人对于ajax的理解还不成熟,以为ajax的主要特性是异步传输或者动态效果,都是不全面的,ajax的主要作用是作为浏览器上客户端开发的基础,目前的大多数ajax框架还只是完成了很多传统客户端语言的功能和特性,因为javascript本身很灵活,但是功能不完善,比如字符串处理,面向对象特性,UI处理等;重新封装后的javascript framework可以更方便的开发。Ext是为数不多的在框架基础上实现了比较完整的控件库的javascript框架,我在用这个框架,感觉还是很不完善,用的很吃力。
flash和silverlight在UI方面相对更强大一些,但是用户更习惯于浏览器或者操作系统本身的控件,flash(比如flex)重新实现的那些控件,比如滚动条之类,跟普通的控件还是有些区别,用起来不习惯。我觉得这是为什么flash无法取代HTML+css+javascript的重要原因之一。javascript语言本身的发展潜力不用怀疑,但是他的功能完善的需求是非常巨大的,目前基于javascript的框架,是基本解决之道。所以,致力于开发一套完整的javascript控件或者框架,是一个不错的发展方向。
本来还有一些关于服务器端的内容,太晚了,留着下篇写吧。
CSS Namespace Module 被w3c作为候选提议"W3C Candidate Recommendation"
新提出的命名空间方案很简单:
定义前缀的语法:用@namespace方法定义命名空间,并且把命名空间绑定到一个变量或前缀;
例如:
@namespace toto http://toto.example.org;
@namespace http://example.com/foo;
使用命名空间的语法:
toto|A:
表示"A"的作用域是http://toto.example.org|B:
表示"B"作用域没有定义的域*|C:
表示C可以作用在任何域,包括没有被定义的域D:
D作用在http://example.com/foo.
这个方案的作用在于:在同一个css中给不同的网页或网站定义不同的式样,之前我们可能需要用多个css文件解决,现在只需要一个文件就可以了。我觉得意义在于清晰的划分客户端结构,对于小网站作用并不是很大。要使用这个特性,还需等待主要浏览器加上这个特性。
我在做Clicki的widget时曾经提到,css的作用域问题很是令人头疼。
我说的作用域指的是DOM级别的作用域,其实css本身有dom级别的绑定,但是css的作用域只能指定,不可排除是个很棘手的问题。或者叫css污染。
举个例子:
div{border:1px solid #000000;}
上面这个css的范作用域是页面上所有的div,所有的div默认都有一个黑色边框。这时候如果我在某个区域想去掉边框,就必须对这个区域进行二次定义。对于自己网站来说不是什么问题,但是对于第三方的内容嵌入,比如widget,这个问题就很麻烦。
- 第三方的widget可能有多种dom元素
- 第三方无法确定网站定义了多少可能对widget造成入侵的或污染的css属性
这时候,第三方只能将widget的每种dom元素的所有css属性进行初始化,过滤掉所有可能的外部定义,组合起来可能有上百个属性,代码非常冗长。这些代码绝大部分是没用的,而且给浏览器渲染带来更大压力。一旦漏了某个属性没有初始化,就可能造成widget变形。
如果能有一种方法,在某个区域屏蔽全局css的作用就好了。
BS给开发者提出更高的要求,上文讲到,要做漂亮的web应用,需要做好漂亮的html、css、javascript、flash....
所以,开发者单单掌握后台编程语言是不够的,还必须掌握html、css、javascript甚至flash。
为什么会有这么多技术,而不是一门统一的语言呢?这是本文要讨论的问题
要搞清楚浏览器为什么使用html、css、javascript作为其界面语言和脚本语言,需要回顾一下web的发展。
1982年Tim Berners-Lee提出了HTTP/1.0
1989年Tim Berners-Lee在SGML基础上设计出HTML语言
1990年Tim Berners-Lee发明了首个网页浏览器-WorldWideWeb,后来发展为NCSA Mosaic,1994年Netscape在此基础上研制出Navigator浏览器,1995年微软也在NCSA Mosaic基础上研制出IE。1998年在网景和微软的浏览器大战中Netscape开放了其浏览器源代码,创造了Mozilla基金会。
1994年10月Tim Berners-Lee创办W3C
1994年10月W3C从9种style sheet language中选定Håkon Wium Lie 设计的 Cascading HTML Style Sheets (CHSS) 和 Bert Bos 设计的 Stream-based Style Sheet Proposal (SSP)作为CSS的基础,并由Håkon Wium Lie 和Bert Bos 共同制定CSS标准
1995年4月Netscape聘用Brendan Eich开发其脚本语言Mocha,后来更名LiveScript,12月4日正式启用了JavaScript这个名字。由于其基本的语法特性(例如大括号、语句关键字等)上参考了C,在对象系统上(例如“.”作为成员存取)上参考了Java,所以命名为JavaScript。
可见Tim Berners-Lee奠定了web的基础,互联网之父名副其实!网景公司为互联网发展,尤其是浏览器和JavaScript的发展作出了不可估量的贡献,虽然在后来与微软的竞争中败北,但无论如何,它都是一家伟大的公司,它的mozilla项目奠定了当今浏览器的基础,ie 至今仍在其 user agent 字符串中保留 “mozilla” 字样。
历史回顾完了,我们回到正题,为什么存在这么多语言的问题也就不难理解了,html、css和javascript分工各不相同,三者缺一不可。Html和css生来就是为web服务的,有着不可替代性,但是JavaScript则是由于网景的原因而成为客户端脚本的标准。
javascript作为最早的动态脚本语言之一,借助Netscape当初的垄断地位,使其成为客户端语言的不二选择(估计当时其他脚本语言还没想到在浏览器端嵌入脚本语言呢)。尽管后来微软一度想要推出其VBscript作为ie的主要脚本语言,但是由于其语法的生涩、漏洞、执行效率以及最主要的跨平台特性问题,注定了它只是个鸡肋。
为什么JavaScript只作为客户端脚本语言呢?还原JavaScript的真实历史~这篇文章中提到了NetScap的LiveWire战略中说明网景从一开始就把JavaScript作一种通用的开发环境,而不仅仅是客户端脚本语言。为什么人们只把Javascript当作一种客户端脚本语言,恐怕要问问网景的人了,网上找到这样一句话:In retrospect I must say, neither me nor Hannes did a very good job at telling people that our projects were "server-side Javascript"。好的技术、好的创意和产品,没有营销是不行的。相比之下,微软的ASP要成功的多。看看当今各种server-side脚本语言的发展势头,JavaScript本身为web而生,却只能作为客户端脚本,真的是个遗憾。
flash的大行其道,我想主要是因为micromedia很准的看到了客户端应用的更广阔需求,javascript作为文本处理工具已经十分优秀,但是客户端需要的决不仅仅是文本,动画的功能javascript远不能胜任。flash正式看准了这点而来。比之更早的还有SUN的Applet。很多人都对Applet没落感到迷惑,无论从程序的功能还是公司整体实力,Micromedia都不可与SUN同日而语。但我觉得Applet的败落一点都不奇怪,客户端开发的需求跟服务器端的需求大不一样,服务器端开发是技术人员的事,而客户端开发更主要的是美工和编辑的事。Flash的简单易用使他得到快速普及,进而有更多的人学习他的高级特性,学习曲线平滑。Applet陡峭的学习曲线和高昂的学习成本决定了他的失败,java从一开始就是为最专业的技术人员定做的,可怜SUN把所有的精力都放在底层技术上,到现在都没有自己做一套象样的开发环境,这又导致了在企业级应用领域,大片市场被微软夺走。
服务器端脚本语言我用过的不多,最早用jscript和Vbscript做asp开发,后来学习java,现在主要用php,其他的像perl、python、ruby也了解过,但都没有实践,所以对于服务器端语言,我自认为没什么发言权,仅简单说下我自己的体会。
我觉得服务器端语言的发展很大程度上与Unix/Linux的发展有关,和开源环境的发展有关。国外的服务器大多数是基于unix/linux+Apache的,Perl、php、python、ruby...都是unix/linux平台上的脚本语言,同时又都是开源的。web开发者大多都与开源社区有着千丝万缕的联系,早期的开发者很多事开源社区的骨干,后来的开发者从开源社区获益匪浅,受其影响至深,所以国外的开源事业这样蓬勃发展。
还有一个很重要的原因是语言的学习难度,以及宣传力度。国内计算机发展滞后非常多,没有国外那样的开源社区和环境,初级用户学习web开发还是从国内开始,铺天盖地都是asp的教材,asp的服务器,asp的乱七八糟的代码,使用的也都是windows所以绝大部分初学者从asp学起。现在渐渐的,越来越多的人开始了解国外的社区和环境,并且不断的将国外的思想引入中国,开发者开始跟随国外的潮流,盛行apm平台的开发,盛行Ajax开发,ROR也收到越来越多的关注...
因此我也认为,语言的流行程度是不能和语言的功能划等号的,中文文档的完善程度以及中文社区的繁荣程度,很大程度上影响了初学者的选择。事实上,很难讲清楚哪种语言更好,也没有必要去过分计较,肯定各有个的优点,也各有个的缺点,最重要的是针对你自己的需求选择合适的语言。这点我认为是最难的,因为没有哪篇文章,哪本书明确的描述过什么样的需求用什么样的开发环境最合适,而且对于一个初学者来说,如何知道自己需求还是个问题!
不过经过几年的开发,我渐渐觉得BS开发存在着极大地弊端,浅浅感觉到Ajax应用、敏捷开发以及其他rich client的理念开始引导web开发向着CS回归。
ajax应用、敏捷开发、Rich Client和CS回归的问题,将在下文阐述。
参考资料:
http://en.wikipedia.org/wiki/JavaScript
http://en.wikipedia.org/wiki/HTTP
http://en.wikipedia.org/wiki/Web_browser
网页浏览器是个显示网页服务器或档案系统内的HTML文件,并让用户与此些文件互动的一种软件。个人电脑上常见的网页浏览器包括微软的 Internet Explorer、Mozilla的Firefox、Opera和Safari。浏览器是最经常使用到的客户端程序。万维网是全球最大的连结文件网络文库。
协定和标准
网页浏览器主要通过HTTP协议连接网页服务器而取得网页,HTTP容许网页浏览器送交资料到网页服务器并且获取网页。目前最常用的HTTP是 HTTP/1.1,这个协议在RFC2616中被完整定义。HTTP/1.1 有其一套Internet Explorer并不完全支援的标准,然而许多其他当代的网页浏览器则完全支援这些标准。
网页的位置以URL(统一资源定位符)指示,此乃网页的地址;以http:开首的便是通过HTTP协议登陆。很多浏览器同时支援其他类型的URL及协议,例如ftp:是FTP(档案传送协议)、gopher:是Gopher及https:是 HTTPS(以SSL加密的HTTP)。
网页通常使用HTML(超文本连结标记语言)文件格式,并在HTTP协议内以MIME内容形式来定义。大部分浏览器均支援许多HTML以外的文件格式,例如 JPEG、PNG和GIF图像格式,还可以利用插件来支援更多文件类型。在HTTP内容类型和URL协议结合下,网页设计者便可以把图像、动画、视频、声音和流媒体包含在网页中,或让人们透过网页而取得它们。
早期的网页浏览器只支援简易版本的HTML。专属软件的浏览器的迅速发展导致非标准的HTML代码的产生。这导致了浏览器的兼容性的问题。现代的浏览器(Mozilla、Opera和Safari)支援标准的HTML和XHTML(从HTML 4.01版本开始)。他们显示出来的网页效果都一样。 Internet Explorer仍未完全支援HTML 4.01及XHTML 1.x。现在许多网站都是使用所见即所得的HTML编辑软件来建构的,这些软件包括Macromedia Dreamweaver和Microsoft Frontpage等。他们通常缺省产生非标准HTML;这阻碍了 W3C制定统一标准,尤其是XHTML和CSS(层叠样式表,设计网页时用)。
有一些浏览器还加载了一些附加组件来Usenet新闻组、IRC(因特网中继聊天)和电子邮件。支援的协议包括NNTP(网络新闻传输协议)、SMTP(简单邮件传输协议)、IMAP(交互邮件访问协议)和POP(邮局协议)。
简史
Tim Berners-Lee是第一个使用超文本来分享资讯,及于1990年发明了首个网页浏览器--WorldWideWeb的人。在1991年3月,他把这发明介绍给了给他在CERN工作的朋友。 从那时起,浏览器的发展就和网络的发展联系在了一起。
当时,网页浏览器被视为一个能够处理CERN宠大电话簿的实用工具。在与用户互动的前题下,网页浏览器跟据gopher和telnet协议,允许所有用户能轻易地浏览别人所编写的网站。可是,其后加插图像进浏览器的举动使之成为了因特网的“杀手程序”。
NCSA Mosaic促使了因特网的迅速发展。它是一个先在Unix运行的图像浏览器;很快便发展到在Apple Macintosh和 Microsoft Windows亦能运行。1993年9月发表了1.0版本。NCSA中Mosaic项目的负责人Marc Andreesen辞职并建立了网景通讯公司。
网景公司在1994年10月发布了他们的旗舰产品Navigator(导航者)。但第二年Netscape的优势就被削弱了。错失了因特网浪潮的微软在这个时候匆促的购入了Spyglass公司的技术,改成Internet Explorer,掀起了软件巨头微软和网景之间的浏览器大战。这同时也加快了万维网的发展。
这场战争把网络带到了千百万普罗电脑用户面前,但同时显露了因特网商业化如何妨碍统一标准的制定。微软和网景都在他们的产品中加入了许多互不兼容的 HTML扩展代码,并试图以这些特点来取胜。1998年,网景公司承认他们的市场占有率已跌至无法挽回的地步,这场战争便随之而结束。微软能取胜的其中一个因素是它把浏览器与其操作系统一并出售(OEM,原始设备制造);这亦使它面对反垄断诉讼。
网景公司以开放源代码迎战,创造了Mozilla。但这个并不能挽回Netscape的市场占有率。在1998年底美国在线收购了网景公司。在发展初期,Mozilla计划为著吸引开发者而挣扎;但至2002年,它发展成一个稳定而强大的因特网套件。 Mozilla 1.0的出现被视为其里程碑。同年,衍生出Mozilla Firefox。Firefox 1.0于2004年发表。及至2005年, Mozilla及其衍生产品约占10%网络交通量。
Opera是一个灵巧的浏览器。它发布于1996年。目前它在手持电脑上十分流行。它在个人电脑网络浏览器市场上的占有率则比较小。
Lynx浏览器仍然是Linux市场上十分流行的浏览器。它是全文字模式的浏览器,视觉上并不讨好。还有一些有著进阶功能的同类型浏览器,例如Links和它的分支ELinks。
纵然Macintosh的浏览器市场现在亦同样被Internet Explorer和Netscape占据,但未来有可能会是苹果电脑自行推出的 Safari的世界。Safari是基于Konqueror这个开放源代码浏览器的KHTML布局引擎而制成的。Safari是Mac OS X的缺省浏览器。
2003年,微软宣布不会再推出的独立的Internet Explorer,但却会变成视窗平台的一部份;同时也不会再推出任何 Macintosh版本的Internet Explorer。不过,于2005年初,微软却改变了计划,并宣布将会为Windows XP、 Windows Server 2003和快将发表的Windows Vista操作系统推出Internet Explorer 7。
万维网和网页浏览器的功能
不同的浏览器有不同的功能,现时浏览器和网页会有很多功能和技术是以往没有的。如之前提到的,因为浏览器战的出现,浏览器和万维网得以迅速但混乱地扩展。


