如果您计划使用会多次覆盖变量值的函数,那么在覆盖行中使用BsonSerializer.RegisterSerializationProvider(new BsonDecimalSerializer());
会不会对性能造成影响?
例如,
选项1
var
选项2
var currentTile;
function setCurrentTile(index) {
currentTile = $scope.tiles[index];
}
从历史上看,我一直在使用选项#1,因为在我的代码中减少function setCurrentTile(index) {
var currentTile = $scope.tiles[index];
}
的数量似乎很直观。但也许它没有任何区别,使用较不冗长的方法更为理想。
有人可以提供建议吗?
我们生成一个如下所示的长数组
var
然后遍历它,将值传递给function prepGame() {
// GENERATE TILE PATTERN
var tiles = [];
var times = 30;
for ( var i = 0; i < times; i++ ) {
tiles.push(Math.floor(Math.random() * 9));
}
$scope.tiles = tiles;
}
。因此,setCurrentTile(index)
或option 1
将被调用30次。
答案 0 :(得分:5)
[爱的]过早的优化是万恶之源。
您应该根据程序的正确性来调整变量的范围,而不是猜测性能或内存利用率。虽然在学术上真实地认为局部变量将比全局变量更快地得到解决,但我会坦率地震惊来发现一个真正的程序,其中两者之间有足够的差异供人类用户注意。本地变量和全局变量之间的内存使用量应该几乎没有差别。 (通常情况下,这根本没有区别,因为变量是一个变量,但如果对象的多个实例存在,实例对象的变量显然可能会重复)
然而,如果程序产生不正确的结果,将 一般来说,global variables are bad因为它们使程序状态更难以推理。当然,这并不是说他们永远不合适。使用有意义的范围,忘记性能,直到您证明您有一个真实的,用户明显的问题。
答案 1 :(得分:0)
在javascript中我们有功能级别范围和全局范围。我们可以通过在函数中包装代码来使变量本地化。首先在本地范围内搜索变量,如果在本地范围内找不到它们,那么浏览器会尝试在外部范围内找到它们,或者如果在全局范围内没有其他范围,那么很明显如果找到变量在本地范围内,如果它存在于函数之外,那么访问它将花费更少的时间然后访问它...
所以在我看来,如果你在一个函数中使用变量,那么你将有两个优势......
答案 2 :(得分:0)
在选项1
中setVarible
。如果不存在,请在外部范围内搜索。当Javascript匹配变量时,设置给定值。
最后,它完成的setCurrentTile
方法的执行上下文,声明的var
变量被放入垃圾收集器然后被销毁。
如果您注意到,就速度而言,必须在内部范围内搜索变量定义以及外部范围。就系统内存而言,变量为keeping alive
。如果这个方法被调用了30次,这个过程将被执行并且对于每个函数调用,将在内部和外部范围内搜索应用程序的速度
在选项2
中它在函数的执行上下文中创建的变量currentTitle
,其值仅存在于此执行中。此方法以速度方式保存,但会创建并销毁变量currentTitle
的30倍。这意味着垃圾收集器也将被调用30次。
我不是Javascript专家,我不太了解垃圾收集器,但我认为关于使用更多资源的行为将取决于运行Javascript的引擎以及如何管理垃圾收集器过程
更多信息here
答案 3 :(得分:0)
var currentTile;
console.time("currentTile");
function setCurrentTile(index) {
currentTile = $scope.tiles[index];
}
console.time("currentTile");
为了进一步提高性能,您可以设置如下的循环长度变量:
for(var i =0, times = 30; i < times; i++) {
}