我正在尝试估算当前GAS项目的限制。我使用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 'false'
shareto: //'true' or 'false'
}
如何计算此对象在数据库中占用的大小?我想预测在我达到域的200MB限制之前,可以同时存在多少这些对象。
答案 0 :(得分:2)
每当您对google-apps-script提出的问题与API无关时,请先尝试搜索javascript问题。在这种情况下,我找到了JavaScript object size,并在apps-script中尝试了接受的答案。 (实际上,“改进的”接受了答案。)我根本没有做任何改动,但是在这里用测试功能复制了它,所以你可以切换&粘贴试试。
这是我在调试器中使用测试stud
对象获得的内容。
现在,它并不完美 - 例如,它不会影响您在ScriptDB中使用的键的大小。 Another answer对此进行了抨击。但是,由于您的对象包含一些潜在的巨大值,例如可能长度为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;
}