Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mengoptimumkan Skrip Google Apps untuk Mengurangkan Masa Pemprosesan Berlebihan Disebabkan oleh Panggilan Range.getValue() dan Range.setValue() Kerap?

Bagaimanakah Saya Boleh Mengoptimumkan Skrip Google Apps untuk Mengurangkan Masa Pemprosesan Berlebihan Disebabkan oleh Panggilan Range.getValue() dan Range.setValue() Kerap?

Patricia Arquette
Patricia Arquetteasal
2024-11-30 14:58:11492semak imbas

How Can I Optimize Google Apps Script to Reduce Excessive Processing Time Caused by Frequent Range.getValue() and Range.setValue() Calls?

Masa Pemprosesan Yang Lama Berkemungkinan Disebabkan oleh Panggilan Julat Terlalu.getValue() dan Range.setValue()

Penerangan Masalah

Skrip mengimbas lajur maklumat pesanan pelanggan, mengenal pasti kod negeri dan menggabungkan nama pertama dan nama keluarga. Ia juga memasukkan baris kosong jika perlu. Walau bagaimanapun, masa pemprosesan menjadi berlebihan untuk lajur besar disebabkan panggilan kerap ke Range.getValue() dan Range.setValue().

Pengoptimuman

Untuk mengurangkan masa pemprosesan, adalah disyorkan untuk meminimumkan panggilan kepada perkhidmatan Google, termasuk Range.getValue() dan Range.setValue(). Pengoptimuman berikut boleh dilaksanakan:

  • Minimumkan Panggilan Perkhidmatan: Elakkan membuat panggilan berlebihan ke pelayan Google. Sebagai contoh, daripada menggunakan Range.getValue() dan Range.setValue() dalam gelung, baca semua data yang diperlukan ke dalam tatasusunan sekali dan tuliskannya semula ke hamparan dalam satu kelompok.
  • Lihat -Caching di hadapan: Skrip Google Apps menyimpan nilai untuk mengurangkan panggilan berulang. Optimumkan skrip dengan meminimumkan perintah baca dan tulis berselang-seli, membolehkan cache digunakan dengan berkesan.
  • Gunakan Tatasusunan: Dapatkan data ke dalam tatasusunan (tatasusunan JavaScript dua dimensi) dan lakukan operasi pada data dalam tatasusunan. Ini mengurangkan bilangan panggilan baca dan tulis yang dibuat ke hamparan.
  • Elakkan Baca/Tulis Bergantian: Elakkan perintah baca dan tulis berselang seli kerana ini boleh memintas mekanisme caching pandangan ke hadapan. Sekumpulan operasi serupa (cth., membaca atau menulis) bersama-sama.

Penambahbaikan Kod

Di bawah ialah skrip yang dioptimumkan yang menangani isu masa pemprosesan yang berlebihan:

function format() {
  const SS = SpreadsheetApp.getActiveSpreadsheet();
  const SHEET = SS.getActiveSheet();
  const LAST_ROW = SHEET.getRange('A:A').getLastRow();
  let row, range1, cellValue, offset1, offset2, offset3;

  // Loop through all cells in column A
  for (row = 0; row < LAST_ROW; row++) {
    range1 = SHEET.getRange(row + 1, 1);

    // If cell substring is a number, skip it as substring cannot process numbers
    cellValue = range1.getValue();
    if (typeof cellValue === 'number') continue;

    // Check for the state code prefix "-"
    const DASH = cellValue.substring(0, 1);

    // Get neighboring cells
    offset1 = range1.offset(1, 0).getValue();
    offset2 = range1.offset(2, 0).getValue();
    offset3 = range1.offset(3, 0).getValue();

    // Handle state code "-"
    if (DASH === '-') {
      // Merge cells 1 and 2 and write "Order complete" in cell 2
      range1.offset(1, 0).setValue(offset1 + ' ' + offset2);
      range1.offset(2, 0).setValue('Order complete');
    }

    // Insert cell if offset 3 is not blank
    if (DASH === '-' && offset3 !== '') {
      // Select cells from 3 rows down
      SHEET.getRange(row + 1, 1, LAST_ROW)
        .offset(3, 0)
        .moveTo(range1.offset(4, 0));
    }
  }
}

Dengan mengikuti pengoptimuman ini, skrip akan mengurangkan masa pemprosesan dengan ketara dengan meminimumkan panggilan mahal ke Range.getValue() dan Range.setValue().

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Skrip Google Apps untuk Mengurangkan Masa Pemprosesan Berlebihan Disebabkan oleh Panggilan Range.getValue() dan Range.setValue() Kerap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn