Для точного `performance.now()` нужна `--allow-hrtime`

performance.now() по умолчанию работает в миллисекундах, но может работать и с микросекундной точностью, если передана опция --allow-hrtime. Пишут, что это связано с безопасностью, типа можно эксплойтить крипто- и аппаратные уязвимости вроде Spectre, имея слишком точный таймер.

Карты путает то, что в интерактивной (REPL) deno точный таймер по умолчанию включён. Разберёмся в ситуации подробно.

Для опытов задействуем вот такой фрагмент TypeScript-кода:

const p = performance;
const sleep = (delay: number) => new Promise((resolve) => setTimeout(resolve, delay));
console.log([ p.now(), (await sleep(100), p.now()), (await sleep(100), p.now()) ]);

В интерактивной сессии deno время возвращается с микросекундами (820.6841 и другие):

Аналогичное поведение мы видим в варианте deno eval:

Теперь выполним файл 1.ts, содержащий наш тестовый код:

Как говорили в телевизоре во времена моей юности, «почувствуйте разницу».

Если, допустим, для нашей задачи таймер высокого разрешения просто-таки необходим, добавляем в начало программы вот это:

if ((await Deno.permissions.query({ name: "hrtime" })).state != "granted")
  throw new Error("Required permission is not granted: hrtime");

Теперь стало так:

Надеюсь, кому-то пригодилось.