前两天下载搜狗输入法的时候就看到官网上有提示说,搜狗将在北京时间11月2日下午14:00推出一个新的概念产品,完了一直在写作业竟然给忘记了.今天早上在google wave中群聊的时候kurt给我提醒了.隧 login到了 http://pinyin.sogou.com/cloud 进行观望.
  • 使用初探
  1. 安装
按照官网上的说明将搜狗云输入法链接保存到自己的书签中.或者直接用鼠标将搜狗云输入法图标拖到书签中.
200911041750.jpg
2.使用
点击刚才保存的云输入法书签.将会启动一个悬浮的输入法框.
云输入法的使用
  • 使用感受
  1. 搜狗云输入法的页面兼容性还不是很好的.
在很多的页面上当点击启用搜狗云输入法时会出现也没反应缓慢,同事提示出现Unresponsive script Warning. 然后输入法就会崩溃.
Scripts
2.输入法的反应速度还是很慢的.这个原因会在后面云输入法实现原理初探中具体说明.所以当网速慢的时候使用起来会很不爽.尤其是不能体验狂敲键盘的感觉.另外一个方面,输入法的取词查询都是在服务器端进行的.所以如果云输入法有像搜狗客户端输入法那样近2亿多用户的时,状况也是不敢想象的.
3.在可以使用搜狗云输入法页面的情况下.可支持的输入页面部分也是很有限的.地址栏中好像不支持输入.
  • 原理初探
这是官方网站上给出的一张图片
云输入法原理
云输入法是基于B/S架构的.无需安装.运算均在服务器端进行. 为了搞清楚云输入法到底是怎么搞的.这里借用了firefox下一个很有名的插件.Firebug.
首先解释一个问题,当我们点击启动搜狗云输入法时我实际做了什么事情.
当将鼠标放到书签上时.注意观察firefox下面的地址栏.
点击书签出发js
稍微懂点web和脚本语言的都知道.这可能是一段javascript代码.
Bingo!
这就是启动云输入法的完整代码. 点击这里下载JS
javascripts代码
这段JS代码首先判断当前浏览器是否是IE内核.以及判断当前页面是不是UTF_8编码.如果ie=1并且是UTF_8编码的页面则调用 http://web.pinyin.sogou.com/web_ime/init2_utf8.php 否则调用 http://web.pinyin.sogou.com/web_ime/init2.php 页面.
同时在当前页面body上动态生成一个Script标签.script标签的src属性是上面要调用的页面地址.初始化完成后会生成一个script元素.
javascript代码
如果此时页面没有报JS warning的话恭喜你走过了第一关.不出意外你会看到这个图标
云输入法
注意这个和平时见到的图标不一样噢. (不都差不多嘛? ==No 这个是在页面上的! ==汗~)
这个图标其实使用js的div生成的一个浮动区域.
这个是浮动区域的javascript代码. 点击这里下载JS
云输入法图标代码
这个时候基本框架都有了.OK,当我们输入汉字的时候是什么情况呢?
我们来做个测试.当在页面输入拼音 shiying 的时候,我们看到页面会生成n多script标签.
…etc
到这里大家可能都比较疑惑.这些东西是什么.(注意这些URL是可以访问的.)进去看看呗.(这部分工作交给观众自己进行.)
云输入法页面
进去之后可能傻了.一堆乱码? No, definitely no.猜想可能是页面经过了编码. 是什么编码呢?凭经验我猜应该是URL Encode.OK那就decode一下呗.
点击这里进行URL decode (进入页面后点击”反编码/解码”,嘿嘿.) 看看参考译文三或者四.你会大叫, 我靠,这不就是输入法的候选词么.
Bingo (again~)!
测试中发现这些<script>标签是动态增减的.当你很快输入 “s h i y o n g”时.会相应生成”s.key”,”sh.key”,”shi.key”…完了一段时间.大概4-5秒钟.这些前面的候选词的script标签会自动消失.
OK,现在总结下搜狗的这款概念产品云输入法的大概运行流程:
  1. 点击”启动书签云输入法书签”==进行js初始化,确定web页面的调用.生成页面script标签
  2. 进行.php页面调用同时在生成一个浮动的div标签.完成输入法界面初始化. 这个过程会出现JS不兼容等情况.
  3. 用户输入拼音,web_ime/init2.php监视用户输入,通过AJAX与服务器端通信.查询相关字库.同时返回URL编码过后的结果进行汉字候选.
  4. 候选字动态增减.对应的是页面中<script>标签中候选字的增减.
云输入法的瓶颈:
  1. AJAX在进行数据传输时的延迟.云输入法面对的是用户快速的键盘输入.对数据传输相应要求很高.Data latency要极小.
  2. 词库查询的响应时间,多用户查询是缓存,智能词频.(估计这块搜狗能够搞定.只不过在服务器端装了词库而已.只需要相应的IO优化).
  3. JS构造页面的时间.在页面body里频繁的插入和删除element.谁也受不了呀.可能造出内存消耗严重和页面崩溃,etc.
部分问题探讨:
  1. 在线汉字输入老早就有,为什么就只有搜狗的叫做云输入法阿? (谁告诉我下?)
  2. blog中的一个问题.在使用感受中,第三条我写了在地址栏中无法使用云输入法,为撒??