起初在ubuntu里一直用自带的ibus配合sunpinying,但是一些快捷键的操作不符合一贯的使用习惯,并且输入速度实在不敢恭维于是在前段时间换成了fctix,这是个不错的输入法,小巧且有效率,后来发现可以自定义大词库,好处是上词更准确了,但是带来的副作用是输入更容易卡死,甚至会导致正在输入的程序也出问题卡死,于是开始搜索寻求解决方法,找到了这篇文章——你还在为 fcitx-sunpinyin 一顿一顿而发愁么?

根据文中的提示操作完之后果然效率高了许多,而当时还发现了另一篇即下面引用的文章,似乎是在上面的基础上的修改优化版,但是因为我已经折腾了一遍不想继续了,但是觉得还是有必要记录一下防止以后有用到:)

PS.2011年6月18日更新,鄙人已经尝试过下面这个方法,确实更加方便和安全,推荐使用,原作者更新了脚本,同步更新下,灰常感谢原作者Robot同学!

Sunpinyin加速脚本 – 内存缓存词库

之前在一篇文章里,我提到了在Ubuntu下使用fcitx + sunpinyin配合hubertstar的大词库实现媲美搜狗的流畅输入,但是仍然有一个大问题——当词库过大的时候输入中会出现停顿现象,严重影响用户体验(因此我当时也只推荐使用small版词库)。

这是因为fcitx和sunpinyin的词库都是使用SQLITE,在输入时需要反复查询,由于词库的特殊性(前后两个查询的词经常离得很远),SQLITE的缓存机制很难起效,因而只能反复读硬盘,导致速度很慢

不过,在大宝的启发下,我参考了Ubuntu中文论坛里hubertstar的帖子,以及大宝的博客,我写了一个供Ubuntu使用的sunpinyin加速脚本,效果非常不错,拿上来和大家分享

more原理非常暴力——直接将整个sunpinyin的userdict放入/dev/shm(即存在于内存中的tmpfs),然后符号链接回来,相当于手动暴力cache整个词库,大幅提高了速度。这样做法的缺点就是内存消耗较大——我现在使用的大词库有100+MB,即需要100+MB的内存,不过,当下基本每个人都有2G+的内存,本来也就很难用完,这样正好提高了内存的利用率

使用方式:将这个脚本放在方便的地方,通过chmod +x赋予可执行权利,在“系统 -> 首选项 -> 启动应用程序”中添加这个脚本

相比于hubertstar和大宝的脚本,这个脚本有如下优点

  1. 使用方便,只需要在GNOME会话登陆后自动运行即可
  2. 自动将用户词库变更备份回原目录,不会导致自造词丢失
  3. 卸载方便,脚本在退出时(包括关机或登出)会自动恢复用户词库,因而如果没有启动这个脚本也不影响运行sunpinyin
  4. 完全运行在用户空间,不需要使用服务或者cron。
 _#!/bin/bash
 #sunpinyin_speed_up.sh
 # Sunpinyin Speed Up Script for Ubuntu (by memory caching, and no data loss)
 # You can run this script in background on GNOME logging in.
 # Originally written Hubert Star, modified by Bob Robot (http://robotshell.org/).
 # Capture the exit signal, make sure it is the FIRST uncommented line.
 trap "do_exit" SIGHUP SIGINT SIGQUIT SIGTERM
 SUN_DIR="${HOME}/.sunpinyin"
 SHM_USERDICT="/dev/shm/sunpinyin_userdict.sh0"
 # Backup the userdict and restore all changes made by this script on exit.
 do_exit() {
 cp -f "${SHM_USERDICT}" "${SUN_DIR}/userdict.real"
 rm -f "${SHM_USERDICT}"
 mv -f "${SUN_DIR}/userdict.real" "${SUN_DIR}/userdict"
 exit 0
 }
 # Work around for abnormal quit.
 if [ -e "${SUN_DIR}/userdict.real" ]
 then
 rm -f "${SHM_USERDICT}"
 mv -f "${SUN_DIR}/userdict.real" "${SUN_DIR}/userdict"
 fi
 # Rename the real userdict, copy it to RAM and make a symblic link back.
 # From now on the modification and query on userdict takes place in RAM.
 mv -f "${SUN_DIR}/userdict" "${SUN_DIR}/userdict.real"
 cp -f "${SUN_DIR}/userdict.real" "${SHM_USERDICT}"
 ln -sf "${SHM_USERDICT}" "${SUN_DIR}/userdict"
 # Automatically backup the userdict, make sure not losing the modification.
 p_count=0
 while [ true ]
 do
 p_count=$(($p_count+1))
  sleep 1800
 if [ $p_count == 4 ]
 then
 p_count=0
 cp -f "${SHM_USERDICT}" "${SUN_DIR}/userdict.real"
 fi
 p_size_shm=$(ls -l "${SHM_USERDICT}" | awk '{print $5}')
 p_size_real_t=$(ls -l "${SUN_DIR}/userdict.real" | awk '{print $5}')
 p_size_real=$(($p_size_real_t+512))
 __if [ $p_size_shm -ge $p_size_real ]
 then
 cp -f "${SHM_USERDICT}" "${SUN_DIR}/userdict.real"
 fi
 done
 _

经测试,不论多大的词库(只要你内存无压力)都可以顺畅输入。赶紧把你的sunpinyin词库换成超大词库,来体验更流畅的Ubuntu拼音输入吧~

Comments
Write a Comment

Tags

生活   碎碎念   思考   电影   Android   工作   ubuntu   记录   牢骚   游戏   StudyJam   产品   感慨   α-d0βe   代理   知乎   目标   手机阅读   产品设计   外卖   设计   学习   回忆   翻译   漫画   读书   吐槽   腾讯   kindle   小妇人   抱怨   分析   做事   输入法   游戏制作   诺基亚   阅读   零号线   iPhone   MAC   教育   GameMaker   兔年   模拟器   英语学习   流水   swift   刷机   旋转屏幕   SIM卡   随笔   背单词   小男人   需求   生命   平板   gnome   ipad   扯淡   fcitx   爱情   孩子   电子阅读   dezire z   老游戏   SSH   编程   GameMaker Studio 2   乔的男孩们   降级   光棍节   愤怒的小鸟   翻页效果   BUT   淘宝   touch   手机   apple   总结   正义   gtd   博客   皮克斯   公开课   反思   gSTM   2011   2010   播放器   WEB   服务   浮躁   暖暖内含光   修理   家庭   九把刀   imei   游泳   奥尔科特   宜家   storyboard   GMS手札   移动阅读   态度   dbus   平凡之路   协作   object-c   拓词   露易莎梅奥尔科特   操作   泄露   但是   无线网卡   白箱   蔡康永   快压   盗梦空间   mindmap   朴树   饥饿游戏   断网   iOS5   switchy   韩寒   成功   水位开关   知识整理   计划   文档   体验   物流   点子   360   myentunnel   动画   后会无期   xoom   触摸板   动漫   懒   将爱情进行到底   安达充   HTC   命运   校准   年度总结   随感   东野圭吾   惰性   HD6770   自私   周国平   tomboy   娱乐   plink   扇贝   洗衣机   情怀   触摸屏   麦当劳   patreon   人人   小米   evernote   chrome   职场   信息安全   营销   进度显示   爱发电   安全   公平   闲扯   twitter   锤子   DND   手机上网   Oculus   mars   流量   责任   N9   godaddy   tx2000   s-off   Lion   Nintendo Switch   心智图   电子辞典   用户资料   软团   自省   blogilo   魔法空间   垂直服务   生日   root   ubuntuone   电子书   塞尔达   笔记   老罗   肯德基   rhythmbox   win7   UCD   互联网   虚拟实境   废话   拖延   多看   显卡驱动   装13   用户   跨平台   angry bird   局域网   桌游   wireless   串号   联通   锤子科技   评论   失控   妥协   产品经理   百阅   众筹   wine