如何使我的代码更快
How do I make my code faster?
以下代码非常适合完成我想在netsuite中实现的目标,但是我很难找到使其更快的方法。 我尝试不经常使用系统 nlapi,但如果不提交记录,我似乎无法使其工作。 任何指导将不胜感激。
function WonLost(type, name) {
if (name == 'custbody138') {
var recordid = nlapiGetRecordId();
var record = nlapiLoadRecord('estimate', recordid);
if ((nlapiGetFieldValue('custbody138')) == 'T') {
var itemsall = "";
var lineCount = parseInt(record.getLineItemCount('item'));
var x = 1;
while (x <= lineCount) {
nlapiSelectLineItem('item', x);
nlapiSetCurrentLineItemValue('item', 'custcol55', 'T', 'false');
nlapiCommitLineItem('item');
x++;
}
}
else {
var itemsall = "";
var lineCount = parseInt(record.getLineItemCount('item'));
var x = 1;
while (x <= lineCount) {
nlapiSelectLineItem('item', x);
nlapiSetCurrentLineItemValue('item', 'custcol55', 'F', 'false');
nlapiCommitLineItem('item');
x++;
}
}
}
}
这是什么类型的脚本?
看起来您正在加载部署脚本的记录。这是完全没有必要的,您可以只使用nlapi*
函数而不是record.*
函数。加载整个记录是您可以执行的开销较大的操作之一。
- 删除
recordid
和record
变量 - 将
record.getLineItemCount
呼叫替换为nlapiGetLineItemCount
另一种方法是在客户端脚本的 Recalc 函数上,并将'custcol55'
设置为"T",这样就不需要迭代整个项目列表。
我在大学里睡过这个开销的概念,但我的基本理解是循环可能很昂贵。(性能密集型)
因此,如果有 100 行,并且您一次循环 1 条,那就是 100 个循环,但如果每个循环可以处理 5 行,那么它只有 20 个循环。 这被称为"循环展开",http://en.wikipedia.org/wiki/Loop_unrolling
所以不要这样做...
while (x<= lineCount)
{
//do stuff on line x
x++;
}
相反,请尝试此...
while (x<= lineCount)
{
//do stuff on line x
//do stuff on line x+1
//do stuff on line x+2
//do stuff on line x+3
//do stuff on line x+4
x=x+5;
}
而且您还必须处理有 47 行的情况,因此您最多只能循环 ((int)(linecount/5)*5),然后在最后执行一次 1 个小型循环来处理 46 和 47(linecount%5)。
这导致了非常丑陋,不优雅的代码,但我已经看到它对性能非常有帮助,特别是在对长SQL查询进行分块时。 你必须玩弄块的大小,5可能太小或太大而没有好处,所以调整它并记录你的时间,直到你找到最佳点。
相关文章:
- 元素在我的代码中不会.fadeTo.Don'I don’我不知道;s错误的JavaScript、JQuery、H
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 验证我的代码json
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- 我的jquery代码不起作用.为什么?
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 我不知道为什么我的代码是错误的?又有什么错
- 为什么我的解析云代码请求'未经授权'
- 为什么不't我的ruby代码与javascript文件一起插入
- 我的html表单无法验证.请参阅代码片段中的html代码和java脚本
- 我需要一个jQuery函数来只工作在700px以上的屏幕大小,无法在我的代码中发现错误
- I'我不知道为什么我的代码没有'不起作用
- 如何使用我的Jquery代码创建委托事件侦听器
- 我不知道此代码中的这些符号是什么意思.十进制到二进制
- 什么正在取代我的'以及“;javascript代码中使用&#39;和&”;
- 在上传之前,我可以在代码中的哪里将文件扩展名更改为小写
- 为什么动态加载的事件在我的代码中不能正常工作
- 我的Javascript代码出错
- 如何禁用我的切换按钮?这是我的代码
- 如何分离代码:我的控制器是否做了太多工作