0

我正在尝试估计我当前 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 限制之前,我想预测有多少这些对象可以同时存在。

4

1 回答 1

2

每当您遇到与 API 无关的 google-apps-script 问题时,请先尝试搜索 javascript 问题。在这种情况下,我找到了JavaScript object size,并在 apps-script 中尝试了接受的答案。(实际上,“改进的”接受的答案。)我根本没有做任何更改,但在这里用测试功能复制了它,所以你可以剪切和粘贴来试用它。

这是我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;
}
于 2013-03-18T23:18:02.920 回答