你好微优化怪在这里。两个相似的问题。
我有很多(400)变量,可以是一个字符串或空,什么时候用空? null还是0?好的0占用了一个int的内存,但是null是4个字符后来...后来我要用if检查,比如=== null或者其他什么...... vars没有改变,大部分是读...
在脚本中我使用了许多布尔变量,我想知道如果执行得更好使用true false或1 0,cos,再次为true就是4个字符。
我试图自我测试,但我不能......这是测试代码:
1A:
<script> var t0, t1, l; var c = true;
t0 = performance.now();
var li = ["abcd1234",0,"abcd1234",0,"abcd1234",0]; //500 more of em.
l = li.length;
for (i = 0; i < l; i++) { if (li[i] !== 0 ) { c = true; } else { c = false; } }
t1 = performance.now();
console.log((t1 - t0) + " ms"); </script>
1B:
<script>var t0, t1, l; var c = true;
t0 = performance.now();
var li = ["abcd1234",null,"abcd1234",null,"abcd1234",null]; //500 more of em.
l = li.length;
for (i = 0; i < l; i++) { if (li[i] !== null ) { c = true; } else { c = false; } }
t1 = performance.now();
console.log((t1 - t0) + "ms"); </script>
2A:
<script>var t0, t1, l; var c = true;
t0 = performance.now();
var li = [true,false,true,false,true,false]; //500 more of em.
var l = li.length;
for (i = 0; i < l; i++) { if (li[i] === true ) { c = true; } else { c = false; } }
t1 = performance.now();
console.log((t1 - t0) + "ms"); </script>
2B:
<script> var t0, t1, l; var c = 1;
t0 = performance.now();
var li = [1,0,1,0,1,0]; //500 more of em.
var l = li.length;
for (i = 0; i < l; i++) { if (li[i] === 1 ) { c = 1; } else { c = 0; } }
t1 = performance.now();
console.log((t1 - t0) + "ms"); </script>
测试结果: 每个阵列800k变量,时间是5页负载的平均值。
1a:0 TIME 11.99 ms |尺寸5.35 MB
1b:null TIME 1.78 ms |尺寸6.59 MB
2a:true false TIME 1.77 ms |尺寸4.53 MB
2b:1 0 TIME 1.78 ms |尺寸1.64 MB
我必须说,对于较少数量的变量,差异(时间和大小)较小。
答案 0 :(得分:1)
从效果角度来看,0
对,null
与false
的字符数并不重要。他们唯一会影响的是文件大小,但是由于GZip或其他网页压缩会在字典中放入重复的单词,因此它们出现多次并不重要(如果你真的关心性能,你肯定会使用GZip或者更好)。
答案 1 :(得分:1)
由于以下几个原因,微观优化很难:
让基准测试错误很容易。
我们优化的代码可能不是经常运行的代码。
在优化下载大小时,我们经常会忘记在传输过程中压缩可能会比您更好地缩小代码。
我们可能正在编写运行更快的代码,而不是运行 less 的代码。
糟糕的基准: JS引擎越来越聪明。许多简单的基准测试不能复制现实世界的条件。解释器删除代码没有副作用;我帮助解决了这些错误。与具有数百KB脚本,标记和CSS的实际应用程序不同,整个测试可能适合处理器缓存。可以对样本数据进行不同的排序,也可以使用较少的元素或行。
过早优化: 我们查看我们的代码,看到一个复杂的部分,它有很多条件,也许是一个嵌套的循环,并认为“必须有一个更好的方法。”但是,如果复杂的代码只运行一次,或者仅在用户保存或游戏开始时,修复它可能无法改善体验。
<强>压缩:强> Gzip更擅长查找代码的相同部分。在为库编写代码时,我有时会将其粘贴到Google Closure Compiler Service中,以查看构建优化和压缩的统计信息。一些代码大小优化实际上使结果更大,因为它减少了压缩。尝试将代码示例放入其中并查看其内容。
运行更少的代码: 查看代码,看看它是否需要首先完成工作:
这些是我认为不会过早的优化。有时,您可以缩小运行的代码,即使它不会减少您编写的代码量。
只需写下来: 最好的计划通常是编写代码。运行后,对其进行分析以查看花费最多的时间。也许您只需优化一些功能或限制事件。
答案 2 :(得分:0)
在我的观点上,如果你要清除变量,那么最好的方法是定义'null'。无论如何,能够清除未使用的变量和垃圾收集器的现代浏览器都无法溢出。
答案 3 :(得分:0)
测试1:我说如果没有值,则优于0 测试2:我仍然不能告诉获胜者精心制作时间,但是大小胜过0和1,而不是真假。 我还不高兴......