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'
}

このオブジェクトが DB で占めるサイズを計算するにはどうすればよいですか? ドメインの 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 に答える