시나닷컴 마이크로박의 Jobs 실행 작업
function Jobs() {
this._jobTable = []
}
Jobs.prototype = {
_registedJobTable: {},
initialize: function() {},
_registJob: function(jobName, rel) {
this._registedJobTable[jobName] = rel
},
add: function(jobName) {
this._jobTable.push(jobName)
},
start: function() {
var jobs = this._jobTable;
var regJobs = this._registedJobTable;
var i = 0;
var joblen = this._jobTable.length;
var getTime = function() {
return new Date().valueOf()
};
var interNum = window.setInterval(function() {
if (i >= joblen) {
clearInterval(interNum);
return
}
var jobName = jobs[i];
var job = regJobs[jobName];
i++;
if (typeof job == "undefined") {
console.log("<b>[" + jobName + "# is undefiend!!!</b>", {
html: true
});
return
}
var _try = true;
var _start = getTime();
try {
job.call()
} catch(e) {
console.log("<b>[" + jobName + "] failed!!!</b>", {
html: true
});
_try = false
} finally {
if (_try) {
var _end = getTime();
console.log("[" + jobName + "] done in " + (_end - _start) + "ms.")
}
}
},
10)
},
call: function(jobName, args) {
if (typeof this._registedJobTable[jobName] != "undefined") {
this._registedJobTable[jobName].apply(this, args)
} else {
console.log("#" + jobName + "# is undefined!!!", {
color: "#900",
bgColor: "#FFF;"
})
}
}
};
$registJob = function(name, rel) {
Jobs.prototype._registJob(name, rel)
};
테스트 용례:
$registJob('topic' , function() {
for(var i = 0 ; i < 10000000 ; i++) {
var arr = new Array(10000);
}
alert('function1 ends');
});
$registJob('loadComment' , function() {
for(var i = 0 ; i < 100000 ; i++) {
var arr = new Array(10000);
}
alert('function2 ends');
});
$registJob('testFun' , function() {
for(var i = 0 ; i < 100000 ; i++) {
var arr = new Array(10000);
}
alert('function3 ends');
});
function main() {
var jobs = new Jobs();
jobs.add("topic");
jobs.add("loadComment");
jobs.add('aaa');
jobs.start();
};
window.onload = main;
작업의 방식에 따라 제정된 코드를 실행하는데 교묘한 점은 setInterval을 사용하여 함수의 운행을 서로 다른 패키지에 넣었다는 것이다. 만약에 함수 하나가 틀리면 다른 함수가 계속 운행하는 데 영향을 주지 않고 로그 처리를 추가하여 각각job가 얼마나 오래 운행했는지 기록한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다른 사람의 웹사이트 편집: contenteditable 및 designMode그래도 우리가 그렇게 할 수 있다고 생각하는 것은 멋진 일입니다. 제가 강조하고 싶었던 일종의 관련 API가 실제로 몇 개 있기 때문에 오늘 그것을 가져왔습니다. contenteditable는 "true" 값이 할당...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.