谷歌网页上的PageSpeed Insights对多个URL的运行速度非常慢



我目前使用Google PageSpeed Insights在Google Sheets上运行每日导出。最近添加了更多的URL,每个URL不再需要大约30秒(只有一个(,现在需要1分钟,超过了谷歌脚本的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的响应。

资源

  • https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchallrequests

最新更新