## 運行所有測試套件:
cargo test
## 只測試 cli/js/:
cargo test js_unit_tests
cargo test std_tests
代碼檢查與格式化 檢查
./tools/lint.py 格式化
./tools/format.py
## 確認(rèn)我們正在構(gòu)建發(fā)布版 (release)。
## 構(gòu)建 deno 和 V8 的 d8。
ninja -C target/release d8
## 使用 --prof 選項運行想要分析的程序。
./target/release/deno run tests/http_bench.ts --allow-net --v8-flags=--prof &
## 施加壓力。
third_party/wrk/linux/wrk http://localhost:4500/
kill `pgrep deno`
V8 將在當(dāng)前目錄寫入一個文件,像這樣 isolate-0x7fad98242400-v8.log。查看這個文件:
D8_PATH=target/release/ ./third_party/v8/tools/linux-tick-processor
isolate-0x7fad98242400-v8.log > prof.log
## 在 macOS 上, 使用 ./third_party/v8/tools/mac-tick-processor
prof.log 將包含不用調(diào)用的 tick 分布。 用 Web UI 查看這個日志,先生成 JSON 文件:
D8_PATH=target/release/ ./third_party/v8/tools/linux-tick-processor
isolate-0x7fad98242400-v8.log --preprocess > prof.json
在您的瀏覽器中打開 third_party/v8/tools/profview/index.html,選擇 prof.json 以查看分布圖。 在性能分析時有用的 V8 選項:
$ lldb -- target/debug/deno run tests/worker.js
\> run
\> bt
\> up
\> up
\> l
調(diào)試 Rust 代碼,可以用 rust-lldb。
$ rust-lldb -- ./target/debug/deno run --allow-net tests/http_bench.ts
## 在 macOS 上,您可能看到像這樣的警告:
## `ImportError: cannot import name _remove_dead_weakref`
## 在這種情況下,設(shè)置 PATH 以使用系統(tǒng) python,例如
## PATH=/System/Library/Frameworks/Python.framework/Versions/2.7/bin:$PATH
(lldb) command script import "/Users/kevinqian/.rustup/toolchains/1.36.0-x86_64-apple-darwin/lib/rustlib/etc/lldb_rust_formatters.py"
(lldb) type summary add --no-value --python-function lldb_rust_formatters.print_val -x ".*" --category Rust
(lldb) type category enable Rust
(lldb) target create "../deno/target/debug/deno"
Current executable set to '../deno/target/debug/deno' (x86_64).
(lldb) settings set -- target.run-args "tests/http_bench.ts" "--allow-net"
(lldb) b op_start
(lldb) r
V8 有很多內(nèi)部的命令行選項。
## 列出可用的 V8 選項
$ deno --v8-flags=--help
## 使用多個選項的示例
$ deno --v8-flags=--expose-gc,--use-strict
特別有用的: --async-stack-trace
參考我們的測試 https://deno.land/benchmarks 測試圖表假設(shè) https://github.com/denoland/benchmark_data/blob/gh-pages/data.json 有著 BenchmarkData[] 類型。以下是 BenchmarkData 的定義:
interface ExecTimeData {
mean: number;
stddev: number;
user: number;
system: number;
min: number;
max: number;
}
interface BenchmarkData {
created_at: string;
sha1: string;
benchmark: {
[key: string]: ExecTimeData;
};
binarySizeData: {
[key: string]: number;
};
threadCountData: {
[key: string]: number;
};
syscallCountData: {
[key: string]: number;
};
}
更多建議: