正在加载...

 

一、云输入法是什么东西?

webryan来看, 云输入法是依托于网络词库和ajax通讯方式,在用户不用安装任何软件的情况下,用户在浏览器端可以拥有与传统输入法一致的输入体验。

二、云输入法的特点。

OK,上面的概念相对来说比较抽象。这里简单根据概念来描述下“云输入法”的几个特点。

1.依赖于网络词库,相对节省存储空间和计算机运算。 对于传统的输入法来说,在安装输入法的时候就需要在用户本地安装好某种语言的词库。比如,中文输入法,就要包括中文的所有的词汇。这个总词汇量大约在40G左右。把所有词汇放到用户的计算机上,这显然是一个不现实的问题(用户心理和下载带宽等各个方面)。根据二八原理和cache原理来分析,其实在40G的数据中,有大量的数据很少有人会真正的用到,即使是用到再开销一次下载补救也是完全ok的。所以传统软件的做法是将最常用的词汇汇总压缩,最终可以达到200M左右的常规词库。(当然这200m的常规词库通常也不是跟第一个安装包下载到用户电脑上的,这个常规词库也可以具体的细化分类等等,这个就是产品运营的范畴了:) )。  而云输入法的最初实现则非常简单,你用到什么样的词,云输入法直接向服务器请求相应的词汇,服务器在后台计算好后返回给用户。所以对于用户来说,牺牲一点网络流量实现了存储的节约和cpu的节省。

但是这面临这几个问题:a.是不是每次输入同样的拼音都要去服务器拉去网络词库? b.是不是每个网站的词库输入都是独立的? c.如何针对pc or 用户级来说实现全局cache.   这些问题都可以专题去讨论。ryan 这里暂时不详述。

2.跨平台性及免安装性。云计算范畴的东西,玩的就是免安装。云输入法当然也不例外。云输入法的技术核心是javascript在页面里的执行和DOM渲染。所以只要浏览器支持javascript,理论上都支持云输入法,而不需要安装其他东西。 正因为这种基于web化的东西,云输入法理所当然支持跨平台。(没有哪个傻帽系统上开发出的浏览器会断然不支持javascript的吧,除非特殊功用。哈哈)

3.需要保存”云输入法”到书签或收藏夹。每次需使用的云输入法的时候,就从“收藏夹”或“书签”中点击这个输入法的url。当然,它不会像传统的被收藏的网站,会覆盖你当前的页面,而是简单的在当前页面启动云输入法。

4.页面独立性,每个页面要启动云输入法一次,才能使用云输入法。比如:你打开www.webryan.net ,启动了云输入法,然后你有打开了 http://bibubu.com 这个新页面,那么就需要重新启动一次云输入法,才能在bibubu.com这个页面使用。

 

三、云输入法的技术结构简述。

总体来说,云输入法与web2.0中被炒作已久的ajax技术唯一的区别就是:bookmarklet技术。

什么是bookmarklet呢? 以ryan所认知的就是:我们通常使用收藏夹或者书签保存一个URL, 当打开这个书签的时候,会在当前面打开这个被保存的URL。 而bookmarklet就是用使用收藏夹或者书签保存一段Javascript代码。 在当前页面打开书签则相当于在当前页面执行一段javascript代码。

而云输入法就是用bookmarklet,保存了一段javascript. 如下是搜狗云输入法执行的一段bookmarklet:

javascript:void((function(){var e=document.createElement(‘script’);e.setAttribute(‘src’,’http://web.pinyin.sogou.com/web_ime/init.js’);document.body.appendChild(e);})())

从代码上不难看出:1.先定义了一个匿名函数。 2.匿名函数的功能是先创建一个script标签,然后把它添加到document.body上。3.这个script标签指向’http://web.pinyin.sogou.com/web_ime/init.js’ 这个js文件,也就是js的真实内容的所在。4.执行这个匿名函数。

而在init.js这个文件中就包含了整个云输入法的web前端的所有逻辑。通过监听用户输入,ajax方式请求数据,创建DOM等等。

四、云输入法所面临的具体问题和实现。

1.如何防止DOM污染和JS污染,这个污染是双向的。先要防止云输入法对页面正常的功能的污染,不能让页面出现页面扭曲错位,js功能失效出现脚本错误等问题。 其次是防止页面的js对云输入法的js的破坏。 这个是一个相对来说比较简单的议题,js就用匿名函数+特殊标记的命名方式即可,dom的话,使用页面里用不到的标签即可。

2.页面dom树变化的监控和处理。对于web2.0以上的网站来说,ajax异步加载更新页面是常有的事儿,如果动态加载出来一个input框,而你的输入法又不能支持这个输入框的输入,岂不是掉了大。所以同步监控dom树的变化成为一个成熟云输入法必备的特性。这个不同浏览器的处理方式不一致。ie非ie9啊,ie8新版本啊,用{behavior:expression(window.namespace.func(this))}就可以了。其他不同浏览器得各自找办法。

3.事件监听以及按键兼容处理。 这个方面主要就是为了实现输入的功能实现。不同的按键对输入法来说可能有不同的含义和功能。事件的监听和按键都有浏览器兼容性的问题。 这里就不赘述。

 

总体来看,搜狗的云输入法和后续的QQ云输入法都是在云的应用中拓展了,收藏夹和书签的功用,加以利用,虽然不是bookmarklet的创始,确实应用的很好的创新。 希望国内各个it公司的实验室能推出更多这样的产品。

: http://www.webryan.net/2010/08/something-about-cloud-input/

本文相关评论 - 才 2 条评论
2010-08-10 20:38:49

感觉现在这个虚拟空间的速度越来越不错了

[回复]

2010-10-14 11:58:09

不错的博客哈

[回复]