Performance.now() время неустойчиво в Chrome?

Я использую performance.now, чтобы получить начало и конец метода. Я нашел результаты в Firefox достаточно последовательными 10-12 мс. В Chrome тайминг сильно варьируется от 30 до 70 мс.

Меня не волнует тот факт, что Firefox работает быстрее (поскольку реализация JS браузера будет меняться), так как широкое распространение результатов, встречающихся в Chrome, делает невозможным получение точного результата. Комментарии в этой статье, по- видимому, подразумевают, что реализация Chrome в любом случае точна до 1 мс - это правильно?

Кто-нибудь имеет какие-либо предложения относительно того, что происходит, или как производить более точные и последовательные оценки эффективности?

2 ответа

Я знаю, что это поздно, но производительность. Теперь это точно, однако хром v8 движок делает безумную оптимизацию кода, и это были несоответствия. изменение во времени зависит от конкретного случая, так как v8 выполняет оптимизацию, и если вы вынуждаете его де-оптимизировать (например, меняя тип переменной от строки до числа), это будет стоить много производительности. дополнительно называя одну и ту же чистую функцию несколько раз, заставит v8-движок оптимизировать ее, поэтому она станет почти мгновенной в течение нескольких повторений.

если вы разделите код со мной, я могу помочь вам в вашем конкретном случае.


Это может быть одной из двух проблем. Либо performance.now() записывает неправильные времена (что кажется маловероятным), либо Chrome принимает переменные значения для выполнения.

Что вам нужно сделать, это проверить, какой из них: использовать Date.now() вместо performance чтобы найти время выполнения: если он стабилизируется, проблема в Date.now() performance.now(), в противном случае это Chrome.

Основное преимущество performance подтверждено тем, что оно может записывать точность до 1 микросекунды. Однако это вряд ли понадобится для подавляющего большинства проблем, поэтому использование Date вместо этого вполне может вас уладить.

licensed under cc by-sa 3.0 with attribution.