2013-03-18 71 views
0

我正在嘗試估計當前GAS項目的限制。我使用ScriptDB來處理大約6分鐘的執行限制。如果我有一個對象,如ScriptDB對象大小計算

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限制之前預測同時存在多少這些對象。

回答

2

無論何時您對google-apps-script有關於API的問題,請先嚐試搜索javascript問題。在這種情況下,我發現JavaScript object size,並嘗試在apps-script中接受的答案。 (實際上,「改進」被接受的答案)。我根本沒有做任何改變,但是已經在這裏用測試函數重現了它,所以你可以將&粘貼去嘗試一下。

下面是我在調試器中用測試stud對象所得到的結果。 screenshot of debugger

現在,它並不完美 - 例如,它不會考慮您在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; 
} 
+0

感謝您的詳細解答。這工作得很好。 – Greg 2013-03-19 14:36:38