在Couchbase JavaScript视图中是否有可能的全局变量
is it possible global variable in couchbase javascript view?
我有我的reduce方法,我想计时它需要多少,所以我想基本上做一些事情:
function(key, values, rereduce) {
var start_time = new Date();
// my calcs here.
var totallength = 0; // this is wrong... any global variables or closure?
var totaltime = 0; // this is wrong... any global variables or closure?
time_calc_took = new Date() - start_time;
totallength += values.length;
totaltime += time_calc_took;
return([totallength, totaltime, someother_results]);
}
但是,由于总长度和总时间不是全局变量,我无法真正衡量我的视图性能,我想知道它在不同的行数上运行需要多少时间。
-
函数内没有全局变量。它只有局部变量。全局变量只能在全局范围内定义(函数之外(。但是在 couchbase 中,你不能定义 reduce 函数之外的任何变量。
-
如果你想测量视图性能,你的代码是完全错误的,因为你只需要测量它的一部分,因为这个函数可以被多次调用。阅读有关reduce函数的couchbase文档(请参阅下面的链接(。
-
最后,您编写的代码不会测量视图性能,因为它只能测量视图索引性能。而且视图性能不等于索引性能,主要是因为索引过程在大多数情况下在后台运行,并且不会影响视图性能。
我建议您阅读有关视图及其工作原理的文档。还要注意关于reduce函数的段落。
上级:全局变量不能存在于归约函数的上下文中。如果您仔细阅读有关视图及其reduce函数的文档,您应该了解reduce函数可以在集群中的不同服务器上多次调用。因此,不能定义任何将在群集中的多个服务器上全局的变量。您只能使用返回的变量进行操作。此外,您需要在reduce函数中处理rereduce
,如果不这样做,您将计算最新reduce的rereduce时间并忽略所有先前的值。
衡量视图性能的更好方法是生成负载测试并以最大操作/秒运行,而不是视图索引过程的绝对时间。如果您需要测量索引速度 - 使用stale=false
参数查询您的视图,该参数将强制 couchbase 在返回结果之前更新索引,因此该查询的时间将表示映射和减少结果所需的时间(即您甚至可以使用 curl 或 Web 浏览器(。但是在实际应用中,您需要避免使用stale=false
进行查询。
要调整你的reduce代码,你可以在浏览器中测量它的性能,或者在nodejs中更好地测量它的性能。只需复制您的reduce函数并使用地图数据调用它。如果你在浏览器中优化你的代码,你的代码在CB中会更快。你甚至可以找到在线的jsvascript map-reduce模拟器。
- 全局变量和全局对象的属性之间有什么区别吗
- chrome中的意外全局变量有解决方案吗
- JavaScript在变量中存储操作?有可能吗
- 有可能让两个变量指向同一个对象吗?(javascript)
- 有可能窥探或嘲笑“;“幕后”;变量
- 传递给IIFE包装器有多少全局变量是有意义的
- nodejs中的Javascript全局变量和属性-全局属性有时会被删除
- 全局变量存储在 Node.JS 中的什么位置?节点中是否有类似窗口的对象
- 在Couchbase JavaScript视图中是否有可能的全局变量
- 是否有任何选项可以在煎茶触摸中声明全局变量
- jQuery在函数AJAX函数内部的全局变量有问题
- RegExp测试有两个变量:可能
- 我应该如何处理Resharpers检查器提示'使用可能未分配的属性或全局变量'
- 有可能引用一个变量吗
- 当我加载脚本时,我的全局变量不断刷新,有什么方法可以阻止这种情况吗
- 存储这样的全局变量有什么影响吗
- 是否有可能判断变量是否是刚刚用new创建的对象并获取对象类型
- 是否有可能获得变量声明范围的名称
- 是否有可能在全局级别设置一个变量,这样我们就不必在coffescript中向下传递参数
- 是否有可能编写一个无法访问全局变量的JS函数?