大道有狐
狐狸大王
狐狸大王
  • UID37815
  • 注册日期2011-11-19
  • 最后登录2021-05-07
  • 发帖数455
  • 经验270枚
  • 威望0点
  • 贡献值156点
  • 好评度33点
  • 社区居民
  • 忠实会员
阅读:3758回复:11

我所理解的firefox8.0的常见问题及可能原因

楼主#
更多 发布于:2011-11-30 01:29
今年firefox加快升级版本一直到8.0以后,似乎有不少人遇到了各种各样的问题。浏览国内外的几个火狐论坛和支持网站,综合各种信息总结如下,作为使用心得供大家参考讨论。如有任何错误请不吝赐教,批评指正。

1. 网页打开异常,有四种情况:
    a. 在启动firefox后打开网页“困难”,尤其是刚启动完firefox的初始阶段,选择一个书签或在地址栏输入一个网址打开,较长时间没有反应,需要刷新甚至反复刷新后才能正常载入。
    b. 在地址栏输入一个网址打开没有任何反应,有时只显示一个网站的favicon就停止了。
    c. 完全打开某些网页的时间较长,标签中表示连接状态的图标不停地转,很长时间才能完成页面载入。某些网页甚至似乎永远无法“完成”载入,状态栏有一个连接似乎永远都无法结束,部分状态栏上会显示一直在连接某个网站。
    d. 某些页面显示异常,图片、帧无法正常载入,需刷新后才能正常显示。
  
2. 性能
    a. 网页打开的速度
    b. 网页中的flash视频、游戏等卡顿不流畅、花屏,有时flash崩溃
    c. 其他非flash的音/视频等卡顿不流畅、花屏(如CNTV直播)

3. firefox某些菜单功能异常
   如有时清除历史记录时间非常长,或是在菜单栏选择清除历史记录,弹出chrome://????.js:???信息,有时甚至导致windows直接崩溃、蓝屏、重启。

4. 某些附加组件的异常
    包括插件plugin(很多问题与上面提到的“性能”重合--尤其是flash等plugin),扩展addon和主题theme等(如果有firefox新人是分不清插件和扩展,请查看这里的一个置顶帖补课吧https://www.firefox.net.cn/forum/viewtopic.php?f=5&t=25314)。

那么这些问题是怎么引起的呢,很多人会说以前用的某个版本没有这个问题啊,那一定是firefox8.0有问题。为了搞清楚问题可能的来源,仔细测试观察了正式版8.0、beta版9.0xb、aurora版11.0a1、苍月pale moon8.0版,对比chrome等其他浏览器,发现引起这些问题的主要原因似乎有以下几个:

1. firefox 3.6.4后引入的plugin-container机制的影响
   以windows平台为例,firefox3.6.4以前的版本运行firefox只启动一个firefox进程,所有的扩展、插件都由firefox进程控制。而在3.6.4版本后firefox引入了plugin-container机制,firefox启动后缺省(说的是类似安全模式下不带任何扩展和主题启动)只有一个firefox进程,当用户浏览的页面需要调用一个插件plugin的时候才启动一个plugin-container进程,在这个独立的进程内执行插件的功能。
   以我的配置为例,我的firefox上安装了foxtab这个扩展,启动firefox后,firefox程序会先启动一个firefox主进程,这个主进程发现安装了foxtab这个扩展,而且我把foxtab的top sites设成了firefox的主页,于是就运行foxtab;而foxtab这个扩展是需要adobe flash player这个插件才能运行的,于是就再启动一个plugin-container进程来运行这个插件,这时任务管理器中就存在了firefox和plugin-container两个进程了;再在另一个标签页中打开apple.com的网站观看apple产品介绍的一个视频,就会在任务管理器中发现又启动了一个plugin-container,这是另一个插件quicktime plugin运行的进程;如果又在另一个标签页中打开map.google.com,并且选择了earth视图,就会又启动一个plugin-container进程,用来运行google earth plugin这个插件,而运行这个plugin-container运行插件后又会唤起一个独立的geplugin.exe进程(这个进程和firefox本身一点关系都没有,是google earth plugin这个插件从我安装的google earth的目录下找来运行的)。如果你安装了更多的插件plugin,访问了会唤起这些plugin的网页,就会有更多的plugin-container进程产生。而且即便关闭这些网页,这些plugin-container进程仍会长时间驻留内存。
   之所以如此不厌其烦地说明plugin-container的机制,一是为了向仍不了解扩展和插件区别的朋友们解释清楚在没有任何扩展运行的时候是可以运行插件plugin的,二是为了让朋友们深入了解这个机制可能引起的问题。当你初次启动完firefox尚未访问任何网页时,你也许不知道这时可能有某个plugin已经开始在运行了,为了运行这个plugin还可能会占用很多CPU,导致你认为一个本该“空闲”的firefox为什么迟迟不去打开一个书签或地址这种问题--因为主进程firefox可能"抢"不到足够的CPU来运行!同样的道理,当你在运行一个flash视频或游戏的时候感觉卡顿、碰到花屏的时候,可能就是运行adobe flash player这个插件的那个plugin-container进程无法获得足够的CPU来运行。
   但是大家可能还是会有疑问,为什么以前用过的某个firefox版本没碰到现在的问题呢?不说3.6.4以前的单firefox进程,还记得firefox在7.0版本后宣布的“大幅改善了内存使用”,“提升了性能”等消息吗?firefox7.0后做了什么改进呢?首先明确我相信是firefox有改进的!但部分用户的感觉恰恰相反是不是?我能力有限,无法深入去解读firefox的源代码,只能做以下可以“说得通”的猜想(有些不完全是猜想,而是可以简单观察到的事实)。
   a. firefox为了解决很多人反映的firefox启动比其他浏览器慢的问题,采用了某些技术以达到尽可能快地在启动后显示firefox的界面,而把一些诸如管理调度plugin-container进程这样的工作放在显示界面出现后在后台继续完成。这么做的好处是大家觉得firefox启动比以前快了,负面的影响则是如前面罗列的问题1中的部分现象,而在firefox稳定运行一段时间后问题1中的现象大幅减少--因为该起来的plugin-container进程都起来了,CPU的利用率下来了;而且即便你停止了一个如adobe flash player的视频,那个对应的进程仍然在运行,下一次调用flash player的时候,firefox不需要再次唤起新的plugin-container进程。
   b. firefox为了减少很多人反映的内存使用偏大的问题,做了“精简瘦身”。而“精简瘦身”除了真正的“精简”还包含着什么?猜想是在核心代码没有大幅改善的情况下大幅减少了firefox主进程进入内存运行时直接带入内存的代码,而只有在需要用到这些代码的时候再从硬盘读取,进入内存执行,执行完后在一定的时间退出内存,逐步回收内存。如果的确是这样的一个机制,我的理解是这个机制本身并没有错,但的确会影响性能,配合plugin-container这个机制,可能会引起问题1、2、3中的某些现象。
   c. 有些功能由plugin-container进程完成,如清理历史记录执行时,会启动好几个plugin-container进程。我观察到最多时内存中有近20个plugin-container,天!对比chrome,人家似乎平时只有4个chrome进程同时在内存运行,很少会看到更多的进程一起出现。为什么要用这么多plugin-container进程来清理历史记录?
    总之plugin-container这个机制也许对大内存,新款多核CPU,独立高端GPU显卡的新款电脑影响不大,但对象我使用的8年前不到1G内存,单核CPU,集成显卡的老旧电脑就可能会有比较明显的影响。

2. flash player的版本的影响
   不同版本的adobe flash player应该还是有一定的差异的,根据我的测试,综合国内外论坛信息,在老旧电脑上似乎最稳定的版本是adobe flash player 10.3.183.11(这个版本是与11.1.102.55在同一天被放入adobe的archive的,完整archive文件大小相差一倍多,很值得问一句为什么不是么?)。flash player在播放视频等应用下CPU利用率是非常高的,
   flash player是比较容易引起混淆的一个产品,adobe公司的flash player产品分为adobe flash player和adobe shockwave flash player,而adobe flash player又有adobe flash player activeX(供IE使用)和adobe flash player plugin(供firefox等浏览器使用--chrome似乎又有独自的嵌入在chrome安装程序中的版本)两个不同的产品。在windows上可以同时独立安装adobe flash player activeX、adobe flash player plugin、和adobe shockwave flash player,其版本可以是不同的;你如果还装了chrome,它用到的是“集成在”自己内部的另外一个版本,和你为windows安装的版本完全无关。当我们安装了adobe flash player plugin,在firefox的插件列表中显示的是什么--shockwave flash!而当我们安装了adobe shockwave flash player,在firefox插件列表中显示的是shockwave for director。这一点当安装的是不同版本时可以很明显地观察到。

3. 其他非flash插件的影响
   quicktime plugin,google earth plugin,CNTVplayer plugin,IE tab plugin,java plugin,adobe acrobat plugin等等,在浏览过程中都有可能被调用过从而进入内存运行,产生新的plugin-container进程。占用更多的内存和CPU,并在关闭页面后长期驻留内存,影响firefox总体性能。

4. 某些扩展的影响
    每个扩展在运行时都有额外的消耗。安装的扩展是否太多?是否强制使用了某些不支持该firefox版本的扩展?使用的扩展是否有bug,是否会影响性能?你对你所使用的扩展真的了解吗?例如,排名第一、最常用的扩展ABP的作者11月17日在bugzilla承认ABP有内存泄露的问题,并在试图解决中;IE tab plus和IE tab v2的差别。。。

5. 用户电脑配置的影响
   如上所述,老旧电脑的CPU、内存也许不能很好适应firefox新引入的plugin-container机制。在某些需要消耗大量CPU、内存的插件plugin运行在plugin-container进程中时,也许会导致firefox性能表现不佳。之所以把这条单独列出,是希望说明任何一个软件都有对其运行环境的要求,“支持、可运行”和“流畅运行”不是一个概念。换了一个版本实质上是换了一个新产品,产品名不变但背后的技术也许是有巨大改变的。

6. 网络条件、设置的影响
   如果用户的网络带宽不足或是不够稳定,会导致firefox或其下唤起的插件进程消耗大量的CPU去尝试连接网络,获取足够的数据包,当CPU使用率上升到一定程度,在firefox界面也会碰到诸如flash视频卡顿、花屏,甚至flash player插件崩溃等问题。我就曾经发现过自己惯常使用的无线网卡的连接速率突然从54M自动下降到24M从而导致flash严重花屏,同时firefox几乎没有反应的情况。
   另外诸如是否使用了国外的DNS用来解析域名,有没有在hosts文件中定义了有问题的记录等等设置都可能会引起一些所谓的“异常”。

7. firefox的不同版本的影响
   不谈习惯尝鲜的朋友们使用的beta、aurora的版本,毕竟这些版本未正式发布,存在bug而且是一定数量的bug是难免的。不同的版本、build都有各自的或正面或负面的影响。完美的版本、build也许不存在。

8. 用户的firefox profile配置的影响
   曾经改动过某些配置吗,特别是进入about:config改动过某些不熟悉的参数,可能一直会对firefox有影响。

9. 网页内容的影响
    访问的网页本身是否有恶意代码,有病毒,定义了某些不稳定而且你不需要的链接?比如www.google-analytics.com,cache.mars.sina.com.cn,而这些链接在某些时候根本无法ping通,firefox又怎么能及时完成页面载入呢?

10. firefox核心代码的影响
   以前发过一个贴,谈到过我个人认为firefox的核心--排版引擎Gecko和JavaScript引擎JaegerMonkey较之google的webkit和V8在效能上似乎仍有一定的差距。很多firefox的老人反对我这个观点,作为firefox的拥趸我理解。但我还是认为作为决定浏览器性能的这两个核心,firefox仍有大幅改进的必要--除非firefox对目前全球逾40%仍在运行WindowsXP的老旧电脑的用户不在乎。除此之外,如何更有效地管理进程、CPU和内存分配使用,特别是管理好plugin-container进程的接口,消除诸如主进程firefox已经退出,而plugin-container进程仍在运行这种明显的bug。

说了这么多该说一下处理的方法了,怎样才能还我们一个“尽可能流畅”的firefox呢?对应引起各种问题的原因我们可以采取一些措施尽可能地改善状况,但也许需要不厌其烦,一一尝试。
1. plugin-container机制引起的问题我们无法彻底回避,如果想排除plugin-container进程“作恶”的可能,可以在about:config中将dom.ipc.plugins.enabled的值改为false,这样就不会唤起任何plugin-container进程了,所有程序都运行在firefox主进程中。最大缺点是当插件崩溃时firefox也会崩溃。这也是firefox采用这个机制的本意吧。
2. flash异常时尝试安装其他版本看是否有改善,过往版本的adobe flash player可以到adobe的archive中找http://kb2.adobe.com/cps/142/tn_14266.html
3. 禁用不必要的插件--比如我把firefox里的google update插件禁了,这个插件启动更新我的本地google程序时搞得firefox基本无法动弹。
4. 碰到问题时用安全模式禁用所有附加组件启动(其实是禁用扩展和主题,并没有禁用插件),一次一个启用扩展/主题看问题是否重现。禁用或卸载不必要或有问题的扩展/主题(我碰到过明显影响的主题theme)。
5. 如有条件可以更换或升级电脑。呵呵,大多数人应该不会去做。
6. 查看网络连接、配置是否有问题或改善的条件,尝试使用不同的网络配置如不同的DNS,看是否有改善。比如使用google的DNS一般可以加快对国外网站的访问,但也可能对访问国内的网站造成一点延时--有时也有惊喜(如访问CNTV直播发现居然在使用美国的服务器,快不少--负载比国内的低吧,呵呵)。用一些切换DNS的小工具会比较方便。
7. 选用最适合自己的firefox版本。个人建议经常喜欢看视频的朋友可以尝试一下pale moon8.0,我的感受是在同等条件下播放flash视频pale moon的卡顿远少于firefox官方版本,就算有卡顿一般也不至于半当中回到视频片头“进入死循环”,花屏和崩溃也减少很多。其原理也许是pale moon技术详解中提到的减少了http and dns requests吧。
8. 检查一下自己是否动过firefox的某些缺省配置,必要时彻底重装一下重建配置。
9. 不去访问那些怀疑有问题的网页,把一些不必要的引起“怪事”的链接用hosts中定义为127.0.0.1的方式“屏蔽”掉。
10. 养成良好的习惯、建立合理的期望值。比如我在用CNTV插件看网络电视直播的时候不会继续打开一个视频网站浏览,也不会因为firefox性能有所下降而怒斥firefox是个烂东西,因为我知道一个CNTV直播的plugin运行吃掉我60-70的CPU,导致打开某些网站时稍慢是很正常的。上网高峰时如果是共享带宽的,浏览速度减慢也不奇怪。

如果做完这些尝试仍然不能满足你的要求,那基本就是属于两种情况,一是任何一个浏览器在你的电脑上也达不到你要求的性能,因为你所访问的网站和数据源本身就如此--这时只有放低期望啦;二是其他浏览器效果还不错,唯有firefox不行,这样也许只有等待firefox的机制彻底完善、核心代码彻底重写了,推出后续强有力的版本了吧。老实说,至少nightly版的11没给我树立这个信心。呵呵,耐心等待吧。毕竟firefox在让我们一点苦恼的之外也带来了很多其他浏览器所没有的功能。
至察不明 Lollipop-->Marshmallow
dongyuanxun
非常火狐
非常火狐
  • UID28632
  • 注册日期2009-04-19
  • 最后登录2013-02-14
  • 发帖数898
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
1楼#
发布于:2011-11-30 01:29
pale moon的补丁根本就没有什么减少http and dns requests
他的补丁主要就是把FF的图标改成自己的和把CXXFLAGS的fastmath禁用
云南妈妈网
火狐狸
火狐狸
  • UID37460
  • 注册日期2011-09-30
  • 最后登录2022-01-21
  • 发帖数128
  • 经验58枚
  • 威望0点
  • 贡献值66点
  • 好评度0点
2楼#
发布于:2011-11-30 01:29
dongyuanxun:pale moon的补丁根本就没有什么减少http and dns requests
他的补丁主要就是把FF的图标改成自己的和把CXXFLAGS的fastmath禁用
回到原帖

请问下你签名的火狐使用起来怎么样呢?
kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2022-09-22
  • 发帖数9186
  • 经验397枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
3楼#
发布于:2011-11-30 01:29
云南妈妈网
请问下你签名的火狐使用起来怎么样呢?
回到原帖

我用过,速度是要快一点,不过后来官方也出PGO了。再后来官方每夜版就已经很快了于是我又用回去了。

楼主写了很多,要慢慢拜读一下。
Waterfox Current和Firefox Nightly都用,逐渐走出XUL扩展依赖
楠樟绫
小狐狸
小狐狸
  • UID37887
  • 注册日期2011-11-30
  • 最后登录2012-04-04
  • 发帖数1
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
4楼#
发布于:2011-11-30 01:29
其实我很想问问,问题1有什么比较好的解决办法
dawlen
狐狸大王
狐狸大王
  • UID34286
  • 注册日期2010-10-20
  • 最后登录2015-05-28
  • 发帖数311
  • 经验15枚
  • 威望0点
  • 贡献值8点
  • 好评度0点
  • 社区居民
5楼#
发布于:2011-11-30 01:29
楼主说的几个现象确实是有!
个人体会,最终解决办法就是升级电脑和网速!
大道有狐
狐狸大王
狐狸大王
  • UID37815
  • 注册日期2011-11-19
  • 最后登录2021-05-07
  • 发帖数455
  • 经验270枚
  • 威望0点
  • 贡献值156点
  • 好评度33点
  • 社区居民
  • 忠实会员
6楼#
发布于:2011-11-30 01:29
dongyuanxun:pale moon的补丁根本就没有什么减少http and dns requests
他的补丁主要就是把FF的图标改成自己的和把CXXFLAGS的fastmath禁用
回到原帖


你说的是pale moon用的http和dns代码和官版一样,的确是的,pale moon的作者也没说他优化了这部分代码。但是pale moon的profile的default设置和官版还是有些区别的。似乎network.dnsCacheEntries和network.dnsCacheExpiration这两个参数的设置在官版里about:config里已经不能修改了。所以pale moon的作者应该没说假话。一般来说老外会夸大,但不会撒谎,尤其是挂在internet上让全球的人看,撒谎马上会有高手来揭穿的。是不是?
至察不明 Lollipop-->Marshmallow
大道有狐
狐狸大王
狐狸大王
  • UID37815
  • 注册日期2011-11-19
  • 最后登录2021-05-07
  • 发帖数455
  • 经验270枚
  • 威望0点
  • 贡献值156点
  • 好评度33点
  • 社区居民
  • 忠实会员
7楼#
发布于:2011-11-30 01:29
楠樟绫:其实我很想问问,问题1有什么比较好的解决办法回到原帖


我做的尝试已经卸载总结的几个处理方法中。其实最大的改变是pale moon的缺省设置帮我完成了修改一些重要的参数。而我并不认为这些参数适用于所有firefox的用户,每个人的最优配置可能都不同。如想深入了解,可以参考以下两个链接,都是老外的英文资料。一个是3.5版本上所谓的“让firefox飞起来”的一些参数设置(官方的说法是这些改变有可能影响性能,但仍值得尝试),二是一本8.0的网上“宝书”,讲解了8.0每个可涉及性能的官方版的参数。用profile manager建个测试profile去试吧。

1.http://www.makeuseof.com/tag/the-ultimate-guide-to-speeding-up-firefox-3-5/--“终极加速指南”
2.http://www.tweakguides.com/Firefox_1.html--tweak“宝书”
3. https://developer.mozilla.org/en/Profile_Manager#Profiles_and_application_versions--profile manager
至察不明 Lollipop-->Marshmallow
dongyuanxun
非常火狐
非常火狐
  • UID28632
  • 注册日期2009-04-19
  • 最后登录2013-02-14
  • 发帖数898
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
8楼#
发布于:2011-11-30 01:29
大道有狐

你说的是pale moon用的http和dns代码和官版一样,的确是的,pale moon的作者也没说他优化了这部分代码。但是pale moon的profile的default设置和官版还是有些区别的。似乎network.dnsCacheEntries和network.dnsCacheExpiration这两个参数的设置在官版里about:config里已经不能修改了。所以pale moon的作者应该没说假话。一般来说老外会夸大,但不会撒谎,尤其是挂在internet上让全球的人看,撒谎马上会有高手来揭穿的。是不是?
回到原帖

network.dnsCacheEntries
network.dnsCacheExpiration
这俩我编译的就能改
官版没道理不能改

我不喜欢第三方编译版乱改标识,虽然FF是MPL授权,但也要尊重一群开源开发者和贡献者
你可以在版权那里写上由谁优化及编译,标题写个后缀也行,犯不着把名字都改没了,关键你还没对源码做什么大的改良及修正,而且做出的有限修正只是放出了源码,别人还得diff一下才知道你到底改了什么,怎么着也不像个程序员做的事

现在的统一认识是pale moon和ayakawa的黄金时期在3.5-3.6时代,现在的版本其实他俩编译的性能和稳定性都乏善可陈,远不如tete009的。
如果有人拿X64版说事的话,诚然tete009没放出X64编译版,不过现在X64编译器bug太多,尤其使能PGO后linker都随机崩溃,所以现在的X64版只跑默认自动编译或者干脆禁用PGO,性能远不如X86版,再说现在主流64位操作系统没见有不支持运行X86程序的。

我现在X64编译跑betterpgo的问题也只是解决了80%,还要在某些地方继续加-GL-
Lawliet
火狐狸
火狐狸
  • UID34414
  • 注册日期2010-11-03
  • 最后登录2017-04-02
  • 发帖数201
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
  • 忠实会员
9楼#
发布于:2011-11-30 01:29
這兩個一直都能改啊
network.dnsCacheEntries
network.dnsCacheExpiration

pale moon有patch可以下了嗎?
我上次去看,只有修改後的源碼可以下而已
而且還要自己diff才知道哪裡被修改了,實在是很不夠體貼...

其實如果要遵循Mozilla MPL協議
只要是有別於官方版的源碼,都不應該繼續使用Firefox LOGO以及Firefox名稱
Mozilla MPL協議很強調用戶體驗的一致性

我上回在綾川的主頁上有看到他分發的patch
可以替換版權宣告還有名稱Logo
可是打上後編譯出來的binary還是維持原本的LOGO跟名稱...
dongyuanxun
非常火狐
非常火狐
  • UID28632
  • 注册日期2009-04-19
  • 最后登录2013-02-14
  • 发帖数898
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
10楼#
发布于:2011-11-30 01:29
MPL协议没规定LOGO和名称,他只比BSD协议窄一些而已,也正是由于MPL协议的限制,Firefox不能使用GPL代码及商业代码,比如libjpeg-turbo正是去除商业代码变成BSD授权后才顺利进入了Firefox组件。

LOGO和名称是mozilla基金会(版权所有)的建议,但并没有强制(特别对个人不强制),也和MPL协议不相关

patch替不替换LOGO及名称在于你使用的编译方法是official的还是unofficial的,当然mozilla肯定推荐非官方使用unofficial,决定权在编译者。
Lawliet
火狐狸
火狐狸
  • UID34414
  • 注册日期2010-11-03
  • 最后登录2017-04-02
  • 发帖数201
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
  • 忠实会员
11楼#
发布于:2011-11-30 01:29
我說錯了...
我說的那些規定是基於Mozilla EULA裡的
例如Ubuntu之前因為對Firefox的修改,讓用戶體驗度不佳
被Mozilla盯上,要求如果必須使用Firefox商標以及火狐狸Logo
必須在用戶第一次啟動時讓用戶選擇接受EULA
如果不要EULA,那就用其它Logo跟名稱替換掉Mozilla註冊的那兩個Logo跟商標
就像Debian的那個IceWeasel一樣
游客

返回顶部