gpt4 book ai didi

Javascript Try-Catch 性能对比。错误校验码

转载 作者:IT王子 更新时间:2023-10-29 03:19:48 25 4
gpt4 key购买 nike

将代码放在 try-catch block 中而不是执行各种错误检查会更快吗?

例如..

function getProjectTask(projectTaskId) {
if (YAHOO.lang.isUndefined(projectTaskId) || YAHOO.lang.isNull(projectTaskId) && !YAHOO.lang.isNumber(projectTaskId)) {
return null;
}

var projectPhaseId, projectPhaseIndex, projectTaskIndex, projectPhases, projectPhase, projectTask;

if (!YAHOO.lang.hasOwnProperty(projectTaskPhaseMap, projectTaskId)) {
return null;
}

projectPhaseId = projectTaskPhaseMap[projectTaskId];

if (YAHOO.lang.isUndefined(projectPhaseId) || YAHOO.lang.isNull(projectPhaseId) || !YAHOO.lang.hasOwnProperty(scheduleData.ProjectPhasesMap, projectPhaseId)) {
return null;
}

projectPhaseIndex = scheduleData.ProjectPhasesMap[projectPhaseId];
if (YAHOO.lang.isUndefined(projectPhaseIndex) || YAHOO.lang.isNull(projectPhaseIndex) || !YAHOO.lang.hasOwnProperty(scheduleData.ProjectPhases[projectPhaseIndex])) {
return null;
}
projectPhase = scheduleData.ProjectPhases[projectPhaseIndex];

if (!YAHOO.lang.hasOwnProperty(projectPhase.ProjectTasksMap, projectTaskId)) {
return null;
}

projectTaskIndex = projectPhase.ProjectTasksMap[projectTaskId];

if (YAHOO.lang.isUndefined(projectTaskIndex) || YAHOO.lang.isNull(projectTaskIndex)) {
return null;
}

projectTask = scheduleData.ProjectTasks[projectTaskIndex];
}

对比

function getProjectTask(projectTaskId) {
try {
projectPhaseId = projectTaskPhaseMap[projectTaskId];
projectPhaseIndex = scheduleData.ProjectPhasesMap[projectPhaseId];
projectPhase = scheduleData.ProjectPhases[projectPhaseIndex];
projectTaskIndex = projectPhase.ProjectTasksMap[projectTaskId];
projectTask = scheduleData.ProjectTasks[projectTaskIndex];

}
catch (e) {
return null;
}
}

我希望我的问题是有道理的。我很乐意澄清。谢谢!

最佳答案

"Programs must be written for peopleto read, and only incidentally formachines to execute."

Abelson & Sussman, SICP, preface to the first edition

始终以可读代码为目标。要记住的关键是:

避免在性能关键函数和循环中使用 try-catch

它们不会对其他任何地方造成太大伤害。明智地使用它们,在它们有意义时使用它们。

但正如我所见,您显然滥用了一些函数来进行错误检查。您可以在使用它们之前测试所需的对象和对象的属性,而不是进行复杂的检查。并且:

if (YAHOO.lang.isUndefined(projectPhaseId) || YAHOO.lang.isNull(projectPhaseId))

可以写成

if (projectPhaseId != null)

例如...所以即使没有 try catches,上面的示例也可以相当可读。您似乎有点滥用 YUI。

我敢打赌这会像预期的那样工作:

function getProjectTask(projectTaskId) {

var projectPhaseId = projectTaskPhaseMap[projectTaskId],
projectPhaseIndex = scheduleData.ProjectPhasesMap[projectPhaseId],
projectPhase = scheduleData.ProjectPhases[projectPhaseIndex];

if (projectPhase == null) return null; // projectPhase would break the chain

var projectTaskIndex = projectPhase.ProjectTasksMap[projectTaskId],
projectTask = scheduleData.ProjectTasks[projectTaskIndex];

return projectTask || null; // end of the dependency chain

}

这有多? :)

关于Javascript Try-Catch 性能对比。错误校验码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3217294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com