|
@@ -19,6 +19,7 @@ var fileMinifier = require('./fileMinifier');
|
|
var gzipCompressor = require('./gzipCompressor');
|
|
var gzipCompressor = require('./gzipCompressor');
|
|
var contentTypeChecker = require('./contentTypeChecker');
|
|
var contentTypeChecker = require('./contentTypeChecker');
|
|
var fontAnalyzer = require('./fontAnalyzer');
|
|
var fontAnalyzer = require('./fontAnalyzer');
|
|
|
|
+var imageDimensions = require('./imageDimensions');
|
|
|
|
|
|
|
|
|
|
var Redownload = function() {
|
|
var Redownload = function() {
|
|
@@ -69,6 +70,8 @@ var Redownload = function() {
|
|
|
|
|
|
.then(imageOptimizer.optimizeImage)
|
|
.then(imageOptimizer.optimizeImage)
|
|
|
|
|
|
|
|
+ .then(imageDimensions.getDimensions)
|
|
|
|
+
|
|
.then(fileMinifier.minifyFile)
|
|
.then(fileMinifier.minifyFile)
|
|
|
|
|
|
.then(gzipCompressor.compressFile)
|
|
.then(gzipCompressor.compressFile)
|
|
@@ -142,9 +145,14 @@ var Redownload = function() {
|
|
|
|
|
|
|
|
|
|
// Image compression
|
|
// Image compression
|
|
- offenders.imageOptimization = listImageNotOptimized(results);
|
|
|
|
|
|
+ offenders.imageOptimization = listImagesNotOptimized(results);
|
|
metrics.imageOptimization = offenders.imageOptimization.totalGain;
|
|
metrics.imageOptimization = offenders.imageOptimization.totalGain;
|
|
|
|
|
|
|
|
+ // Image width
|
|
|
|
+ var isMobile = data.params.options.device === 'phone';
|
|
|
|
+ offenders.imagesTooLarge = listImagesTooLarge(results, isMobile);
|
|
|
|
+ metrics.imagesTooLarge = offenders.imagesTooLarge.length;
|
|
|
|
+
|
|
// File minification
|
|
// File minification
|
|
offenders.fileMinification = listFilesNotMinified(results);
|
|
offenders.fileMinification = listFilesNotMinified(results);
|
|
metrics.fileMinification = offenders.fileMinification.totalGain;
|
|
metrics.fileMinification = offenders.fileMinification.totalGain;
|
|
@@ -273,7 +281,7 @@ var Redownload = function() {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- function listImageNotOptimized(requests) {
|
|
|
|
|
|
+ function listImagesNotOptimized(requests) {
|
|
var results = {
|
|
var results = {
|
|
totalGain: 0,
|
|
totalGain: 0,
|
|
images: []
|
|
images: []
|
|
@@ -305,6 +313,26 @@ var Redownload = function() {
|
|
return results;
|
|
return results;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ function listImagesTooLarge(requests, isMobile) {
|
|
|
|
+ var results = [];
|
|
|
|
+
|
|
|
|
+ requests.forEach(function(req) {
|
|
|
|
+ if (req.weightCheck.bodySize > 0 &&
|
|
|
|
+ req.imageDimensions &&
|
|
|
|
+ ((isMobile && req.imageDimensions.width > 800) || req.imageDimensions.width > 1500)) {
|
|
|
|
+
|
|
|
|
+ results.push({
|
|
|
|
+ url: req.url,
|
|
|
|
+ weight: req.weightCheck.bodySize,
|
|
|
|
+ width: req.imageDimensions.width,
|
|
|
|
+ height: req.imageDimensions.height
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ return results;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
|
|
function listFilesNotMinified(requests) {
|
|
function listFilesNotMinified(requests) {
|
|
var results = {
|
|
var results = {
|