My stopgap measure is to use the V8 JavaScript engine profiler. This is the JavaScript engine used in Chrome. Profiling code that will run in FireFox with the Chrome engine is not ideal, but I hypothesize that the two engines have similar gross performance characteristics.
Installation
In Ubuntu 13.10, using apt-get, I installed nodejs. (The version of nodejs installed with 12.04 many versions behind.)
Getting tools/linux-tick-processor (and the other functions necessary to parse the profiling output) was more involved.
Based on my history (i.e. I haven't double-checked these steps), this is what I did:
$ apt-get source libv8
$ cd libv8-3.8.9.20
$ make dependencies
$ make native werror=no
Running the Profiler
First, you need some code to profile. Not ideally, I wrote a driving script for frequencyTable, one of the functions I wanted to profile:
var fs = require("fs");
var textutils = require("./textutils");
let source = fs.readFileSync("../doc/independence.txt", {encoding: "utf-8", flag: "r"});
for(let i = 0; i < 10000; i++) {
textutils.frequencyTable(4, source);
}
The "fs" library is provided by node.js.
Inside my add-ons lib/ directory, I ran the command:
$ nodejs --harmony --use_strict --prof prof_frequencyTable.js
The '--harmony' and '--use_strict' arguments are necessary to force node.js to allow "let" and other modern JavaScript features.
This command will run your script and create a "v8.log" file in your current directory.
To extract some useful data from v8.log, change directory to your libv8 directory and run:
$ tools/linux-tick-processor path/to/your/v8.log
This will write to stdout a profiling report.
No comments:
Post a Comment