Lenteur lors de l'execution d'un Сценарий Google - PullRequest
0 голосов
/ 03 октября 2019

Чтобы справиться с миграцией сайта, у меня есть таблица, содержащая старые и соответствующие новые URL-адреса, итерирую по своему Google Sheet, чтобы провести сравнение со строкой, присутствующей в старом URP, для генерации нового URL.

Я создал сценарий, который выполняет итерацию по URL-адресам, но сценарий занимает много времени.

Не могли бы вы помочь мне оптимизировать сценарий?


Залить миграцию сайтаВсе, что вам нужно для сопоставления и сопоставления URL-адресов, страниц и других данных Google Sheet for faire cette Сравнение с указанием ориентиров и данных по URL-адресу.

J'' '' '' '' '' 'и' '' '' '' '»," Птица ")," Свернутый текст "и" URL-адреса и т. д. ")" Соответствие таблицам и сценариям ".

описание сценария оптимизатора?

function majURL() {
  var app = SpreadsheetApp ;
  var classeur = app.getActiveSpreadsheet() ;

  // Feuille URL à changer
  var fURL = classeur.getSheetByName("URL");
  var numMaxRowURLFinal = fURL.getRange("A1:A").getValues().filter(String).length; //nombre max d'URL
  //suppression ligne de titre

  // Feuille tableau de matching
  var fRedirection = classeur.getSheetByName("redirection");
  var numMaxRowURLRedirection = fRedirection.getRange("A1:A").getValues().filter(String).length; //nombre max du tableau de matching
  var domainURL = fRedirection.getRange(1, 3).getValue(); // ex: http://www.edigroup.ch


  var urlActuelle; //ex: "https://nom.du.site/juniors-9-a-13-ans/doc-abonnement-magazine.html";
  var oldRedirectionSelection; // ex: /juniors-9-a-13-ans
  var newRedirectionSelection; // ex: /jeunesse/juniors.html  
  var isMerged = false;

  for (var listUrlFinal=0; listUrlFinal<numMaxRowURLFinal; listUrlFinal++) {

    urlActuelle = fURL.getRange(listUrlFinal+2, 1).getValue();

    for (var i=0; i<numMaxRowURLRedirection; i++) {
      if(!isMerged){

        oldRedirectionSelection = fRedirection.getRange(i+1, 1).getValue(); // ex: /juniors-9-a-13-ans

        if(urlActuelle.search(oldRedirectionSelection).toFixed(0) > 0 ){

          newRedirectionSelection = fRedirection.getRange(i+1, 2).getValue(); // ex: /jeunesse/juniors.html
          fURL.getRange(listUrlFinal+2, 2).setValue(domainURL+""+newRedirectionSelection); // création de la nouvelle URL
          isMerged = true;
        }
      }
      newRedirectionSelection ="";
    }
    oldRedirectionSelection = "";
    newRedirectionSelection = "";
    isMerged = false;
  }
}

1 Ответ

0 голосов
/ 03 октября 2019

В вашем коде содержится много вызовов getValue();

Вызов внешних служб, включая службы SpreadsheetApp, замедляет выполнение кода, см. Рекомендации

Чтобы оптимизировать код,Вы должны получить весь свой диапазон один раз с getValues() вместо каждой итерации цикла for с getValue().

Кроме того, вы можете оптимизировать свой код, выйдя из внутреннего forцикл с break, как только вы нашли oldRedirectionSelection для текущей строки.

Пример:


function majURL() {
  var app = SpreadsheetApp ;
  var classeur = app.getActiveSpreadsheet() ;

// Feuille URL à changer
  var fURL = classeur.getSheetByName("URL");
  var numMaxRowURLFinal = fURL.getRange("A1:A").getValues().filter(String).length; //nombre max d'URL
  //suppression ligne de titre

  // Feuille tableau de matching
  var fRedirection = classeur.getSheetByName("redirection");
  var numMaxRowURLRedirection = fRedirection.getRange("A1:A").getValues().filter(String).length; //nombre max du tableau de matching
  var domainURL = fRedirection.getRange(1, 3).getValue(); // ex: http://www.edigroup.ch

  var urlActuelle; //ex: "https://nom.du.site/juniors-9-a-13-ans/doc-abonnement-magazine.html";
  var oldRedirectionSelection; // ex: /juniors-9-a-13-ans
  var newRedirectionSelection; // ex: /jeunesse/juniors.html  

  var arrUrlActuelle = fURL.getRange(2, 1,numMaxRowURLFinal,1).getValues();
  var arrOldRedirectionSelection = fRedirection.getRange(1, 1,numMaxRowURLRedirection,1).getValues();  

  for (var listUrlFinal=0; listUrlFinal<numMaxRowURLFinal; listUrlFinal++) {
   urlActuelle=arrUrlActuelle[listUrlFinal][0];
    for2:
    for (var i=0; i<numMaxRowURLRedirection; i++) {
      {
        oldRedirectionSelection = arrOldRedirectionSelection[i][0]; // ex: /juniors-9-a-13-ans         
        if(urlActuelle.search(oldRedirectionSelection).toFixed(0) > 0 ){

          newRedirectionSelection = fRedirection.getRange(i+1, 2).getValue(); // ex: /jeunesse/juniors.html
          fURL.getRange(listUrlFinal+2, 2).setValue(domainURL+""+newRedirectionSelection); // création de la nouvelle URL
          break for2;
        }
      }
      newRedirectionSelection ="";
    }
    oldRedirectionSelection = "";
    newRedirectionSelection = "";
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...