【问题标题】:How to measure import execution time如何测量导入执行时间
【发布时间】:2021-04-25 19:37:34
【问题描述】:

如何在不介入的情况下测量导入的执行时间?

假设我有下面的代码。


main.js

const now = Date.now();
import './module';
console.log(`${Date.now() - now}ms`);
// shows 0ms

module.js

const now = Date.now();
let a = 0;
for(let i = 0; i < 1000 * 1000 * 1000, i++) a++;
console.log(`${Date.now() - now}ms`;
// shows 1000ms

【问题讨论】:

  • 我想知道 import 的行为是否类似于 var,因为它被提升到函数的顶部,但在声明之前不可用。

标签: javascript performance ecmascript-5


【解决方案1】:

您的 main.js 不起作用,因为在加载并初始化(执行)所有导入的依赖项之前,不会执行模块的代码。两个Date.now() 调用总是会紧接着运行,导致输出0ms。

您需要在测量的 module.js 之前加载另一个模块以获取开始时间:

// main.js
import { now as start } from 'beginMeasure';
import './module';
const end = Date.now();
console.log(`${end - start}ms`);
// beginMeasure.js
export const now = Date.now();

【讨论】:

  • 感谢您的回答,如果我有多个连续导入,您能建议怎么做吗?
  • 多次导入同一个模块不会有任何效果 :-) 但是你需要为多次导入执行import start1 from 'beginMeasure1'; import './module1'; import start2 from 'beginMeasure2'; import './module2'; 等等。真的,如果您关心所有模块的执行时间,您应该直接进入模块,或者使用其他形式的自动跟踪/分析。
【解决方案2】:

我发现测量导入模块执行时间的最佳方法是使用 require。最好确定慢模块并恢复导入。

const now = Date.now();
const module1 = require('./module1');
console.log(`module1: ${Date.now() - now}ms`);
const module2 = require('./module2');
console.log(`module2: ${Date.now() - now}ms`);

【讨论】:

    猜你喜欢
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2021-08-08
    • 2011-02-16
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多