LDCN


彻底优化让Firefox不再卡

2008-09-26 16:43 | 分类 网络相关 | By TualatriX

Firefox是Linux用户首选的浏览器,对其不作过多的介绍。只要看看LDCN的访客留言就知道他的流行程度了。

Firefox虽然是一款优秀的浏览器,但是不免还有些不足。对我而言,最大的不足就是其性能,简单的说,刚开始用很流畅,用久了,会越用越卡。

今天琢磨了一下Firefox,分析下Firefox卡的原因,并通过设定相关参数解决了这个问题。从此上网变得更加畅快!

—–

我的Firefox用户目录(~/.mozilla/firefox)是从Ubuntu 7.10时开始建立的,前前后后用过十几个插件,经历了从Firefox 2到Firefox 3,从Ubuntu 7.10到Ubuntu 8.04。

在Ubuntu 7.10的Firefox 2时,就遇到卡的问题,常常界面灰掉。

等到Ubuntu 8.04的Firefox 3,情况好一点,但是还是卡。后来我用极致编译参数编译了回Firefox 3.0,情况好了点,地址栏反应快了一点点,仅此而已。关闭Firefox的时候,还是会有很长的停顿时间,有时还卡死。

虽然重新建立用户目录会解决问题(即把~/.mozilla/firefox删除掉),但是相当多的资料/插件要重来,这个代价受不了,所以还得从Firefox本身动手脚。

查阅了相关资料,终于发现是由“历史访问”和“位置”引起的。

这个可不是我们能看到的“历史记录”和“地址栏”的已访问纪录,而是数据层面的。

让我们来看看,你的数据是不是过大了

查到数据库的大小

来到~/.mozilla/firefox/***.default(因人而异),下面有一个places.sqlite文件,看看它的大小。如果超过了10MB,理论上就能引起Firefox卡了。像我是21MB,一般用了一年左右的话,会有这个程度。

这个文件里存了些什么呢?让我用SQLite Manager这个扩展来看看:

在moz_favicons这张中,存了1500多个站点的Favicon,就是网站的Logo图标

moz_historyvisits这张表中,保存着所有访问过的纪录,我这里是六万条!

而moz_places这里存着近三万多的places:地址,标题和反转域名信息。

这些数据量到底对Firefox的性能有啥影响呢?我试着把places.sqlite改了个名,然后重启Firefox。

所有的停顿和卡都不复存在了!Firefox变得非常流畅。

当然问题是所有的历史纪录和地址栏信息都没有了,相当于起到了彻底“清除隐私纪录”的作用,只是这个的程度比“工具”->“清除隐私纪录”更深。

于是得出结论,在使用Firefox当中只要你要访问网站,它就会频繁的操作这个数据库,因为数据库很大,就影响了查询效率,所以会卡。而在关闭Firefox时,要对数据库作写入保存的操作,因为文件大,所以停顿很久也就不奇怪了。

清理数据

查明了是这个文件里面数据太多的原因,如果你对当前的历史和纪录没什么要求的话,直接删除就行了。

或者也可以用“工具”->“清除隐私纪录”,指定一些删除选项,也会有不错的效果,不过这并不能使文件变小,你需要用SQLite Manager,然后选择好数据库,并Database->Compact Database。这样会压缩数据库,使文件减少。

如果你熟悉Sql数据操作,那就更好了。可以有所保留地清理数据库。

在moz_places这张表中,有个字段(frencency)记录着每个条目的“频繁程度”,通过这个,你可以把一些不常使用的纪录全都通过sql语句查询并删除掉。只留下一些常用的纪录。

比如不常用的纪录frencnecy值一般为0,两三天才访问一次的网站可能为140,而我每天上的Gmail是6000!

永久性优化

“OK,我也会手动清理历史纪录,让我的Firefox快起来,问题是如何让它不再慢下去呢?”

我们来更改一个Firefox的隐藏设定,让它少记录点条目,我们就可以不用定期去清理它了。

在地址栏输入:about:config,过滤器中输入history,注意图中的以browser.history_expire_为前缀的条目:

browser.history_expire_days:表示历史纪录过期天数,默认是180天!

browser.history_expire_days.mirror:这个不详,跟镜像有关?

browser.history_expire_days_min:是用户值,即在“Firefox首选项”、“隐私”、“历史”当中,表示“保存我的历史,至少X天”。即使你在首选项中把“至少X天”设置成了了1天,或取消,Firefox还是会保存浏览历史,因为系统保留值为180天。

browser.history_expire_sites:这个是最大保存的站点数量,默认是四万个。

也就是说,系统要么保存180天的纪录,要么保存四万个浏览纪录,不过我上面的moz_historyvisits怎么达到了六万个呢?可能是指moz_places这张表。

差不多搞明白后,把值设置成下面的样子,站点数保存四千个就够了,系统保存3天的浏览纪录,用户最少1天。那个mirror随便设置了个值。

需要注意的是,如果你没有手动清理过places.sqlite,仅仅设定了这些值的话,文件是不会有变化的。清理还是得手动来。

接下来,就用实践来检验一切了,再过个半年查询一下places.sqlite的纪录,看看是否是被限制在了四千以内,这样的话Firefox应该再也卡不起来了。

另外,建议把“首选项”,“安全”,把有关”嫌疑攻击站点“和”伪造站点“的两个选择勾掉,有关这两个东西的文件也会相当大。不过没有places.sqlite夸张罢了。

转载请注明:转自LDCN - 彻底优化让Firefox不再卡

Tags:.

有 68 条评论 在 '彻底优化让Firefox不再卡'

RSS 订阅此页的评论 或者引用 '彻底优化让Firefox不再卡'.

  1. sol 说:

    本质的原因是内存泄露吧,关掉访问过的页签不释放内存。只有当整个进程退出才释放内存。不过历史记录这个问题也是有的,官方应该快解决这个问题了吧?因为3.0已经好多了。

    回复

    2008年09月26日 星期五 5:44 下午

  2. sol 说:

    显示系统和浏览器这个东西不错,测试一下Chrome什么样?

    回复

    2008年09月26日 星期五 5:46 下午

  3. firefish 说:

    QQ1.0pre2出了,TX快发新闻吧!:)

    回复

    2008年09月26日 星期五 7:58 下午

  4. Error 说:

    刚刚打开你的网站是,提示

    网站超限
    当您看到这个页面的时候,代表您租用的虚拟主机出现如下问题:

    1> 瞬间的CPU过高(例如程序效率过低引发的CPU长期占用)

    2> 网站的瞬间并发过高(例如大量访问和在线的论坛)

    3> 网站的页面过大或者由于做下载站等等导致瞬间型占用过高(例如flash站,视频站,mp3站,软件站)

    遇到该情况,请稍候访问(10分钟左右即可自动正常),但您应该迅速按照立即分析和解决问题.否则可能重新出现

    感谢您对我公司虚拟主机的支持.也希望您能够满足虚拟主机的规约,让大家都能够快速、稳定地使用.

    任何问题,可以随时访问我公司网站并联系我们:

    点此访问浪点主机官方网站

    回复

    2008年09月26日 星期五 9:00 下午

  5. TualatriX 说:

    @Error

    是的,虚拟主机超负荷了。主要是被外链了很多,带宽被占尽的原因吧。
    做站不容易,还要供别人呢!

    回复

    2008年09月26日 星期五 10:12 下午

  6. 普林斯赖 说:

    我的22.3M……

    回复

    2008年09月27日 星期六 1:50 上午

  7. shellex 说:

    嗯…有显示OS和Browser了,不改Agent的同学该不好意思了

    回复

    2008年09月27日 星期六 7:29 上午

  8. GenNux 说:

    把FireFox的Cache和./mozilla放到tmpfs去或者干脆把firefox的运行目录也放到tmpfs中,速度才会有飙的感激。

    回复

    2008年09月27日 星期六 8:48 上午

  9. guolinux 说:

    我的9.5M,第一次用地址栏会卡。

    回复

    2008年09月27日 星期六 8:51 上午

  10. walkerxk 说:

    我的只有一个urlclassifier2.sqlite,15M。FF2.0的。

    回复

    2008年09月27日 星期六 9:18 上午

  11. MKB 说:

    对应windows下面就是修改“C:\Documents and Settings\*****\Application Data\Mozilla\Firefox\Profiles\******.default”里面的places.sqlite文件。

    回复

    2008年09月27日 星期六 10:33 上午

  12. walkerxk 说:

    39,864 Cache
    14,996 urlclassifier2.sqlite
    12,684 extensions
    这个是我最大的三个目录,总目录大小是89,420

    回复

    2008年09月27日 星期六 11:02 上午

  13. oceanboo 说:

    显示企鹅的都是什么Linux系统呢? TX,还有哪些图标不全?

    回复

    2008年09月27日 星期六 11:41 上午

  14. crorts 说:

    哈哈,我也有我自己的域名咯~

    火狐的话我用起来怎么不会卡呢?

    回复

    2008年09月27日 星期六 2:50 下午

  15. WindyWinter 说:

    我有个urlclassifier3.sqlite,居然有50M!

    回复

    2008年09月27日 星期六 3:20 下午

  16. casio1374633 说:

    最新的QQ pre2 你们能成功发送截图吗?

    回复

    2008年09月27日 星期六 3:29 下午

  17. lovelywcm 说:

    @WindyWinter 我的51.6~~~

    其实,我是来测试图标的 =_=!

    回复

    2008年09月27日 星期六 7:37 下午

  18. zx.longinus 说:

    其实,很多人觉得 linux 下 firefox 速度慢,完全是 nvidia 显卡驱动的问题。nvidia 一日不提高 linux 驱动的 2d 性能,fx 就会慢一日(而且越来越多的软件会慢,像 KDE4)。这种情况,如何修改 fx 都是缘木求鱼。

    回复

    2008年09月27日 星期六 9:04 下午

  19. dogfox 说:

    kde4下还不如opera速度快,即使你删除.mozilla又如何?你的扩展在~/.mozilla/firefox/*.default/extensions/下,书签在~/.mozilla/firefox/*.default/bookmarkbackups/下,保管好这2样就ok了

    回复

    2008年09月27日 星期六 9:19 下午

  20. lovelywcm 说:

    SQLite Manager 很强大啊。
    urlclassifier3.sqlite 50M+ 压缩到了20M+;
    places.sqlite 16M+ 压缩到了900多K…

    回复

    2008年09月27日 星期六 10:08 下午

  21. SecretZero 说:

    汗~我已经麻木了。

    实在太卡。

    回复

    2008年09月27日 星期六 11:03 下午

  22. xxx 说:

    认为是Nvidia不良2D驱动造成的 +1
    另外就算把整个Firefox含设置档都丢到tmpfs, 肯定也不会有明显的速度差异,在下试过很多次啦,不信你拿个码表量量看!

    另外OS本身也会造成差别

    FX任何Linux版本的速度都肯定是输Windows版本的一大截!

    但偶听说Fx 在 Arch / Gentoo上头都远没有Ubuntu那么卡

    回复

    2008年09月27日 星期六 11:17 下午

  23. xxx 说:

    这个网页的OS判断有问题
    我是用Ubuntu的 (FX是官方的bin档,非apt-get安装)
    却没有显示ubuntu logo

    回复

    2008年09月27日 星期六 11:23 下午

  24. meto 说:

    我也来测试图标的,SUSE11+FF
    其实很多人说FF卡的原因基本都在说flash n_n

    回复

    2008年09月28日 星期天 12:27 上午

  25. lovelywcm 说:

    不觉得卡,,,难道是因为我没用过快的?

    其实,最最万恶的,是Adobe!
    系统上唯一一个私有软件,就是它的。
    还经常害死FF。

    BTW. 没有 IceWeasel 的图标么,很漂亮的说。

    回复

    2008年09月28日 星期天 2:33 上午

  26. snailbing 说:

    得,我还没发现啊,原来你这的回复会收集用户信息吖,哈哈哈

    回复

    2008年09月28日 星期天 9:17 上午

  27. snailbing 说:

    我再顺便说一下,fedora的图标真难看

    回复

    2008年09月28日 星期天 9:18 上午

  28. shunz 说:

    有个问题,places.sqlite无法直接用sqlite manager打开,好像是文件被锁定了

    回复

    2008年09月28日 星期天 9:34 上午

  29. icat 说:

    我自己机器上.sqlite数据库有54M..也不卡啊..
    才这么点数据量查询应该速度不慢的

    回复

    2008年09月28日 星期天 12:04 下午

  30. wangjl 说:

    看了这个文章我决定挂个监视系统的APPLET,用了一段时间发现果然FF是linux下面一切不稳定的根源阿,现在主要用OPERA了,连compiz都没有再崩溃过,FF只在开发的时候用。

    回复

    2008年09月28日 星期天 1:04 下午

  31. xinzhi 说:

    地址栏的数据才叫大,上100M。

    回复

    2008年09月28日 星期天 1:45 下午

  32. channon 说:

    我也测试一下

    回复

    2008年09月28日 星期天 1:45 下午

  33. channon 说:

    呵呵,arch测不出来嘛?还是arch没有标识系统名称?

    回复

    2008年09月28日 星期天 1:46 下午

  34. solary 说:

    FF有时开二十几个标签页都不卡,可是对于花哨的网站特别容易卡,可能真的与flash有关。

    回复

    2008年09月28日 星期天 2:27 下午

  35. 如是 说:

    urlclassifier3.sqlite这个文件确实很大,不知道是干什么用的?

    回复

    2008年09月28日 星期天 6:00 下午

  36. ranod 说:

    可以? xp行么

    回复

    2008年09月28日 星期天 6:15 下午


  37. [...] News, Movie News, Music News, TV News – PopEater • VoxCards: Greeting Cards With Voice • 彻底优化让Firefox不再卡 • Bloglovin: Blog Reading Made Easy • The 7 Weirdest and Wackiest Uses for WordPress • The [...]

    2008年09月28日 星期天 7:57 下午

  38. Hobart Lin 说:

    现在主要用opera

    回复

    2008年09月29日 星期一 2:41 下午

  39. our1944 说:

    测试图标,嘿嘿

    回复

    2008年09月29日 星期一 6:47 下午

  40. z.r.x 说:

    同楼上

    回复

    2008年09月29日 星期一 11:37 下午

  41. staywizu 说:

    15M 只有第一次用地址栏会小卡一下

    回复

    2008年09月30日 星期二 1:47 上午

  42. zyhong 说:

    Firefox 吃内存一直是个问题阿,不过越来越好了 :)

    回复

    2008年09月30日 星期二 12:16 下午

  43. song 说:

    LDCN太久沒更新了吧?

    回复

    2008年10月01日 星期三 12:18 下午

  44. qi 说:

    更新很慢阿

    回复

    2008年10月01日 星期三 2:13 下午

  45. SecretZero 说:

    用了后还没有明显改善,还有其他方法吗?
    “把FireFox的Cache和./mozilla放到tmpfs去或者干脆把firefox的运行目录也放到tmpfs中,速度才会有飙的感激。”
    具体是怎么做呢?

    回复

    2008年10月01日 星期三 7:14 下午

  46. abc 说:

    我也测试一下图标

    回复

    2008年10月02日 星期四 2:04 上午

  47. abc 说:

    测试图标

    回复

    2008年10月02日 星期四 2:06 上午

  48. lll9p 说:

    博主去旅游了吧?十一回来应该更新了吧

    回复

    2008年10月02日 星期四 11:15 上午

  49. portrayer 说:

    我也想来测试图标。。。

    回复

    2008年10月02日 星期四 9:52 下午

  50. Linus Z 说:

    我这个呢?

    回复

    2008年10月03日 星期五 12:40 上午

  51. Flying 说:

    楼主这个方法不妥。起码在我机上的情况跟楼主描述的问题就完全不吻合。我这边主要是Flash(特别是Flash小广告)和JavaScript的问题。

    还不可以这么早下定论……

    回复

    2008年10月03日 星期五 7:48 上午

  52. neveta 说:

    flash卡是肯定得了,最好的办法是尽量别开。。。。

    回复

    2008年10月03日 星期五 7:33 下午

  53. Vincent 说:

    测试图标

    回复

    2008年10月06日 星期一 9:21 上午

  54. Moses 说:

    测试 :-)

    回复

    2008年10月08日 星期三 9:33 下午

  55. Stanley 说:

    方法不错,收藏。

    回复

    2008年10月09日 星期四 5:36 下午

  56. lun 说:

    更新到3.1了,好多扩展不能用,希望FX在内存上能有更大的改进。

    回复

    2008年10月09日 星期四 10:30 下午

  57. yangleecool 说:

    好吧,我是nv的卡,arch,之前ff超级慢,切换标签的时候鼠标都会卡。。。换了swiftfox快乐不少。。。

    回复

    2008年10月12日 星期天 9:25 上午

  58. test brown 说:

    我是来测试os的

    回复

    2008年10月16日 星期四 2:29 上午

  59. 测试图标 说:

    嘿嘿

    回复

    2008年10月18日 星期六 2:09 上午

  60. hoho 说:

    一般都是因为flash的缘故吧,现在的网站越做越花哨,我都是直接把flash关掉的

    回复

    2008年10月22日 星期三 6:17 下午

  61. FinalBoy 说:

    测试图标,呵呵

    回复

    2008年10月23日 星期四 6:12 下午


  62. [...] – 彻底优化让Firefox不再卡 中文关键字: 请您留下评论 | [...]

    2008年11月14日 星期五 10:45 下午

  63. soarlin 说:

    使用上述方法优化会造成无法保存书签,如发生这种现象,

    先检查 配置文件夹下 的 places.sqlite 和 places.sqlite-journal 能不能读写, 把权限设好.

    还不行就先 在管理书签里备份书签, 删除上面两个文件, 启动 firefox , 让这两个文件重建, 然后导回刚才备份的书签.

    再不行就只能删除 ~/.mozilla 了, 注意备份好重要的文件包括下载的扩展, 这能解决绝大多数问题.

    摘自Ubuntu中文论坛http://forum.ubuntu.org.cn/viewtopic.php?f=73&t=151144&start=0&st=0&sk=t&sd=a
    作者hecha

    希望对大家有帮助!!!!!!!!!!!!!!!

    回复

    2008年12月02日 星期二 9:15 上午


  64. [...] 的彻底优化让Firefox不再卡 和 galeki的通过压缩数据库加速 Firefox [...]

    2009年01月08日 星期四 4:54 下午


  65. [...] 尽管3.0版firefox有很大进步,但对于我这种firefox重度使用者,仍然是偏慢。在使用了TualatriX介绍的优化方法后,的确好转了很多。但在20个以上的标签页间进行切换,仍然是会出现缓慢的现象。于是狠下心来,将主目录下的 .mozilla 目录搬到内存上,发现切换标签页缓慢的现象还真的消失了!使用了一个多月,现在我打开30个以上的标签页也不会再慢下来了,感觉非常好! [...]

    2009年01月25日 星期天 3:01 下午

  66. dragonbbc 说:

    深有同感,一直在找解决的办法,终于找着了,感谢分享

    回复

    2009年02月10日 星期二 9:56 上午


  67. [...] 今天在玩聚SR的推荐里发现了这篇《彻底优化让Firefox不再卡》(是篇去年9月的旧文不知道怎么又冒头了),以前就深感Firefox用的时间长了就会变卡,怎么搞都没用,只有重做一条路,于是乎就想试试看。 [...]

    2009年04月12日 星期天 10:01 下午


  68. [...] 彻底优化让Firefox不再卡主要考虑限制places.sqlite文件的大小。与此相关的是限制Firefox中urlclassifier3.sqlite文件大小。Linux下pack FF sqlite数据库文件的命令如下。 for f in ~/.mozilla/firefox/*/*.sqlite; do sqlite3 $f ‘VACUUM;’; done [...]

    2009年08月12日 星期三 3:47 下午

留下评论