Google 表格上的 PageSpeed Insights 对于多个 URL 运行 非常慢
PageSpeed Insights on Google Sheets is running very slowly for multiple URLs
我目前 运行 使用 Google PageSpeed Insights 在 Google 表格上每日导出。最近添加了更多 URLs,而不是每个 URL 花费大约 30 秒(只有一个),现在需要 1 分钟,超过了 Google 脚本的 6 分钟最大值。
我修改了代码以添加一个循环以包含多个 URL。是因为我调用函数 CALLPAGESPEED 的次数太多了吗?你有简单的优化吗?
代码如下:
var scriptProperties = PropertiesService.getScriptProperties();
var pageSpeedApiKey = scriptProperties.getProperty('PSI_API_KEY');
var pageSpeedMonitorUrls = [
'https://www.metro.ca/en/online-grocery',
'https://voila.ca/',
'https://www.loblaws.ca/',
'https://www.walmart.ca/en',
'https://www.amazon.ca/',
'https://www.grocerygateway.com/store/groceryGateway/en/',
'https://www.iga.net/en/online_grocery'
];
function monitor() {
for (var i = 0; i < pageSpeedMonitorUrls.length; i++) {
var url = pageSpeedMonitorUrls[i];
var desktop = callPageSpeed(url,'desktop');
var mobile = callPageSpeed(url,'mobile');
displaydata(url,desktop,mobile);
}
}
function callPageSpeed(url,strategy) {
var pageSpeedUrl = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=' + url + '&key=' + pageSpeedApiKey + '&strategy=' + strategy;
var response = UrlFetchApp.fetch(pageSpeedUrl);
var json = response.getContentText();
return JSON.parse(json);
}
function displaydata(url,desktop,mobile){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('Sheet1');
sheet.appendRow([
Utilities.formatDate(new Date(), 'GMT-5', 'yyyy-MM-dd'),
Utilities.formatDate(new Date(), 'GMT-5', 'HH'),
url,
desktop['lighthouseResult']['categories']['performance']['score'] * 100,
desktop['lighthouseResult']['audits']['metrics']['details']['items'][0]['firstContentfulPaint']/1000,
desktop['lighthouseResult']['audits']['metrics']['details']['items'][0]['speedIndex']/1000,
desktop['lighthouseResult']['audits']['metrics']['details']['items'][0]['interactive']/1000,
mobile['lighthouseResult']['categories']['performance']['score'] * 100,
mobile['lighthouseResult']['audits']['metrics']['details']['items'][0]['firstContentfulPaint']/1000,
mobile['lighthouseResult']['audits']['metrics']['details']['items'][0]['speedIndex']/1000,
mobile['lighthouseResult']['audits']['metrics']['details']['items'][0]['interactive']/1000
]);
}
谢谢!
您可以通过更改将数据添加到电子表格的方式来减少脚本的执行时间。
函数 displayData
使用 appendRow
添加数据,它包含在 for 循环中。这会使您的脚本变慢。
提高性能的一种方法是更改displayData
以构建行的数组(让调用values
),然后,在循环之后, 使用 setValues(values)
一次添加所有 行
您也可以尝试 UrlFetchApp.fetchAll
而不是 UrlFechApp.fetch
,因此只需调用 URL 获取服务,您就可以获得所有 URL 的响应。
资源
我目前 运行 使用 Google PageSpeed Insights 在 Google 表格上每日导出。最近添加了更多 URLs,而不是每个 URL 花费大约 30 秒(只有一个),现在需要 1 分钟,超过了 Google 脚本的 6 分钟最大值。
我修改了代码以添加一个循环以包含多个 URL。是因为我调用函数 CALLPAGESPEED 的次数太多了吗?你有简单的优化吗?
代码如下:
var scriptProperties = PropertiesService.getScriptProperties();
var pageSpeedApiKey = scriptProperties.getProperty('PSI_API_KEY');
var pageSpeedMonitorUrls = [
'https://www.metro.ca/en/online-grocery',
'https://voila.ca/',
'https://www.loblaws.ca/',
'https://www.walmart.ca/en',
'https://www.amazon.ca/',
'https://www.grocerygateway.com/store/groceryGateway/en/',
'https://www.iga.net/en/online_grocery'
];
function monitor() {
for (var i = 0; i < pageSpeedMonitorUrls.length; i++) {
var url = pageSpeedMonitorUrls[i];
var desktop = callPageSpeed(url,'desktop');
var mobile = callPageSpeed(url,'mobile');
displaydata(url,desktop,mobile);
}
}
function callPageSpeed(url,strategy) {
var pageSpeedUrl = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=' + url + '&key=' + pageSpeedApiKey + '&strategy=' + strategy;
var response = UrlFetchApp.fetch(pageSpeedUrl);
var json = response.getContentText();
return JSON.parse(json);
}
function displaydata(url,desktop,mobile){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('Sheet1');
sheet.appendRow([
Utilities.formatDate(new Date(), 'GMT-5', 'yyyy-MM-dd'),
Utilities.formatDate(new Date(), 'GMT-5', 'HH'),
url,
desktop['lighthouseResult']['categories']['performance']['score'] * 100,
desktop['lighthouseResult']['audits']['metrics']['details']['items'][0]['firstContentfulPaint']/1000,
desktop['lighthouseResult']['audits']['metrics']['details']['items'][0]['speedIndex']/1000,
desktop['lighthouseResult']['audits']['metrics']['details']['items'][0]['interactive']/1000,
mobile['lighthouseResult']['categories']['performance']['score'] * 100,
mobile['lighthouseResult']['audits']['metrics']['details']['items'][0]['firstContentfulPaint']/1000,
mobile['lighthouseResult']['audits']['metrics']['details']['items'][0]['speedIndex']/1000,
mobile['lighthouseResult']['audits']['metrics']['details']['items'][0]['interactive']/1000
]);
}
谢谢!
您可以通过更改将数据添加到电子表格的方式来减少脚本的执行时间。
函数 displayData
使用 appendRow
添加数据,它包含在 for 循环中。这会使您的脚本变慢。
提高性能的一种方法是更改displayData
以构建行的数组(让调用values
),然后,在循环之后, 使用 setValues(values)
您也可以尝试 UrlFetchApp.fetchAll
而不是 UrlFechApp.fetch
,因此只需调用 URL 获取服务,您就可以获得所有 URL 的响应。
资源