条件判断与循环性能比较

Benchmark created on


Setup

// 模拟函数(无实际业务逻辑)
function performAdminAction(user) {
  return `Admin action for ${user.name}`;
}

function performUserAction(user) {
  return `User action for ${user.name}`;
}

function handleInactiveUser(user) {
  return `Inactive user ${user.name}`;
}

function handleNoUser() {
  return 'No user';
}
// 生成测试数据
function generateUsers(n) {
  const users = [];
  for (let i = 0; i < n; i++) {
    const isAdmin = i % 3 === 0;
    const isActive = i % 5 !== 0;
    users.push({
      name: `User${i}`,
      isActive,
      permissions: isAdmin ? ['admin', 'read'] : ['read'],
    });
  }
  // 添加 null 测试
  users.push(null);
  return users;
}

// 性能测试函数
function testPerformance(label, fn, users) {
  console.time(label);
  for (let i = 0; i < users.length; i++) {
    fn(users[i]);
  }
  console.timeEnd(label);
}

Test runner

Ready to run.

Testing in
TestOps/sec
原始写法
function processUserTraditional(user) {
  if (user) {
    if (user.isActive) {
      if (user.permissions.includes('admin')) {
        return performAdminAction(user);
      } else {
        return performUserAction(user);
      }
    } else {
      return handleInactiveUser(user);
    }
  } else {
    return handleNoUser();
  }
}

// 执行测试
const users = generateUsers(1000000);
console.log('Start performance test...');
testPerformance('Traditional', processUserTraditional, users);
ready
优化后写法
function processUserOptimized(user) {
  if (!user) {
    return handleNoUser();
  }
  if (!user.isActive) {
    return handleInactiveUser(user);
  }
  if (user.permissions.includes('admin')) {
    return performAdminAction(user);
  }
  return performUserAction(user);
}

// 执行测试
const users = generateUsers(1000000);
console.log('Start performance test...');
testPerformance('Optimized', processUserOptimized, users);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.