Google apps script ScriptDB对象大小计算
我正在努力估计我目前天然气项目的极限。我使用ScriptDB进行分块处理,以绕过6分钟的执行限制。如果我有一个像Google apps script ScriptDB对象大小计算,google-apps-script,Google Apps Script,我正在努力估计我目前天然气项目的极限。我使用ScriptDB进行分块处理,以绕过6分钟的执行限制。如果我有一个像 var userObj{ id: //user email address count: //integer 1-1000 trigger: //trigger ID label: //string ~30 char or less folder: //Google Drive folder ID sendto: //'true' or 'fal
var userObj{
id: //user email address
count: //integer 1-1000
trigger: //trigger ID
label: //string ~30 char or less
folder: //Google Drive folder ID
sendto: //'true' or 'false'
shareto: //'true' or 'false'
}
如何计算此对象在DB中所占的大小?我想预测在我达到我们域的200MB限制之前,这些对象中有多少可以同时存在。每当你有关于google apps脚本的问题而不是API的问题时,请先尝试搜索javascript问题。在本例中,我找到并尝试了apps脚本中接受的答案。(事实上,“改进”的答案是可以接受的。)我没有做任何更改,但在这里用测试功能复制了它,所以你可以直接剪切粘贴来试用 下面是我在调试器中使用test
stud
对象得到的结果
现在,它并不完美——例如,它没有考虑到您将在ScriptDB中使用的键的大小。我试了一下。但是,由于您的对象包含一些潜在的巨大值,例如长度为256个字符的电子邮件地址,因此密钥长度可能不太重要
// https://stackoverflow.com/questions/1248302/javascript-object-size/11900218#11900218
function roughSizeOfObject( object ) {
var objectList = [];
var stack = [ object ];
var bytes = 0;
while ( stack.length ) {
var value = stack.pop();
if ( typeof value === 'boolean' ) {
bytes += 4;
}
else if ( typeof value === 'string' ) {
bytes += value.length * 2;
}
else if ( typeof value === 'number' ) {
bytes += 8;
}
else if
(
typeof value === 'object'
&& objectList.indexOf( value ) === -1
)
{
objectList.push( value );
for( i in value ) {
stack.push( value[ i ] );
}
}
}
return bytes;
}
function Marks()
{
this.maxMarks = 100;
}
function Student()
{
this.firstName = "firstName";
this.lastName = "lastName";
this.marks = new Marks();
}
function test () {
var stud = new Student();
var studSize = roughSizeOfObject(stud);
debugger;
}