#execution #timing
Вопрос:
Я использую один и тот же код уже более года, в последнее время никаких изменений не вносил. Вчера код работал, но сегодня он работает с перебоями, и я ошеломлен и не знаю, в чем здесь проблема.
Сценарий продолжает отсчитывать время примерно через 6 минут, что является максимальным временем выполнения. В моей электронной таблице около 3000 строк. Это слишком много для Google?
Что я сделал, так это скопировал рабочий лист на другой, удалил около 2000 строк, и теперь, похоже, это работает.
Почему Google может обрабатывать так мало, и что происходит внутри маленького мозга Google, когда он доходит до 3000 строк?
Есть ли какой-нибудь способ решить эту проблему?
Начало моего кода выглядит следующим образом:
function onEdit(){ var TargetSheet = 'Geroba'; var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var datass = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("List20") var dataP = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ListP") var sname = ss.getName(); // Lists Logger.log(sname); Logger.log(TargetSheet); if (sname == TargetSheet) { var activeCell = ss.getActiveCell(); if(activeCell.getColumn() == 10 amp;amp; activeCell.getRow() gt; 4){ Browser.msgBox(TargetSheet); activeCell.offset(0, 1).clearContent().clearDataValidations(); // Clears Series activeCell.offset(0, 2).clearContent().clearDataValidations(); // Clears Code activeCell.offset(0, 3).clearContent().clearDataValidations(); // Clears Material activeCell.offset(0, 4).clearContent(); // Clears Extra (for Standard) activeCell.offset(0, 5).clearContent(); // Clears Item description activeCell.offset(0, 6).clearContent(); // Clears Weight (kg) activeCell.offset(0, 7).clearContent(); // Clears RAL activeCell.offset(0, 8).clearContent(); // Clears Qty activeCell.offset(0, 9).clearContent(); // Clears Price Quoted from activeCell.offset(0, 11).clearContent(); // Clears Unit Price activeCell.offset(0, 12).clearContent(); // Clears Price after discount activeCell.offset(0, 21).clearContent(); // Clears "Standard" from Drawing Status column activeCell.offset(0, 22).clearContent(); // Clears Design link pathway var CategoriesS2 = datass.getRange(2, 3, 1, 28).getValues(); // row, column, numRows, numColumns var makeIndex2 = CategoriesS2[0].indexOf(activeCell.getValue()) 3; if(makeIndex2 != 0) { var validationRangeSeries2 = datass.getRange(3, makeIndex2, 40); // datass.getLastRow()); var validationRuleSeries2 = SpreadsheetApp.newDataValidation().requireValueInRange(validationRangeSeries2).setAllowInvalid(true).build(); activeCell.offset(0, 1).setDataValidation(validationRuleSeries2); } } } }
Комментарии:
1. Сталкивались ли вы с какими-либо конкретными ошибками? Если в скрипте возникают тайм-ауты, это может быть связано со многими причинами, такими как слишком долгий ответ на внешний HTTP, застревание кода в цикле и многие другие причины. Будет чрезвычайно сложно устранить точную природу вашей проблемы без дополнительной информации. Если у вас есть настройка ведения журнала через Google Cloud, поделитесь ею также. Что касается строк кода: у меня были гораздо более крупные проекты, выполняемые в сценарии приложения; до сих пор я не заметил никаких проблем из-за размера проекта.
2. Я не сталкивался ни с какими ошибками, только с тайм-аутами. Я не уверен, что вы подразумеваете под внешним HTTP, который слишком долго не отвечает. Я знаю, что когда я сохранил файл, удалил 2000 строк, он работал нормально. Как настроить ведение журнала через Google Cloud
3. Вы можете перейти в настройки своего проекта и добавить идентификатор проекта созданного вами облачного проекта Google. Тогда все ошибки будут доступны в журнале регистрации. Также, если возможно, добавьте некоторые
console.log
из них в свой код, чтобы отследить его выполнение. Это поможет вам понять, что эти функции в вашем коде занимают слишком много времени. Вы также можете проверитьconsole.time
иconsole.timeEnd
рассчитать время выполнения своих функций.