2007-09-28

mldonkey+sancho试用

参考http://forum.ubuntu.org.cn/about42337.html
http://www.haijd.net/doc/read-29.html
http://sparkplugcn.wordpress.com/2007/08/15/%e4%bb%8eemule%e5%88%b0mldonkey/

很多地方说mldonkey比amule如何如何好,而我觉得 amule本身就挺好,下完了最近几个文件后想尝试一下mldonkey

首先我是想编译一个不带 gui的 mlnet, 按照它代码里的readme, 只需简单地./configure然后make就行了,但是我这里却说需要 ocaml (readme里似乎是说只有 gui版本才需要),一开始让它自动下载编译ocaml, 但很慢,于是放弃,改用二进制包。

之后是前端,推荐的是sancho, 我下了个gtk版本的。

再之后按着帖子里的大概弄弄,配置些关于网络的东西,然后再用mldonkey release里带的插件把firefox和mldonkey关联上,需要强调的几点是

1.导入文件似乎只能下载后再本地导入
2.以下命令可以用sachon的console输入,好像也可以用telnet连接mlnet输入
2.用servers命令导入服务器,推荐下载http://www.emule.org.cn/server.met
3.用ov_load命令导入overnet的node列表,推荐下载http://download.overnet.org/contact.dat
4.用kad_load命令导入kad的node列表,推荐下载http://www.emule-inside.net/nodes.dat,也可使用eMule的nodes.data
5.注意把kad和overnet的选项打开,我一开始就忘了。。
6.注意修改最大下载限速,默认是50,太小了


感觉上如果设好了确实挺快,但也没有传说中的那么快,当然可能跟我这里网络环境有关。但是它可以连接多个服务器确实是个创新的想法

2007-09-23

linux 旋转桌面

只需在 xorg.conf里给驱动程序加上

Option "RandRRotation" "on"

然后用xrandr命令即可

ubuntu下pdf打印机

是cups-pdf包,装了就会多一个打印机,用法跟windows下acrobat那个类似.

你还别说,效果真不错。

firefox 中 设置 ed2k与amule的关联

参考:http://forum.ubuntu.org.cn/weblog.php?w=646&previous=10

安装 amule-utils包
然后在firefox中利用about:config添加如下两项

新建一个Boolean,名字为network.protocol-handler.external.ed2k,值为true
新建一个String,名字为network.protocol-handler.app.ed2k,值为/usr/bin/ed2k

2007-09-21

gedit 查看 gbk 编码文件

gedit默认不能正常查看gbk编码的文件, 原因是它第一个尝试utf-8

解决办法是用gconf修改/apps/gedit-2/preferences/encodings/auto_detected,在最前面加入一个gbk即可。

[转] Python的转码

字符串内码的转换,是开发中经常遇到的问题。
在Java中,我们可以先对某个String调用getByte(),由结果生成新String的办法来转码,也可以用NIO包里面的Charset来实现
在Python中,可以对String调用decode和encode方法来实现转码。
比如,若要将某个String对象s从gbk内码转换为UTF-8,可以如下操作
s.decode('gbk').encode('utf-8')

可是,在实际开发中,我发现,这种办法经常会出现异常:
UnicodeDecodeError: 'gbk' codec can't decode bytes in position 30664-30665: illegal multibyte sequence

这 是因为遇到了非法字符——尤其是在某些用C/C++编写的程序中,全角空格往往有多种不同的实现方式,比如\xa3\xa0,或者\xa4\x57,这些 字符,看起来都是全角空格,但它们并不是“合法”的全角空格(真正的全角空格是\xa1\xa1),因此在转码的过程中出现了异常。

这样的问题很让人头疼,因为只要字符串中出现了一个非法字符,整个字符串——有时候,就是整篇文章——就都无法转码。

幸运的是,tiny找到了完美的解决办法(我因此被批评看文档不仔细,汗啊……)
s.decode('gbk', 'ignore').encode('utf-8')

因为decode的函数原型是decode([encoding], [errors='strict']),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常;
如果设置为ignore,则会忽略非法字符;
如果设置为replace,则会用?取代非法字符;
如果设置为xmlcharrefreplace,则使用XML的字符引用。

2007-09-20

rainlendar2.2无法运行的解决

症状:总是说cannot touch ~/.rainlendar2/rainlendar2.ini, 手工touch 也不行

原因:scim与之冲突

解决:安装scim-bridge代替scim, 具体是安装后修改/etc/X11/xinit/xinput.d/scim, 将GTK_IM_MODULE改为scim-bridge即可

2007-09-19

Amarok 不出声音

今天尝试Amarok,是以前非常喜欢的播放器。

但是就是不出声音, 还弹出一个No MP3 Support为标题的对话框。

确定插件安装全后,开始研究它的选项, 最后发现是在Settings--Configure Amarok--Engine--Configure xine Engine--Output plugin处为Autodetect,怀疑是此处问题。
改成alsa后问题解决。

2007-09-18

wine 程序菜单乱码的解决

我原来的locale 除了LC_CTYPE是zh_CN.UTF-8外,其余均为en_US.UTF-8, 但是这时wine的程序的菜单中文都不能正常显示,而程序内部有些中文则能够正常显示

解决方法是设置LC_ALL为zh_CN.UTF-8, 当然可能只改几个就行,但是没有进一步尝试。

2007-09-16

禁止自动运行的注册表项

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoDriveTypeAutoRun"=dword:000000B5

[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoDriveTypeAutoRun"=dword:000000B5

Windows XP 设置 NTFS 文件权限

一般来说直接点右键, 有个“安全”标签,就是了, 如果说不能改, 那么应该点“高级”, 然后去掉“从父项继承那些可以应用到子对象的权限项目, 包括那些在此明确定义的项目”

如果连“安全“标签”都没有,那么应该在资源管理器中选工具--文件夹选项--查看, 然后去掉“使用简单文件共享”。

2007-09-13

再谈声卡识别但不出声的问题

上次在一个关于声卡识别的问题提到了一个关于声卡在设备管理器中能够识别, 但是声音选项中缺说找不到音频设备的问题。

我转的解法是用Plug and Play Software Device Enumerator替换一个已有设备ISAPNP Read Data Port。起初我认为是识别有误,

但后来感到有些不对劲, 觉得那本身是一个正常的系统设备。 虽然能正常工作, 但毕竟不是完美解决方案。 后来再次尝试了上次

也提到的重装Plug and Play Software Device Enumerator的方法:

1.假设windows装在c:\windows下, 将c:\windows\inf\machine.inf, c:\windows\system32\streamci.dll, c:\windows\system32

\drivers\swenum.sys拷到一个临时目录下

2.修改machine.inf,找到[ControlFlags], 把下面一行ExcludeFromSelect=*删去

3.如果现在设备管理器中有Plug and Play Software Device Enumerator, 那么用现在的临时目录给它更新驱动即可,否则依次进

入控制面板->添加硬件, 几次"下一步"后依次选"添加新的硬件设备","安装我手动从列表选择的硬件","显示所有设备","从磁盘

安装", 此时选那个目录, 然后厂商选"(标准系统设备)", 型号选"Plug and Play Software Device Enumerator", 然后安装便可



最后还查到一个解法, 是说在注册表中删除所有swenum的相关项, 然后就能自动识别Plug and Play Software Device Enumerator

了, 不过这个没试过, 不知是否真的可行。

2007-09-12

一个关于声卡识别的问题

环境为Windows XP SP2, 声卡realtek hd audio, 似乎是nvidia的主板

症状比较特别, 是偶然卸了某驱动后发现很多硬件不能用了, 打开设备管理器发现dvd-rom, 声卡等都有黄色叹号, 另外还有一个"Plug and Play Software Device Enumerator" 也是这样。

一开始想用"卸载-重新识别"的方法, 但是那个"Plug and Play Software Device Enumerator"卸掉便一去不复返了。 一开始我没在意, 全心折腾声卡, 但是总是不行, 后来在网上艰难搜索才发现问题就出现在那个"Plug and Play Software Device Enumerator"上。

网上有个从系统目录copy出inf, sys, dll个一个文件, 稍微修改并利用它们安装一个这个硬件的方法。 我没试成功(后来发现是没理解好说明)。 之后在
http://www.softwaretipsandtricks.com/forum/windows-xp/7021-no-sound-says-no-audio-device-but-drivers-there-enabled-working-properly-5.html找到了一种解法, 原文加翻译如下:

1. From Device Manager (be sure to select View/Show hidden devices), find the 'ISAPNP Read Data Port' device from the System Devices list. (Of note: once I successfully repaired this problem, this device no longer appears.)
在设备管理器中(注意选上查看->显示隐藏的设备。(译注:似乎不选也可))找到ISAPNP Read Data Port这个设备(当成功进行下面操作后, 这个设备将不再存在(译注:成功后会由Plug and Play Software Device Enumerator取而代之, 也就是说, 问题应该是对这个硬件的识别问题))

2. Right click the ISAPNP device, and select "Update Driver"
右击那个设备,选择"更新驱动程序"

3. Select "Install from a list or specific location"
选择"从列表或指定位置安装"

4. Select "Don't search. I will choose the driver to install."
选择"不要搜索, 我要自己选择要安装的驱动程序"

5. The step I left out on prior trials: UNSELECT "Show Compatible Hardware"
不要选中"显示兼容硬件"

6. Be sure that "(Standard System Devices)" is selected under Manufacturer.
厂商选择"(标准系统设备)"

7. Under Model, scroll down until you see "Plug and Play Software Device Enumerator". Select this item, and select "Next>".
设备选Plug and Play Software Device Enumerator, 单击下一步

8. You will receive some frightening error message that you should probably disregard.
你将会看到一个警告框, 忽略她。

9. Complete the installation of the driver.
完成安装。

经过实验, 这个方法确实可行, 至少是对我的机器配置。

2007-09-09

跳过linux开机磁盘检查

linux挂载windows分区前总要扫描一下, 我觉得不大必要, 一直想跳过但不知怎么设置。
今天偶然看到了解法, 只需修改/etc/fstab, 把对应行的一列的值改为0即可

初尝 64位 linux kernel

机器是athlon64的, 不跑跑64bit linux实在不过瘾, 于是下了个linux kernel 2.6.22.5自己编译看, 一开始下载是想编译32位的, 但是启动时有点小问题, 中间会卡住, 要不断按开机键才能继续, 挺诡异的, 但是64位的编译好后竟然没有这个问题了, 比较有趣。

在编译前进行配置时倒是出了些问题, 由于我要在32位系统下编译64位内核, 是交叉编译, 不是很熟练, 查了半天在发现应该在make是加入ARCH=x86_64的参数。(ubuntu里习惯称amd64, 但linux内核里叫x86_64)

另外configure的时候也有问题, 我直接make ARCH=x86_64总报错, make ARCH=x86_64 config也不行, 后来想到, 现在的.config是按i386配置的, 可能跟64位的有冲突, 于是用make ARCH=x86_64 oldconfig重新配置, 别说, 还真问了几个新问题, 之后再make ARCH=x86_64就可以编译了, 最后别忘了编译模块,再都安装就好了。

现在运行挺不错, 但是aptitude不能找到64位程序, 还有待研究。

2007-09-03

dojo学习笔记 (一)

最近几天开始学习dojo 0.9.0, 主要是看它的源码和测试样例, 以下是这几天的研究成果

一、 dojo 概述
我用的是dojo 0.9.0, 下载压缩包解压后有四个文件夹, 依次为:
dijit: 提供了很多ui控件, 被称为widget。
dojo: 提供了很多跨浏览器的实用函数,
dojox: 似乎是提供了一些插件性质的东西, 我只对dojox.flash有点了解
util:里面只有个doh, 功能不明

二、 dojo库的使用
首要的是在html里导入dojo.js文件, dojo加载支持很多参数, 其中我目前用到的有parseOnLoad和isDebug. 设定参数的方法有两种, 一种是在导入dojo.js前通过javascript建立一个对象djConfig,包含要设定的键值对,如djConfig={isDebug:true}; 另一种是在<script>标签里加入djConfig属性,值为JSON语法的键值对, 如<script djConfig="isDebug:true" src="dojo.js"></script>
一开始我对于后一种方法感到很神奇, 起初我以为javascript可以获得自己所在标签的信息, 后来看dojo.js, 查找djConfig, 发现它一上来就判断djConfig是否存在, 否则就建立新值,这时我认为djConfig标签可以作为一个对象在javascript中可以访问, 但亲自尝试后发现并不行。于是我甚至认为这是dojo的一个bug, 但在随后的研究中我发现它确实起作用,于是不得不再认真得看dojo.js(当然是dojo.js.uncompressed.js), 发现原来它会遍历所有script标签,并对导入dojo的标签的djConfig进行处理, 实际上就是加上一对括号然后eval一下。 此时我才恍然大悟。
再说说那两个参数, isDebug不必多说, parseOnLoad是指定dojo.js是否在html加载完毕后进行扫描,识别通过标记方法声明的对象(比如dijit的widget就都支持这种声明, 十分方便)如<div dojoType=dijit.form.Menu> </div>

三、dojo库的几个常用函数
1.dojo.connect(source_obj, event, func)或dojo.connect(source_obj, event, target_obj, target_method)
这个函数相当于把自定义的函数绑在source_obj.event上, 当此事件发生(即这个函数被调用)后,便会调用source_obj.func或target_obj.target_method, 而传进去的参数跟source_obj.event得到的参数相同。
这个函数十分方便, 也是我最早听说的几个dojo实用函数之一, 但关于其实现方法, 我是看了源码才明白。

2.dojo.provide(package_name)
这个是声明当前js提供的包名, 与dojo.require配合使用

3.dojo.require(package_name)
这个指定导入一个包, 这也是十分有用的, 一个是它非常智能, package_name一般为A.B.C的格式,我们暂且称A为bass_name, 它会根据A找到基准目录, 默认是按dojo.js所在路径加上../A,不过也可以用dojo.registerModulePath注册自定义的路径(dojo已内置了一些包的路径, 如dojo, doh)。有了基准路径后, 它会首先尝试B/C.js, 看是否成功, 否则再试B.js,如果有多极, 就逐层往上退。 如果一直找不到就报错。
另一个有用的地方是它可以实现动态导入和避免重复导入, 这一方面非常适合动态的Ajax, 又保证了性能。

4.dojo.declare(class_name, base_class, properties)
dojo提供的一个OOP机制, 而这个是声明一个新类, 举例说明:
dojo.declare("son", father, {
constructor:function(){
alert("hi");
}
});
这样就声明了一个名为son的类, 父类为father, 以后可以用 new son()来创建一个实例
另外base_class可以为null或数组, 后者时,里面必须全为function对象, 以后第一个元素为新类的父类, 其他类只是为了继承其方法。
关于继承, 首先constructor是构造函数, 不会覆盖父类的构造函数, 并且父类的构造函数会被自动调用, 而其他函数则会覆盖父类的。
此外, properties中也可以定义成员变量。

5.dojo.body(), dojo.doc
前者返回body的DOM node, 后者是当前document对象, 一般就是当前的document, 不过由于可以设置整体的上下文, 如dojo.setContext, 所以在dojo框架下应该尽量使用dojo.doc

6.dojo.byId(id_string)
应该比document.getElementById有所增强, 但无论如何, 精致的名字也是诱人之处。

当然还有很多其他函数, 比如dojo.io.bind。 只是我现在还没看到网络通信部分, 等下次再补上吧。

四、dijit库的使用
dijit库的函数我主要是用的dijit.byId, 注意他和dojo.byId的不同, 这里是根据id返回已经生成的dijit的widget对象, 并不是DOM node

dijit提供的控件主要有两种生成方法, 一种是用javascript直接生成, 如new dojo.form.Button(null, node), 另一种是在html中作标记, 如<button dojoType=dijit.form.Button label="button"></button>
关于其生成widget的机制, 我目前所知是它从原始DOM节点中获取信息, 如id, label, dojoType之类, 然后据此生成一个widget, 它本身应该是绑定了一个自己的DOM节点, 最后再将它替换原始DOM节点。

根据dijit.js,在创建一个widget过程中会调用如下几个函数
postMixInProperties: 刚刚从原始节点读入信息后调用, 如果扩展已有widget,可通过connect此函数来为widget对象添加新的属性(每个widget只从原始DOM节点(可用this.srcNodeRef得到其引用)中获取需要的节点, 其他的一概抛弃, 如果需要扩展, 要在销毁前得到它,而这里所列的几个函数中,仅有此函数执行时srcNodeRef尚未背销毁)
buildingRendering:刚刚为当前widget创建好DOM节点时调用
postCreate: 当前widget已创建好并放入UI后调用
startup: 所有widget都创建好后依次为每个widget调用此函数

尽管dijit提供了非常丰富的控件, 但也未必就能满足全部需要。 因此有时需要在现有控件基础上进行扩展。这时上面三个函数就显得非常有用。 不过需要注意的是, 用dojo.declare声明一个子类时, 不能直接重定义上面三个函数,否则父类的方法会被覆盖, 而且dojo似乎没有提供super之类的属性。 我的解决方法是用dojo.declare声明时仅添加新函数,而之后再用dojo.connect对已有函数进行扩展。 如果用此方法, 需要注意, 如果新类叫childClass, 那么应该connect childClass.prototype的方法, 我一开始忘了这一点, 结果怎么都不起作用。

五、其他
dojo与Firebug支持得非常好, 它能自动识别Firebug并与其交互, 再配合Firebug的强大功能, 开发javascript 轻松了很多

六、总结
通过几天的学习, 我对dojo库的基本思想和基本实现方法都有了些了解, 也十分欣赏和钦佩它的结构。它充分利用了javascript的灵活性, 创造了很多异想天开般的设计, 令我大开眼界
就先写这么多, 能些的也就是这么多了。 随着学习的深入, 我会再补充这个学习笔记的。

2007-09-01

linux 下 驱动 Acer 笔记本 Realtek ALC268 声卡

我这个笔记本是Acer的, 声卡为nvidia mcp67集成, 解码器为realtek alc268
刚装上ubuntu 7.04后声卡能够识别, 有nvidia unknown device 和alc268字样, 但是不能发声。
起初认为是声卡没有识别好, 但是装了最新的alsa1.0.15rc1和ossv4都没效果, 了解了update-pciid才知道其实已经识别了声卡, 而问题出现在 realtek alc268上。

realtek官网上也有个驱动, 下了一看,里面原来也是alsa1.0.14, 只是驱动版本号比较特别。装上后仍不起作用。


在网上搜了很多文章, 其中这个比较好
Bug #116326 in linux-source-2.6.22 (Ubuntu): “No audio INTEL HD audio - Realtek ALC268 codec - Toshiba A205-S4577”

看来这个问题主要出在新型的笔记本上。 另外我还得知了alsa1.0.14对alc268支持的不是很好。上面那个链接里, 中间有几个人帖上了for realtek的alsa补丁, 看样子能起作用。 他们说1.0.14上支持的声卡列表里没有alc268。还有一点, 提出这个问题的人是toshiba的笔记本, 下面帖子中多次提到了model=toshiba这个参数, 于是我自然想到有没有for acer的。

于是我把目光放在了1.0.15rc1上, 看changlog里赫然有个alc268, 而其中专门多了一个acer笔记本的model。 我顿时眼前一亮。 有戏!

再看一下alsa的安装说明, 应该在snd_hda_intel模块加载时加上model=xxx 的参数。 那我这情况自然是在/etc/modprobe.d/options里加一句options snd_hda_intel model=acer

然后重启(可能仅重加载snd-hda-intel也可), 听到了熟悉的ubuntu启动声音。 啊哈哈哈!!!

update-pciids

今天学会了这个命令, 主要是lspci时一大堆unknown, 而驱动里明明支持那些id, 但是就是不能显示正确的字符串, 后来知道了update-pciids这个命令, 可以下载到最新的pci id, 之后lspci少了几个unknown. 此时才恍然大悟, 原来lspci显示的字符串跟驱动没有关系, 而是自己有一个索引。

[转] Firefox 加速技巧

转载请注明出处:www.NiDaYe.orG,谢谢

作者:Roby Liang

很早很早以前曾经写过一篇“Firefox 终极加速”的文章,可以通过手动修改 user.js 文件来获取理论上的最佳浏览速度,后来发现这种修改方式对于普通用户来说真的有点勉为其难,而且国内的网络环境并不尽如人意,我们所做的 js 优化修改在臃堵的网路上显得那么渺小与无助。

不过聊胜于无,让我们暂且先把这些复杂的优化操作变的简单一点,然后再来亲自感觉一下这些已经在网络上流传了很久的提速技巧吧。下面的操作我们都在 about:config 里进行。在 Firefox 的地址栏中输入 about:config,让我们开始提速吧。

  • network.http.pipelining


  • 在 Filter 中输入 network.http.pipelining,双击赋值为 true,默认为 false。如果没有找到这个键值,可以右键新建一个 Boolean,把她赋值为 true 就 OK 了。

    还 是像我在从前解释过的那样,激活这个键值之后,Pipelining 同时发出成倍数的连接请求,从而达到提升连接速度的效果。网络上的大多数网站都是基于 HTTP 协议,而 HTTP 1.1 可以支持多线程的连接请求,通过这个操作可以减少 Firefox 载入网页的时间。不过并不是所有网页所在的服务器都支持这种操作,所以当你修改键值之后却看不到一点实际效果的时候,请不要对我破口大骂。

  • network.http.pipelining.maxrequests


  • 在 Filter 中输入 network.http.pipelining.maxrequests,双击并赋值为 8,默认键值为 4。

  • network.http.proxy.pipelining


  • 在 Filter 中输入 network.http.proxy.pipelining,双击并赋值为 true。

    这两条优化的道理同上,这里就不再多解释了。

  • network.dns.disableIPv6


  • 在 Filter 中输入 network.dns.disableIPv6,双击并赋值为 true。

    IPv6 把 IP 地址由 32 位增加到 128 位,从而能够支持更大的地址空间,当用户在终端向一个 IPv6-capable DNS 服务器发送连接请求时,也许服务器端会错误的返回给用户一个 IPv4 地址。而 Firefox 可以对这一切明察秋毫,不过在 Firefox 纠错的同时也必然会导致信号的延迟,所以这里我们把她赋值为 true,禁用掉她。

  • content.interrupt.parsing


  • 右键新建 Boolean 值,键名为 content.interrupt.parsing,赋值 true。

    默 认这个键值并不存在。我们激活这个键值之后,当目标网页载入时,Firefox 会根据一定频率打断解析的过程,不断的向用户反馈她所收集到的网页信息,有点像流媒体的意思。这时的 Firefox 很聪明,不会一根筋的一直钻牛角。在下面的内容中我还会具体讲一下这个键值的魅力所在。

  • content.max.tokenizing.time


  • 右键新建 Integer 值,键名为 content.max.tokenizing.time,赋值 2250000。

    这 个键值的作用其实就是指定一个循环事件的处理周期,这里的单位是微秒,要是我没有算错的话。理论上当我们将这个值取的越小,网页就会从视觉上载入的越流 畅,因为 Firefox 会在很短的单位时间里反馈回解析到的网页信息。可是这样无疑延迟了网页整体载入的时间,所以在这里我们不妨将这个周期取的大一些,理论上可以加速网页的载 入。

  • content.notify.interval


  • 右键新建 Integer 值,键名为 content.notify.interval,赋值 750000。

    载 入一个网页其实也是一门很大的学问。让我们来放一个慢动作,我们姑且先把在终端第一次收到的网页信息很不专业的叫做预载入页面吧,这个页面有可能是不完整 的图片或者文字,或者别的媒体文件。从我们第一次向远端主机发出连接请求到我们在终端收到这个预载入页面花费的时间,就是这里我们要定义的键值。理论上当 我们将这个时间设置的很低时,肯定会更快的拿到所谓的预载入页面,可这是一种杀鸡取卵的做法,这样无形中反而增加了我们整体页面的载入时间。按照官方的说 法,低于 100,000 将会降低 Firefox 的性能,那好吧,那我们把她彪到 750000 吧。

  • content.notify.ontimer


  • 右键新建 Boolean 值,键名为 content.notify.ontimer,赋值 true。

    为了使我们上面设置的 750000 微秒生效,还需要把这个键值激活。只有这两个键值配合,才会起作用。

  • content.notify.backoffcount


  • 右键新建 Integer 值,键名为 content.notify.backoffcount,赋值 5。

    这 个键值控制 Firefox 的内置计数器在归零之前载入页面返回的次数。我们将目标网页分成好多个部分进行下载,每下载完一个部分,计数器归零一次。-1 就是没有限制,值为 0 时这项功能被禁用。这里我们将她设置成 5, 当返回的次数达到五次而这部分网页还没有完全下载完时,那么剩下的没有下载完的网页内容将不会再按照我们预告设置的周期,像之前的五次那样一点一点的搬运 回来,而是会一次性的下载完。也就是说在这个部分的网页下载过程中,Firefox 一共向我们反馈了 6 次信息,前 5 次的时间间隔是我们在上面的键值中设置的周期 2250000 微秒,而第 6 次也就是最后一次则没有时间限制,什么时候把剩下的下完了,什么时候反馈回来。

    只有当我们在上面提到的 content.notify.ontimer 键值为 true 的时候,这里的设置才会生效。

  • content.switch.threshold


  • 右键新建 Integer 值,键名为 content.switch.threshold ,赋值 750000,也就是四分之三秒。

    在 前面我们提到了一个键值 content.interrupt.parsing,通过激活她实际上我们可以在载入页面的过程中跟 Firefox 产生互动,毕竟我们每一个人的心里都充满了爱。把 content.interrupt.parsing 激活后当页面载入时 Firefox 会有两种操作模式:高频和低频中断模式。使用高频模式时,网页回馈的频率也很高,我们坐在显示器前看到的网页载入过程也会更加的平滑。低频时网页回馈的频 率相对比较低,可是这时反而加快了网页载入的时间。当我们移动鼠标或者触击键盘时,高频模式被激活。在经过某一段时间我们没有碰鼠标和键盘,程序没有接到 鼠标和键盘发出的任何指令时,Firefox 就会自动进入低频模式工作,而这所谓的某一段时间,就是我们这里要指定的值。

  • nglayout.initialpaint.delay


  • 右键新建 Integer 值,键名为 nglayout.initialpaint.delay,赋值 0。

    这里实际上延迟了整个网页的显示速度,但是因为用户更喜欢在整个网页完全截入之前就开始阅读网页 (就像流媒体那样),所以在这里可以把值调为零,加速用户阅读网页的速度,有时候阅读速度和载入速度并不是成正比的。

    今天先写这些吧。在网络状况稳定的情况下这些优化的确是会起到一些效果的,并不光是心理作用,大家在为自己的浏览器提速时,也可以稍微参考一下。