#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.
Интересно, что это кажется прерывистым, так как иногда производительность аналогична.
Об этом сообщается в трекере проблем:
Принимая все это во внимание, я пошел дальше и сообщил об этом поведении в трекере проблем:
Всех, кого это касается, пожалуйста, подумайте о том, чтобы подписаться на этот выпуск, разместив его в главной роли, чтобы отслеживать это и помогать расставлять приоритеты.