从Firefox到Chrome

新年第一天,我还在坚守工作岗位。也是在今天决定将自己的主力浏览器从Firefox向Chrome迁移。

已经无从得知具体是什么时候开始用Firefox的,只依稀记得当初用Fedora Core 1当桌面。那时Linux下主流的浏览器就是Mozilla怪兽和Opera,我对后者一如既往的不习惯。第一次用Firefox是因为Mozilla的土鳖用户界面实在无法容忍,那时候它的名字还是Firebird 0.7。到0.8的时候正式改名为Firefox,从那时候起这个浏览器大概真正算是可用了;-)

如今,Firefox发布已整整5年有余,版本号也到了3.5,3.6。某种程度上来讲,加上插件后它已经不能再算是一个简单的浏览器了,已俨然成为一个巨无霸浏览平台,Integrated Browse Environment。

Firefox发展到现在,稳定性已经不再是大问题了。我还记得1.x和2.0.x时代内存泄露问题一直没有被有效解决,直到3之后才有所改观。

目前我觉得其最大的瓶颈在于其性能,尤其表现在Disk I/O上。大家知道Firefox以SQLite来存储数据,其数据文件可以增长到几十甚至上百M,对这样在普通硬盘文件系统上的数据库文件频繁读写更新,性能能好么?当然,用Linux折腾的人已经想到把profile移动到利用物理内存创建的tmpfs上来改善性能,但毕竟太繁琐不可能普及,Windows上的Firefox Portable放到高速SSD存储上用倒是个不错的方法,冏。还有个问题就是Firefox的JavaScript引擎性能的低下,不知道的可以去看看评测,或者直接用@virushuo大虾的phpjsrsa页面做个简单的测试。Firefox 3.5.x和Chrome dev相比,差了近20倍…

目前阻碍用户向Chrome迁移的,可能主要还是Firefox丰富的插件在Chrome下有无好的替代品。

我个人迁移到Chrome的主要原因有以下几个特性:

  1. 多进程设计
    每个tab一个独立sub-process的设计,各个tab之间可以不互相影响。万一有一个崩溃掉也不至于crash掉整个浏览器进程。当然,实际还是遇到过一个页面导致tab崩溃,继而所有tab均出错的情况 http://twitpic.com/wq93u
  2. 沙盒(SandBox)技术有效阻止恶意入侵
    以下来自Wikipedia,就不翻译了:The Sandbox Team is said to have “taken this existing process boundary and made it into a jail“; for example, malicious software running in one tab is supposed to be unable to sniff credit card numbers entered in another tab, interact with mouse inputs, or tell Windows to “run an executable on start-up” and it will be terminated when the tab is closed. This enforces a simple computer security model whereby there are two levels of multilevel security (user and sandbox) and the sandbox can only respond to communication requests initiated by the user.
  3. Incognito模式
  4. 扩展
    安装,删除,启用,停用或者升级后重载,都无需重启浏览器即可完成,强。比较恨Firefox更新,启/停用Add-ons之后必须重启才能生效这一点。
  5. V8 JavaScript引擎
  6. Task Manager
    很有特色的工具,作为一个浏览器拥有task manager可谓绝无仅有了。

以前基本不在意这个所谓的JavaScript引擎到底能有多大区别,虽然也曾经多次看过主流浏览器JavaScript引擎性能相关测试,惊讶的发现Firefox的引擎性能竟然如此低下。Chrome的V8几乎一枝独秀,貌似只有最新版Opera的Prestro有望与之一较高下。

除了上面提到的这些特性之外,还有一点让我下定决心迁移:平时工作需要用到用Oracle ADF开发的Web应用,页面中还包含大量JS,经常导致Firefox高CPU占用且失去响应。失去响应也就罢了,最恶心最不能忍受的就是按某些特定的按钮,多次(至少7-8次)导致Firefox崩溃,继而xorg-server崩溃。这在我看来几乎有点不可思议的,浏览器崩溃能导致Linux的X Server完全崩溃并自动重启!这个后果是严重的,我甚至去找开发人员和launchpad问,也没找到问题的根源。后来才知道是ADF惹的祸,用Chrome即使所有tab都崩溃也没事;-)

目前Google Chrome只有Windows平台有稳定分支,Linux和Mac只有Beta和Dev两个channel。其中Beta相对比较稳定,而Dev则是新特性的试验田,比较激进更新很快,据说会比较不稳定,但我一直在用Dev,感觉还是很稳定的。

下载:

Chrome 必备之扩展列表

  • Proxy Switchy! (替代Multiproxy Switch)
    这玩意儿在Linux下一直有问题,到1.6.x才算可用。但是发现在Linux和Windows下切换代理会影响全局,这…
  • Domain Details (Header Spy替代品)
  • Tab Menu (Tab增强)
  • Super Drag
  • Click&Clean (Windows Only)
  • Xmarks Bookmark Sync
  • Chromed Bird (我觉得是最完美的浏览器扩展类Twitter客户端,选项太强了!)
  • Smooth Gestures
  • AdBlock (不用多说了)
  • FlashBlock (有两个同名的,自己甄别吧)
  • Firebug Lite
  • Chrome Flags (Flagfox equivalent)
  • Chrowety (Another good Twitter Client)
  • Chroemilk (RememberTheMilk)

最后,提一下目前Chrome在日常使用中存在的缺陷,还没有解决方案(若你知道,请告诉我):
没法和Firefox 3.x一样缩放Zoom Text Only,也没有此类扩展。做了一点研究,发现问题是Chrome本身,或者说上游的Chromium就没有此特性,所以短期内看来是无法解决了。

若在墙内碰到无法访问扩展安装扩展,可以用加上参数启动Chrome通过ssh -D开的tunnel proxy访问并安装;-)

Linux
google-chrome --proxy-server=socks5://host:port

Mac OS X
/Application/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --proxy-server=socks5://host:port
上面这个命令启动Chrome会出错,真不知道怎么从Terminal加参数启动Chrome…

Windows
%userprofile%\AppData\Local\Google\Chrome\Application\chrome.exe --proxy-server=socks5://host:port

补充一点:Chrome内置中文分词技术,光标移动到页面上的任何中文内容,尝试双击某个中文字符,然后看看会发生什么;-)

各位读者看到日期,估计又要郁闷了。实在对不起大家了,在draft里躺了太久,今天终于下定决心完成之;-)