请有人可以审查并建议探索优化和加速的途径。我没有想法。这是一个从谷歌电子表格应用程序脚本调用的功能,现在有200多个工作,有点慢。
有关更快构造的建议,而不是" for"环?或者其他聪明的优化想法。它是通过键值存储解析任务的子例程吗?也许有一种更聪明的方法可以做到这一点?
有兴趣学习更好的方法。
非常感谢你能花一点时间来帮助
*最后的api响应示例
function updateTracker() {
var output = [];
// fetch and parse doc
var document = xmlFetch('https://api.blahblah');
//locate child set
var jobset = document.getRootElement().getChild("Jobs").getChildren();
//get api call status
var WFMcallstatus = document.getRootElement().getChild("Status").getValue();
if (WFMcallstatus != "OK") {
return "Call Failed"
}
//loop through jobs
for (var i = 0; i < jobset.length; i++) {
//job attrib from xml
var jobstate= jobset[i].getChild("State").getValue();
if (jobset[i].getChild("Type")) {
var jobtype= jobset[i].getChild("Type").getValue();
} else {
var jobtype= "";
}
var jobid = jobset[i].getChild("ID").getValue();
var jobname = jobset[i].getChild("Name").getValue();
// var jobdescription = jobset[i].getChild("Description").getValue();
var jobclient = jobset[i].getChild("Client").getChild("Name").getValue();
//array the wanted fields for our output row
var jobrow = [jobstate, jobtype, jobname, jobclient];
// subloop job tasks
var taskelem = jobset[i].getChild("Tasks").getChildren();
var tasks = parseTasks(taskelem);
//prepare urls
var intid = jobset[i].getChild("InternalID").getValue();
var wfmurls = wfmUrls(intid, jobid);
// concat arrays for saving
var jobrowconcat = wfmurls.concat(jobrow,tasks);
//push to 2d array
output.push(jobrowconcat);
}
return output
}
//job task iterator
function parseTasks(taskelem) {
//get a new keystore to find the element values of the custom fields from their id's
var tknewob = storedTkkeys()
for (var j = 0; j < taskelem.length; j++) {
// var taskname = taskarray[j].getChild("Name").getValue();
var taskid = taskelem[j].getChild("TaskID").getValue();
if (taskid in tknewob) {
var taskstate = taskelem[j].getChild("Completed").getValue();
if (taskstate == "true") {
taskstate = "✔";
} else {
taskstate = "X";
}
//using id and state we can build another ordered json
var tkvalstr = ""+taskstate;
tknewob[taskid].taskstate = tkvalstr;
}
}
// make a full row set with empty spaces to fill gaps
var tkjobrow = [];
for (var key in tknewob) {
var obj = tknewob[key];
var prop = "taskstate";
if (obj.hasOwnProperty(prop)) {
tkjobrow.push(obj[prop]);
} else {
tkjobrow.push("");
}
}
return tkjobrow
}
// key store for tasks
function storedTkkeys() {
//key values
var taskkeystore = {2667746: { name: "(t1) Lead 1st Contact"},
2667747: { name: "(t2) Lead 1st Follow Up"},
2667753: { name: "(t3) Lead 2nd Follow Up" },
2667749: { name: "(t4) Quote Request"},
2667751: { name: "(t5) Quote Issued and Sent"},
2667754: { name: "(t6) Quote 1st Follow Up" },
2667755: { name: "(t7) Quote 2nd Follow Up"},
2667757: { name: "(t8) Contract Requested"},
2667759: { name: "(t9) Contract & Deposit Invoice Issued and Sent"},
2667762: { name: "(ta) Contract 1st Follow Up"},
2667766: { name: "(tb) Contract 2nd Follow Up"},
2677091: { name: "(tc) Contract signed"},
2677135: { name: "(td) Contract Confirmed"},
2667773: { name: "(te) Deposit Invoice 1st Follow Up"},
2667774: { name: "(tf) Deposit Invoice 2nd Follow Up"},
2684065: { name: "(tg) Deposit Invoice Paid"},
2667772: { name: "(th) Final Invoice Approved and Sent"},
2667775: { name: "(ti) Final Invoice 1st Follow Up" },
2667776: { name: "(tj) Final Invoice 2nd Follow Up" },
2677121: { name: "(tk) Account Settled"}};
return taskkeystore
}
<Response api-method="List">
<Status>OK</Status>
<Jobs>
<Job>
<ID></ID>
<Name></Name>
<Description></Description>
<Client>
<ID></ID>
<Name></Name>
</Client>
<ClientOrderNumber></ClientOrderNumber>
<State></State>
<Type></Type>
<StartDate></StartDate>
<DueDate></DueDate>
<CompletedDate></CompletedDate>
<InternalID></InternalID>
<Assigned/>
<Tasks>
<Task>
<ID>62028029</ID>
<Name>(t1) Lead 1st Contact</Name>
<TaskID>2667746</TaskID>
<Description>First contact with a lead</Description>
<Completed>true</Completed>
<Billable>false</Billable>
<Folder>1 Lead</Folder>
</Task>
<Task>
<ID>62028030</ID>
<Name>(t2) Lead 1st Follow Up</Name>
<TaskID>2667747</TaskID>
<Description/>
<Completed>true</Completed>
<Billable>false</Billable>
<Folder>1 Lead</Folder>
</Task>