Google Apps Скрипт Rhino против производительности V8 (343 мс против 45 042 мс)

#google-apps-script #v8 #rhino

Вопрос:

Я создал скрипт google apps, развернутый как веб-приложение, выполняемое как «user_deploying» и доступное «anyone_anonymos». Выполнение этого с Rhino занимает 343 мс, а выполнение этого с V8 занимает 45 042 мс, как рассчитано по отметкам в приведенном ниже коде. В чем разница и как я могу повысить производительность V8, в частности Mark II?

Среднее время выполнения в мс (rhino/V8):

  • 227/497 Отметка I — Jdbc.getCloudSqlConnection()
  • 112/44,497 Отметка II — В то время как(результаты.далее()) {}
  • 5/49 Марк III — тесные соединения

код:

 // GET SCENARIO LIST
function getScenarioQuickList() {

  var start = new Date().getTime();

  var conn = Jdbc.getCloudSqlConnection('jdbc:google:mysql://...', user, userPwd);

  var query = 'SELECT a.`lvl`, a.`pubShort`, a.`scenTitle`, a.`pdfLink`';
    query  = 'FROM `SA` a WHERE a.`scenId` <> "ZZZ99998" AND a.`scenId` <> "ZZZ99999" ORDER BY a.`scenId`;';
      
  var stmt = conn.prepareStatement(query);
  
  var results = stmt.executeQuery();
  
  var scenList = [];

  console.log(new Date().getTime()-start);  // mark 1
  
  // Push results to array

  start = new Date().getTime();

  while (results.next()) {
    scenList.push({
      'lvl': results.getString(1),
      'pubShort': results.getString(2),
      'scenTitle': results.getString(3),
      'pdfLink': results.getString(4),
    }); // close push
  } // close while
  
  console.log(new Date().getTime()-start); // mark 2

  start = new Date().getTime();

  results.close();
  stmt.close();
  conn.close();
  
  console.log(new Date().getTime()-start); // mark 3

  return scenList;

}
 

Комментарии:

1. У нескольких других пользователей возникли проблемы с производительностью JDBC в версии 8. Возможно, вам следует присоединиться к хору и опубликовать это как проблему.

2. Когда я попытался воспроизвести это, я заметил большую разницу в производительности только при повторении набора JdbcResultSet, в данном случае через next () . Другие действия, такие как попытка подключения или выполнение запроса, по-видимому, не показывают существенной разницы (в моем случае в V8 иногда это происходит быстрее). Не могли бы вы, пожалуйста, проверить, так ли это и для вас? Или вы замечали это в других ситуациях?

3. @lamblichus — увидев результаты выше, я затем переключил шесть или семь своих сценариев приложений на Rhino и увидел аналогичные улучшения. Мне не нужно было тестировать, потому что производительность была явно лучше. Я использую их только на сайте Google, и, по крайней мере, некоторые из них изначально были созданы с использованием Rhino, а позже перешли на V8. Спасибо, Скотт

Ответ №1:

Это может быть ошибка:

Я смог воспроизвести это поведение для методов, соответствующих JdbcResultSet, особенно при повторении результатов приличного размера. Время выполнения в V8 во многих случаях намного выше, чем в Rhino.

Интересно, что это кажется прерывистым, так как иногда производительность аналогична.

Об этом сообщается в трекере проблем:

Принимая все это во внимание, я пошел дальше и сообщил об этом поведении в трекере проблем:

Всех, кого это касается, пожалуйста, подумайте о том, чтобы подписаться на этот выпуск, разместив его в главной роли, чтобы отслеживать это и помогать расставлять приоритеты.