url: add V8 Fast API for Blob RevokeObjectURL
Description
This pull request adds a V8 Fast API implementation for the RevokeObjectURL
method in the Blob API. This optimization aims to improve the performance of URL operations related to Blob objects.
Local Evaluation
With fast api.
revokeObjectURL: 147.683ms
Operations per second: 6771268
revokeObjectURL: 233.320ms
Operations per second: 4285953
revokeObjectURL: 148.093ms
Operations per second: 6752493
revokeObjectURL: 145.851ms
Operations per second: 6856293
revokeObjectURL: 146.318ms
Operations per second: 6834450
revokeObjectURL: 147.066ms
Operations per second: 6799684
revokeObjectURL: 148.605ms
Operations per second: 6729260
Without fast api.
revokeObjectURL: 234.338ms
Operations per second: 4267337
revokeObjectURL: 232.052ms
Operations per second: 4309385
revokeObjectURL: 231.606ms
Operations per second: 4317682
revokeObjectURL: 234.309ms
Operations per second: 4267869
const { performance, PerformanceObserver } = require('perf_hooks');
function revokeObjectURL(url) {
URL.revokeObjectURL(url);
}
function runBenchmark(iterations = 1000000) {
const url = URL.createObjectURL(new Blob(['hello world', '🍌🍌🍌']));
performance.mark('start');
for (let i = 0; i < iterations; i++) {
revokeObjectURL(url);
}
performance.mark('end');
performance.measure('revokeObjectURL', 'start', 'end');
}
const obs = new PerformanceObserver((list) => {
const measurement = list.getEntries()[0];
console.log(`revokeObjectURL: ${measurement.duration.toFixed(3)}ms`);
const opsPerSecond = (1000000 / measurement.duration * 1000).toFixed(0);
console.log(`Operations per second: ${opsPerSecond}`);
performance.clearMarks();
obs.disconnect();
});
obs.observe({ entryTypes: ['measure'] });
console.log("Running benchmark...");
runBenchmark();