-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Externaliser le code de l'analyseur #21
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -162,7 +162,7 @@ function extractBestPractices(bestPracticesFromReport) { | |
} | ||
|
||
function writeGlobalReport(templateEngine, globalReportVariables, outputFile) { | ||
templateEngine.processFile('cli-core/template/global.html', globalReportVariables) | ||
templateEngine.processFile(__dirname + '/template/global.html', globalReportVariables) | ||
.then(globalReportHtml => { | ||
fs.writeFileSync(outputFile, globalReportHtml); | ||
}) | ||
|
@@ -173,7 +173,7 @@ function writeGlobalReport(templateEngine, globalReportVariables, outputFile) { | |
|
||
function writeAllReports(templateEngine, allReportsVariables, outputFolder) { | ||
allReportsVariables.forEach(reportVariables => { | ||
templateEngine.processFile('cli-core/template/page.html', reportVariables) | ||
templateEngine.processFile(__dirname + '/template/page.html', reportVariables) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Idem, en faisant un rebase de la master, cela a déjà été corrigé There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Idem, en faisant un rebase de la master, cela a déjà été corrigé |
||
.then(singleReportHtml => { | ||
fs.writeFileSync(`${outputFolder}/${reportVariables.filename}`, singleReportHtml); | ||
}) | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,20 +16,20 @@ | |
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
function start_analyse_core() { | ||
function start_analyse_core(document, analyseBestPractices) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Les modifications réalisés dans ce fichier me fait pose un peu un problème... Cela nécessite de modifier le coeur du plugin GreenIT-Analysis. En conséquence, lorsqu'on a besoin de mettre à jour le coeur de GreenIT-Analysis dans GreenIT-Analysis-cli, cela sera beaucoup plus compliqué... Je continue à réfléchir pour voir si on a une meilleure façon de gérer la mise à jour de GreenIT-Analysis et répondre à la problématique que tu proposes de corriger. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Les modifications réalisés dans ce fichier me fait pose un peu un problème... Cela nécessite de modifier le coeur du plugin GreenIT-Analysis. En conséquence, lorsqu'on a besoin de mettre à jour le coeur de GreenIT-Analysis dans GreenIT-Analysis-cli, cela sera beaucoup plus compliqué... Je continue à réfléchir pour voir si on a une meilleure façon de gérer la mise à jour de GreenIT-Analysis et répondre à la problématique que tu proposes de corriger. |
||
const analyseStartingTime = Date.now(); | ||
const dom_size = document.getElementsByTagName("*").length; | ||
let pageAnalysis; | ||
|
||
if (analyseBestPractices) { | ||
// test with http://www.wickham43.net/flashvideo.php | ||
const pluginsNumber = getPluginsNumber(); | ||
const printStyleSheetsNumber = getPrintStyleSheetsNumber(); | ||
const inlineStyleSheetsNumber = getInlineStyleSheetsNumber(); | ||
const emptySrcTagNumber = getEmptySrcTagNumber(); | ||
const inlineJsScript = getInlineJsScript(); | ||
const inlineJsScriptsNumber = getInlineJsScriptsNumber(); | ||
const imagesResizedInBrowser = getImagesResizedInBrowser(); | ||
const pluginsNumber = getPluginsNumber(document); | ||
const printStyleSheetsNumber = getPrintStyleSheetsNumber(document); | ||
const inlineStyleSheetsNumber = getInlineStyleSheetsNumber(document); | ||
const emptySrcTagNumber = getEmptySrcTagNumber(document); | ||
const inlineJsScript = getInlineJsScript(document); | ||
const inlineJsScriptsNumber = getInlineJsScriptsNumber(document); | ||
const imagesResizedInBrowser = getImagesResizedInBrowser(document); | ||
|
||
|
||
pageAnalysis = { | ||
|
@@ -55,26 +55,26 @@ function start_analyse_core() { | |
|
||
} | ||
|
||
function getPluginsNumber() { | ||
function getPluginsNumber(document) { | ||
const plugins = document.querySelectorAll('object,embed'); | ||
return (plugins === undefined) ? 0 : plugins.length; | ||
} | ||
|
||
|
||
|
||
function getEmptySrcTagNumber() { | ||
function getEmptySrcTagNumber(document) { | ||
return document.querySelectorAll('img[src=""]').length | ||
+ document.querySelectorAll('script[src=""]').length | ||
+ document.querySelectorAll('link[rel=stylesheet][href=""]').length; | ||
} | ||
|
||
|
||
function getPrintStyleSheetsNumber() { | ||
function getPrintStyleSheetsNumber(document) { | ||
return document.querySelectorAll('link[rel=stylesheet][media~=print]').length | ||
+ document.querySelectorAll('style[media~=print]').length; | ||
} | ||
|
||
function getInlineStyleSheetsNumber() { | ||
function getInlineStyleSheetsNumber(document) { | ||
let styleSheetsArray = Array.from(document.styleSheets); | ||
let inlineStyleSheetsNumber = 0; | ||
styleSheetsArray.forEach(styleSheet => { | ||
|
@@ -90,7 +90,7 @@ return inlineStyleSheetsNumber; | |
} | ||
|
||
|
||
function getInlineJsScript() { | ||
function getInlineJsScript(document) { | ||
let scriptArray = Array.from(document.scripts); | ||
let scriptText = ""; | ||
scriptArray.forEach(script => { | ||
|
@@ -100,7 +100,7 @@ function getInlineJsScript() { | |
return scriptText; | ||
} | ||
|
||
function getInlineJsScriptsNumber() { | ||
function getInlineJsScriptsNumber(document) { | ||
let scriptArray = Array.from(document.scripts); | ||
let inlineScriptNumber = 0; | ||
scriptArray.forEach(script => { | ||
|
@@ -111,7 +111,7 @@ function getInlineJsScriptsNumber() { | |
} | ||
|
||
|
||
function getImagesResizedInBrowser() { | ||
function getImagesResizedInBrowser(document) { | ||
const imgArray = Array.from(document.querySelectorAll('img')); | ||
let imagesResized = []; | ||
imgArray.forEach(img => { | ||
|
@@ -132,3 +132,7 @@ function getImagesResizedInBrowser() { | |
}); | ||
return imagesResized; | ||
} | ||
|
||
module.exports = { | ||
start_analyse_core | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
const {translator} = require("../cli-core/translator"); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On est en train d'inclure des dépendances du greenit-core dans cli-core et inversement... Je réfléchis aussi pour voir si on peut faire mieux There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. On est en train d'inclure des dépendances du greenit-core dans cli-core et inversement... Je réfléchis aussi pour voir si on peut faire mieux |
||
|
||
chrome = { | ||
"i18n": { | ||
"getMessage": function (message, parameters = []) { | ||
return translator.getCatalog()[message].replace(/%s/g, function () { | ||
// parameters is string or array | ||
return Array.isArray(parameters) ? parameters.shift() : parameters; | ||
}); | ||
} | ||
} | ||
}; | ||
|
||
module.exports = { | ||
chrome | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,17 +16,48 @@ | |
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
const utils = require('./utils.js'); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Au fur et à mesure de la lecture de la PR, je vois que par la suite, beaucoup de code faisant parti du coeur de GreenIT-Analysis sont modifiés, ce qui n'est pas le but non plus de GreenIT-Analysis-cli qui est simplement une extension. Il faut tout de même qu'on trouve une solution pour répondre à la problématique que tu remontes. En utilisant le plugin GreenIT-Analysis, as-tu aussi des erreurs CSP ? |
||
const {start_analyse_core} = require("./analyseFrameCore"); | ||
const { | ||
computeEcoIndex, computeWaterConsumptionfromEcoIndex, computeGreenhouseGasesEmissionfromEcoIndex, | ||
getEcoIndexGrade | ||
} = require("./ecoIndex"); | ||
const {isNetworkResource, isDataResource} = require("./utils"); | ||
const {registerAddExpiresOrCacheControlHeaders} = require("./rules/AddExpiresOrCacheControlHeaders"); | ||
const {registerCompressHttp} = require("./rules/CompressHttp"); | ||
const {registerDontResizeImageInBrowser} = require("./rules/DontResizeImageInBrowser"); | ||
const {registerDomainsNumber} = require("./rules/DomainsNumber"); | ||
const {registerEmptySrcTag} = require("./rules/EmptySrcTag"); | ||
const {registerExternalizeCss} = require("./rules/ExternalizeCss"); | ||
const {registerExternalizeJs} = require("./rules/ExternalizeJs"); | ||
const {registerHttpError} = require("./rules/HttpError"); | ||
const {registerHttpRequests} = require("./rules/HttpRequests"); | ||
const {registerImageDownloadedNotDisplayed} = require("./rules/ImageDownloadedNotDisplayed"); | ||
const {registerJsValidate} = require("./rules/JsValidate"); | ||
const {registerMaxCookiesLength} = require("./rules/MaxCookiesLength"); | ||
const {registerMinifiedCss} = require("./rules/MinifiedCss"); | ||
const {registerMinifiedJs} = require("./rules/MinifiedJs"); | ||
const {registerNoCookieForStaticRessources} = require("./rules/NoCookieForStaticRessources"); | ||
const {registerNoRedirect} = require("./rules/NoRedirect"); | ||
const {registerOptimizeBitmapImages} = require("./rules/OptimizeBitmapImages"); | ||
const {registerOptimizeSvg} = require("./rules/OptimizeSvg"); | ||
const {registerPlugins} = require("./rules/Plugins"); | ||
const {registerPrintStyleSheet} = require("./rules/PrintStyleSheet"); | ||
const {registerSocialNetworkButton} = require("./rules/SocialNetworkButton"); | ||
const {registerStyleSheets} = require("./rules/StyleSheets"); | ||
const {registerUseETags} = require("./rules/UseETags"); | ||
const {registerUseStandardTypefaces} = require("./rules/UseStandardTypefaces"); | ||
const RulesManager = require('./rulesManager.js').RulesManager | ||
|
||
let backgroundPageConnection; | ||
let currentRulesChecker; | ||
let lastAnalyseStartingTime = 0; | ||
let measuresAcquisition; | ||
let analyseBestPractices = true; | ||
let har; | ||
let resources; | ||
|
||
function handleResponseFromBackground(frameMeasures) { | ||
if (isOldAnalyse(frameMeasures.analyseStartingTime)) { | ||
debug(() => `Analyse is too old for url ${frameMeasures.url} , time = ${frameMeasures.analyseStartingTime}`); | ||
utils.debug(() => `Analyse is too old for url ${frameMeasures.url} , time = ${frameMeasures.analyseStartingTime}`); | ||
return; | ||
} | ||
measuresAcquisition.aggregateFrameMeasures(frameMeasures); | ||
|
@@ -41,21 +72,42 @@ function computeEcoIndexMeasures(measures) { | |
measures.grade = getEcoIndexGrade(measures.ecoIndex); | ||
} | ||
|
||
function registerRules(rulesManager) { | ||
registerAddExpiresOrCacheControlHeaders(rulesManager) | ||
registerCompressHttp(rulesManager) | ||
registerDontResizeImageInBrowser(rulesManager) | ||
registerDomainsNumber(rulesManager) | ||
registerEmptySrcTag(rulesManager) | ||
registerExternalizeCss(rulesManager) | ||
registerExternalizeJs(rulesManager) | ||
registerHttpError(rulesManager) | ||
registerHttpRequests(rulesManager) | ||
registerImageDownloadedNotDisplayed(rulesManager) | ||
registerJsValidate(rulesManager) | ||
registerMaxCookiesLength(rulesManager) | ||
registerMinifiedCss(rulesManager) | ||
registerMinifiedJs(rulesManager) | ||
registerNoCookieForStaticRessources(rulesManager) | ||
registerNoRedirect(rulesManager) | ||
registerOptimizeBitmapImages(rulesManager) | ||
registerOptimizeSvg(rulesManager) | ||
registerPlugins(rulesManager) | ||
registerPrintStyleSheet(rulesManager) | ||
registerSocialNetworkButton(rulesManager) | ||
registerStyleSheets(rulesManager) | ||
registerUseETags(rulesManager) | ||
registerUseStandardTypefaces(rulesManager) | ||
} | ||
|
||
function launchAnalyse() { | ||
let now = Date.now(); | ||
|
||
// To avoid parallel analyse , force 1 secondes between analysis | ||
if (now - lastAnalyseStartingTime < 1000) { | ||
debug(() => "Ignore click"); | ||
return; | ||
} | ||
lastAnalyseStartingTime = now; | ||
async function launchAnalyse(document, har, resources) { | ||
lastAnalyseStartingTime = Date.now(); | ||
let rulesManager = new RulesManager() | ||
registerRules(rulesManager); | ||
currentRulesChecker = rulesManager.getNewRulesChecker(); | ||
measuresAcquisition = new MeasuresAcquisition(currentRulesChecker); | ||
measuresAcquisition.initializeMeasures(); | ||
measuresAcquisition.aggregateFrameMeasures(start_analyse_core()) | ||
measuresAcquisition.startMeasuring(); | ||
measuresAcquisition.aggregateFrameMeasures(start_analyse_core(document, analyseBestPractices)) | ||
measuresAcquisition.startMeasuring(har, resources); | ||
let returnObj = measuresAcquisition.getMeasures(); | ||
returnObj.bestPractices = measuresAcquisition.getBestPractices() | ||
return returnObj; | ||
|
@@ -88,9 +140,9 @@ function MeasuresAcquisition(rules) { | |
}; | ||
} | ||
|
||
this.startMeasuring = function () { | ||
getNetworkMeasure(); | ||
if (analyseBestPractices) getResourcesMeasure(); | ||
this.startMeasuring = function (har, resources) { | ||
getNetworkMeasure(har); | ||
if (analyseBestPractices) getResourcesMeasure(resources); | ||
} | ||
|
||
this.getMeasures = () => measures; | ||
|
@@ -126,18 +178,18 @@ function MeasuresAcquisition(rules) { | |
|
||
|
||
|
||
const getNetworkMeasure = () => { | ||
const getNetworkMeasure = (har) => { | ||
|
||
console.log("Start network measure..."); | ||
// only account for network traffic, filtering resources embedded through data urls | ||
let entries = har.entries.filter(entry => isNetworkResource(entry)); | ||
|
||
// Get the "mother" url | ||
// Get the "mother" url | ||
if (entries.length > 0) measures.url = entries[0].request.url; | ||
else { | ||
// Bug with firefox when we first get har.entries when starting the plugin , we need to ask again to have it | ||
// Bug with firefox when we first get har.entries when starting the plugin , we need to ask again to have it | ||
if (nbGetHarTry < 1) { | ||
debug(() => 'No entries, try again to get HAR in 1s'); | ||
utils.debug(() => 'No entries, try again to get HAR in 1s'); | ||
nbGetHarTry++; | ||
setTimeout(getNetworkMeasure, 1000); | ||
} | ||
|
@@ -170,7 +222,7 @@ function MeasuresAcquisition(rules) { | |
} | ||
} | ||
|
||
function getResourcesMeasure() { | ||
function getResourcesMeasure(resources) { | ||
resources.forEach(resource => { | ||
if (resource.url.startsWith("file") || resource.url.startsWith("http")) { | ||
if ((resource.type === 'script') || (resource.type === 'stylesheet') || (resource.type === 'image')) { | ||
|
@@ -234,3 +286,7 @@ function storeAnalysisInHistory() { | |
|
||
localStorage.setItem("analyse_history", JSON.stringify(analyse_history)); | ||
} | ||
|
||
module.exports = { | ||
launchAnalyse | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Il faudrait faire un rebase de la master : cela a été corrigé récemment