Google Apps Script Rhino 与 V8 性能对比(343 毫秒对比 45,042 毫秒)
Google Apps Script Rhino vs V8 Performance (343ms v 45,042ms)
我创建了一个 google 应用程序脚本,部署为网络应用程序,执行为“user_deploying”,可由“anyone_anonymos”访问。使用 Rhino 执行此操作需要 343 毫秒,使用 V8 执行此操作需要 45,042 毫秒,根据以下代码中的标记计算。为什么会有差异?我如何才能提高 V8 的性能,特别是 Mark II?
平均执行时间(以毫秒为单位)(rhino/V8):
- 227/497 标记 I - Jdbc.getCloudSqlConnection()
- 112/44,497 Mark II - While(results.next()) {}
- 5/49 Mark 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;
}
这可能是一个错误:
我已经能够为对应于 JdbcResultSet 的方法重现此行为,尤其是在遍历适当大小的结果时。在许多情况下,V8 中的执行时间比 Rhino 中的执行时间要长得多。
有趣的是,这似乎是间歇性的,因为有时性能相似。
在问题跟踪器中报告:
考虑到所有这些因素,我已经在 Issue Tracker 中报告了此行为:
受此影响的任何人,请考虑 subscribing to this issue by starring it 以跟踪此事并帮助确定优先级。
我创建了一个 google 应用程序脚本,部署为网络应用程序,执行为“user_deploying”,可由“anyone_anonymos”访问。使用 Rhino 执行此操作需要 343 毫秒,使用 V8 执行此操作需要 45,042 毫秒,根据以下代码中的标记计算。为什么会有差异?我如何才能提高 V8 的性能,特别是 Mark II?
平均执行时间(以毫秒为单位)(rhino/V8):
- 227/497 标记 I - Jdbc.getCloudSqlConnection()
- 112/44,497 Mark II - While(results.next()) {}
- 5/49 Mark 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;
}
这可能是一个错误:
我已经能够为对应于 JdbcResultSet 的方法重现此行为,尤其是在遍历适当大小的结果时。在许多情况下,V8 中的执行时间比 Rhino 中的执行时间要长得多。
有趣的是,这似乎是间歇性的,因为有时性能相似。
在问题跟踪器中报告:
考虑到所有这些因素,我已经在 Issue Tracker 中报告了此行为:
受此影响的任何人,请考虑 subscribing to this issue by starring it 以跟踪此事并帮助确定优先级。