漫谈 Google 的 Native Client 技术(一)---- 历史动力篇(Web 本地计算发展史)
转自:http://hzx5.blog.163.com/blog/static/40744388201172522313463/
漫谈 Google 的 Native Client 技术(一)---- 历史动力篇(Web 本地计算发展史)
昨天在 CB 上看到一篇文章《最新
Chrome Beta 支持在浏览器内直接执行 C/C++ 代码》,而实现这功能的最基本的技术就是 Google 几年前提出的 Native Client 技术,其实之前我在一个计算所师兄的博客里已经看过一篇介绍 Native Client 技术的文章,个人当时就感觉这东西挺有前途的,今天无聊,也了解了下,写篇博客总结下,其中不免有拾人牙慧之处。
Web 计算本地化(前端技术)历史 - HTML -> CSS -> Javascript
最初的网络上传输的内容是纯文本的,从网络上传输回来直接通过字符界面展示出来就够了,本地几乎不用计算。
后来,为了更直观,更层次化展现网络内容,人们在文本的基础上加上了什么 <h1> 之类的标签,于是出现了 html,这时候,就出现了浏览器,浏览器是把这些标签解释,并且按照一定格式渲染,这时,就需要一定的本地计算来进行标签分析,字体渲染之类的。
再往后,出现了CSS,并且互联网有了富媒体元素,可以把网页展示的漂亮了,要求本地计算更多了。
但是,这还不够,除了将网页做得漂亮外,还需要减少用户的等待时间,提高用户体验。这时,有人发现,其实很多网络通信是可以避免的,比如,在用户登陆界面,用户输出 email 格式的用户名,之前是需要将这个信息发给服务器,服务器收到信息后,检查是否合法,不合法的话,返回一个页面,叫用户重新填写,这一来一往很花时间,用户体验非常不好。于是有人就想到,能不能把这些检查用户名之类的计算放到本地,于是,就出现了 JavaScript,在用户提交信息时,JS 可以在本地检查是否合法,不合法的话,提示原因并要求重新输入,这样用户体验就好了,并且减少了服务器计算以及通信(这貌似符合绿色通信的概念)。
再往后,有人发现,每次点击一个链接,在载入下一个页面的时候,出现空白页让用户很不爽,于是,有人想出了一个办法,那就是事实上,很多页面很大一部分是共同的,这部分其实不需要重新加载,只需要加载改变的部分,而这又可以通过 JS 实现,于是出现了 Ajax 技术。这个技术减少了空白等待,提高了用户体验,并且减少了网络通信量(有时绿色通信!)。
Web计算本地化进一步发展 - Java-applet, Flash, html5
但是,用户在互联网上的需求还是没有得到满足,有人还想直接在网页上处理图片,玩游戏之类的,由于这类应用一方面计算量大,都放到服务器,服务器不堪重负,另一方面,这类应用都是实时生成画面的,假如通过服务器来计算生成画面(如游戏),再通过网络将每帧图像实时传送回来,对网络要求极高,几乎不可能实现。
于是,需要新的技术将更多的计算放到本地,这时候,出现 Java applet, flash等。Java applet 允许在网页中嵌入java程序,并在本地执行。Flash 应该也是类似,只不过这些计算需要通过 flash 提供的 api 完成(这一点有点类似 ActiveX 通过 COM 来完成本地计算?)。
Flash 的出现,一段时间内,几乎是一统互联网的视频播放以及网页游戏领域。这时,有人眼红也好,有人有更好的主意也好,结果就是有人抱怨 flash 不开放(还有不安全),有人就想到,我们做一个开放的标准,这标准里面就允许类似游戏等复杂的交互,于是出现了 HTML5 和 CSS3。HTML5 以及 CSS3 将很多 JS 以及 Flash 能完成的功能都移到了一个 HTML 标签里,其实,本质还是差不多,只是这时候这些渲染的计算不是通过 flash 程序来了,而是直接通过浏览器执行了。
云计算时代的本地计算 - Native Client
再往后,随着网络带宽的增长,以及服务器存储能力的提高,出现了大量的数据中心,为了提高这些中心的利用率,出现了云计算。在云计算时代,用户可以把很多数据都放在云端,并且访问这些应用的方法都是统一的。开发者在云服务器开发程序的接口也是统一的(PaSS),这就可以很容易实现跨平台,给用户一个统一的体验。
在这个时代,由于访问云端的资源都是通过浏览器完成的,浏览器就成为一个很重要的平台,这也就是为什么 Google 会推出自己的浏览器以及 ChromeOS 的原因。在浏览器能做的事也越来越多,如玩游戏,但是,由于这些游戏是通过一个类似 flash 这样的东西执行的,效率很低,为了提高效率,并且进一步的将更多的计算密集的东西(如 3D 渲染)放到本地完成,Google 提出 Native Client 技术,这种技术就是想直接在本地执行 C/C++/Java/Python
等代码,从而提高本地计算的效率。
从这里,也可以看出 Google 的野心,Google 希望以后用户所有的需求都能在浏览器上完成,包括大型 3D 游戏,到时候,什么 Windows,Linux,都是透明的了,只剩下一个Chrome Broswer,成为开发者的事实平台,得开发者得天下,Google 就此一统江山,虽然不能千秋万代,但也能够衣食无忧上十年。
Web 计算本地化的问题-安全性
由于 web 计算本地化是在本地执行服务器上下下来的代码,因此,服务器上要是发给用户的恶意代码,在本地执行的话,会出现严重的后果,因此,这些技术(包括 JS,Java applet,Flash)的安全性非常重要。由于 Flash 应用最多,因此,Flash 也被经常爆漏洞。
而对于 Native Client 技术,如何保证安全则是更大的挑战,为了保证安全,感觉这技术最好用于计算密集型应用,而尽量不让远程代码执行文件读写操作。为了保证文件读写的安全性,个人觉得有两个办法,一个是不读写本地文件,将文件直接写到云端的云存储(但是计算还是本地);另外一个就是在本地沙盒里面读写,不过这只适合临时数据,永久的还是要写到云端。
最后,附一张图,这张图反映了个人计算机应用平台的进化方向:
本文作者: Sigma 在新浪微博关注Sigma
本文链接: http://www.sigma.me/2011/08/13/about-google-native-client-history.html
本博客采用知识共享署名—非商业性-禁止演绎使用3.0协议进行许可,转载请保留作者和原文链接。
漫谈 Google 的 Native Client 技术(一)---- 历史动力篇(Web 本地计算发展史)的更多相关文章
- 漫谈 Google 的 Native Client(NaCl) 技术(二)---- 技术篇(兼谈 LLVM)
转自:http://hzx5.blog.163.com/blog/static/40744388201172531637729/ 漫谈 Google 的 Native Client(NaCl) 技术( ...
- [转载] Google数据中心网络技术漫谈
原文: http://www.sdnlab.com/12700.html?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd ...
- Google Chrome Native Messaging开发实录(一)背景介绍
最近接手了一个针对Google Chrome的需求,最终是使用Native Messaging来实现的.通过这个连载,将把本次开发从方案选定到编码的全部过程进行完整的回顾,并记录开发过程中踩过的各种坑 ...
- Web开发技术发展历史
Web开发技术发展历史 来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互 ...
- 【转载】Web开发技术发展历史-版本1
原文在这里. Web开发技术发展历史 Web的诞生 提到Web,不得不提一个词就是“互联网”.Web是World Wide Web的简称,中文译为万维网.“万维网”和我们经常说的“互联网”是两个联系极 ...
- 利用Native Client OLEDB 11 高效率地对SQL SERVER 进行查询和插入操作
前言: 鄙司原始用的都是ADO来访问数据库,而我现在着手的项目是从我的GPS历史数据库中,取出历时数据的一个接口,一个DLL.用ADO写完之后,测试下来,平均4000条的数据,需要 180 毫秒左右. ...
- navicat 连接sqlserver提示要安装 sql server native client
navicat 连接sqlserver提示要安装 sql server native client 解决方法:其实navicat自带sqlncli_x64.msi,就在安装目录下,安装后问题解决!
- Downloading the Google Cloud Storage Client Library
Google Cloud Storage client是一个客户端库,与任何一个生产环境使用的App Engine版本都相互独立.如果你想使用App Engine Development server ...
- Windows开发技术的历史
原文地址:http://www.kuqin.com/windows/20090315/40172.html Windows已经有22年的历史,这22年来,微软官方主力推行的编程语言与API有四个分水岭 ...
随机推荐
- 洛谷 P3819 松江1843路
题目描述 涞坊路是一条长L米的道路,道路上的坐标范围从0到L,路上有N座房子,第i座房子建在坐标为x[i]的地方,其中住了r[i]人. 松江1843路公交车要在这条路上建一个公交站,市政府希望让最多的 ...
- LightOJ - 1231 - Coin Change (I)
先上题目: 1231 - Coin Change (I) PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: ...
- CodeForces - 9B - Running Student
先上题目: B. Running Student time limit per test 1 second memory limit per test 64 megabytes And again ...
- [bzoj3717][PA2014]Pakowanie_动态规划_状压dp
Pakowanie bzoj-3717 PA-2014 题目大意:给你n个物品m个包,物品有体积包有容量,问装下这些物品最少用几个包. 注释:$1\le n\le 24$,$1\le m\le 100 ...
- FZU 1851 组合数
给你两个数n和m,然后让你求组合数C(n,m)中的质因子的个数. 这里用到的一个定理:判断阶乘n!中的质因子 i 的个数的方法---f(n!)=n/i+n/i^2+n/i^3+.....n/i^m ( ...
- bzoj2878 [Noi2012]迷失游乐园 [树形dp]
Description 放假了,小Z认为呆在家里特别无聊.于是决定一个人去游乐园玩. 进入游乐园后.小Z看了看游乐园的地图,发现能够将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环 ...
- Database Design for Sexbale Forum
Mars March 17, 2015
- java泛型具体解释
为什么引入泛型 bug是编程的一部分,我们仅仅能尽自己最大的能力降低出现bug的几率,可是谁也不能保证自己写出的程序不出现不论什么问题. 错误可分为两种:编译时错误与执行时错误.编译时错误在编译时能够 ...
- ubuntu下如何查看和设置分辨率
ubuntu下如何查看和设置分辨率 在ubuntu下可以使用xrandr来设置自己需要的分辨率.大致步骤如下: www.2cto.com 1.使用xrandr命令查看屏幕分辨率,这里我使用的是显 ...
- Dijkstra算法原理及证明(转)
Dijkstra算法及其证明 算法: 设G是带权图,图中的顶点多于一个,且所有的权都为正数.本算法确定从顶点S到G中其他各个顶点的距离和最短通路.在本算法中P表示带永久标记的顶点的集合.顶点A的前驱是 ...