我想测量一些软件启动需要多长时间。
我知道该命令time
,但对于 Firefox(Debian 上的我是iceweasel),该命令仅打印我打开 Firefox 的时间。如果我启动:
$ time iceweasel www.google.com
我只有在关闭 Firefox 后才会有一个启动时间,这个时间只会指示我让 Firefox 打开了多长时间。例如:
real 0m50.565s
user 0m4.276s
sys 0m0.248s
我怎样才能确切地知道 Firefox 需要启动多少?
答案1
这是很hacky并且无法编写脚本的。
Firefox 可以通过命令行运行 javascript,如下所示:
firefox "javascript:alert(Date.now())"
这将打开 Firefox 并运行 javascript,弹出一个消息框,其中包含当前纪元时间(精确到毫秒)。
您可以在命令行中获取纪元时间内经过的毫秒数
date +%s%N | cut -b1-13
所以要回答你的问题,请运行
date +%s%N | cut -b1-13; iceweasel "javascript:alert(Date.now())"
然后用 Firefox 中的数字减去终端中的数字。这给出了 Firefox 打开和显示一些基本 JavaScript 所花费的毫秒数。
资料来源:
答案2
您可以使用一些可以获取与 PID 关联的窗口 ID 的工具,并等待该窗口被创建。先前启动的程序的进程 ID 在变量中可用$!
。
举个例子 - 使用wmctrl
可以获取所有窗口的列表并检查其中是否有任何窗口是由给定的 PID 启动的:
$ wmctrl -lp
0x00e00003 -1 397 jjmach sawfishpager
0x01200003 6 399 jjmach wmctrl -lp jimmij@jjmach: /proc
0x0180004b 0 655 jjmach [email protected]
0x02800078 7 680 jjmach How to measure Firefox's startup time? - Mozilla Firefox
窗口 id 位于第一列,进程 id 位于第三列,因此我们需要通过管道将其连接到awk
以检查给定进程 id 是否具有关联的窗口。
wmctrl -lp | awk -v pid="$!" '$3==pid{print "Window is created with id "$1}'
现在我们需要将其放入某个循环中并测量上述命令成功结束的时间:
firefox & time (while wmctrl -lp | awk -v pid="$!" '$3==pid{exit 1}'; do :; done)
因此,我们启动 Firefox 并立即启动一个循环,该循环在 body 中不执行任何操作 ( ),并在返回非零值:
时结束。awk
答案3
- 开始一个监听网猫在后台
- 调用 firefox 进行连接
- 用内置的 bash 等待它
wait
。 - 最后杀死一切
nc -l 64738 & firefox http://127.0.0.1:64738 & wait <...yet to be solved that only the nc should be waited for...> killall firefox <..yet to be solved to not kill your girlfriends browser>
答案4
您可以从配置(about:config)中读取测量的启动时间:
browser.slowStartup.averageTime