1563088f06
In the spec, a URL record has an associated "blob URL entry", which for `blob:` URLs is populated during parsing to contain a reference to the `Blob` object that backs that object URL. It is this blob URL entry that the `fetch` API uses to resolve an object URL. Therefore, since the `Request` constructor parses URL inputs, it will have an associated blob URL entry which will be used when fetching, even if the object URL has been revoked since the construction of the `Request` object. (The `Request` constructor takes the URL as a string and parses it, so the object URL must be live at the time it is called.) This PR adds a new `blobFromObjectUrl` JS function (backed by a new `op_blob_from_object_url` op) that, if the URL is a valid object URL, returns a new `Blob` object whose parts are references to the same Rust `BlobPart`s used by the original `Blob` object. It uses this function to add a new `blobUrlEntry` field to inner requests, which will be `null` or such a `Blob`, and then uses `Blob.prototype.stream()` as the response's body. As a result of this, the `blob:` URL resolution from `op_fetch` is now useless, and has been removed. |
||
---|---|---|
.. | ||
release | ||
wpt | ||
build_benchmark_jsons.js | ||
cut_a_release.md | ||
flamebench.js | ||
format.js | ||
lint.js | ||
README.md | ||
upload_wptfyi.js | ||
util.js | ||
wpt.ts |
Tools
Documentation for various tooling in support of Deno development.
format.js
This script will format the code (currently using dprint, rustfmt). It is a prerequisite to run this before code check in.
To run formatting:
deno run --allow-read --allow-write --allow-run --unstable ./tools/format.js
lint.js
This script will lint the code base (currently using dlint, clippy). It is a prerequisite to run this before code check in.
To run linting:
deno run --allow-read --allow-write --allow-run --unstable ./tools/lint.js
Tip: You can also use cargo to run the current or pending build of the deno executable
cargo run -- run --allow-read --allow-write --allow-run --unstable ./tools/<script>
flamebench.js
flamebench.js
facilitates profiling and generating flamegraphs from
benchmarks.
General usage:
❯ ./tools/flamebench.js
flamebench <bench_name> [bench_filter]
Available benches:
op_baseline
ser
de
To profile the op_baseline
bench, run ./tools/flamebench.js op_baseline
,
this will run all 3 benches in `op_baseline.
Often when profiling/optimizing, you'll want to focus on a specific sub-bench,
flamebench
supports a bench/test filter arg like the regular cargo commands.
So you can simply run ./tools/flamebench.js op_baseline bench_op_async
or
./tools/flamebench.js op_baseline bench_op_nop
to profile specific benches.
Tip: the [bench_filter]
argument doesn't have to be an exact bench name, you
can use a shorthand or a partial match to profile a group of benches, e.g:
./tools/flamebench.js de v8