Skip to content

url: add V8 Fast API for Blob RevokeObjectURL

Rodrigo Muino Tomonari requested to merge github/fork/tannal/blob-fast-api into main

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();

Merge request reports

Loading