Статьи

5 основных задач, которые улучшают производительность вашего сайта

Много раз в SitePoint я упоминал о том, что достижение высокой производительности является главной задачей сегодня и как вам следует стремиться к быстрым веб-страницам. В некоторых моих статьях о API-интерфейсах JavaScript, таких как Введение в API синхронизации ресурсов и Обнаружение API синхронизации пользователей , я дал вам все, что вам нужно, чтобы знать, что замедляет ваш проект. Ранее в этом году Крейг Баклер также освещал эту тему в своей статье «Полное руководство по снижению веса страницы» .

Если вы не застряли в прошлом, скорее всего, вы используете такой бегунок задач, как Grunt или Gulp, чтобы улучшить рабочий процесс за счет автоматизации многих операций, которые мы выполняли вручную. В этой статье я опишу пять задач Grunt, которые помогут нам повысить производительность наших веб-страниц.

Грунт-вно-imagemin

Первая задача, которую я хочу упомянуть, это grunt-contrib-imagemin . Причина, по которой я хочу обсудить это в первую очередь, заключается в том, что изображения убивают сеть. Шутки в сторону!

Если вы посмотрите на статистику HTTParchive.org, то увидите, что изображения составляют более 63% от общего размера страницы. Причиной такого раздувания является то, что часто изображения не сжимаются, чтобы иметь как можно меньший вес. grunt-contrib-imagemin — это одна из задач, которую вы можете использовать для решения этой проблемы.

Эта задача поставляется со следующими оптимизаторами для сжатия большинства форматов изображений, используемых в Интернете:

  • Gifsicle для сжатия изображений GIF
  • jpegtran для сжатия изображений JPEG
  • optipng для сжатия изображений PNG
  • svgo для сжатия изображений SVG

Пример конфигурации для этой задачи показан ниже:

imagemin: { dist: { options: { optimizationLevel: 5 }, files: [{ expand: true, cwd: 'src/images', src: ['**/*.{png,jpg,gif}'], dest: 'dist/' }] } } 

Эта конфигурация обеспечивает высокий уровень оптимизации с помощью опции optimLevel. Это значение варьируется от 0 до 7, с 3 по умолчанию. В этом случае оптимизируются изображения с расширением png, jpg или gif, расположенные в папке «src / images» и во всех ее подпапках. Результат оптимизации будет сохранен в папке «dist».

Грунт-вно-уродовать

Задача grunt-contrib-uglify используется для минимизации файлов JavaScript. Эта задача удаляет все ненужные пробелы, которые есть в вашем исходном коде, и последовательно переименовывает переменные и функции, чтобы использовать как можно более короткое имя.

Некоторые опции, которые вы часто будете использовать для этой задачи, это sourceMap и banner . Первый создает исходный файл карты в том же каталоге, что и целевой файл. Чтобы включить эту опцию, вы должны установить для нее значение true (по умолчанию установлено значение false ). banner — это строка для добавления к минимизированному выводу, в которой вы обычно пишете имя файла / библиотеки / фреймворка, его версию, ваше имя как автора и лицензию. Значением по умолчанию является пустая строка.

Чтобы дать вам представление о том, как выглядит минимизированный источник, предположим, что у вас есть следующий код JavaScript:

 var MyApplication = function() { var data = 'hello'; this.sum = function(first, second) { return first + second; } this.showData = function() { return data; } }; 

Процесс минимизации преобразует его в следующий код:

 var MyApplication=function(){var a="hello";this.sum=function(a,b){return a+b},this.showData=function(){return a}}; 

Пример конфигурации этого инструмента показан ниже:

 uglify: { dist: { options: { sourceMap: true, banner: }, files: { 'dest/output.min.js': ['src/input.js'], } } } 

Грунт-вно-cssmin

Как следует из названия, grunt-contrib-cssmin сжимает файлы CSS. Как и в случае задачи grunt-contrib-uglify , в этой задаче есть banner .

Простая конфигурация для этой задачи:

 cssmin: { dist: { options: { banner: }, files: { 'dist/css/style.min.css': ['src/css/**/*.css'] } } } 

В этом примере минимизируются все CSS-файлы, хранящиеся в «src / css» и его подпапках, и сохраняется результат в одной таблице стилей под названием «style.min.css», которая помещается в папку «dist / css». Кроме того, конфигурация добавляет баннер в верхней части уменьшенного файла.

Грунт-uncss

Другая задача, связанная с CSS, — это grunt-uncss . Эта задача удаляет неиспользуемый CSS из проекта, поэтому уменьшает размер конечного файла CSS и, таким образом, сокращает время загрузки. Это особенно хорошо подходит, если вы разрабатываете с использованием фреймворка, такого как Boostrap или Foundation. Эта задача имеет ряд важных ограничений, которые вы можете прочитать в официальной документации .

Некоторые хорошие опции, о которых стоит упомянуть, ignore , что позволяет нам указать список селекторов, которые не должны быть удалены, и ignoreSheets , которые позволяют нам определять таблицы стилей, которые следует игнорировать.

Пример использования этой задачи показан ниже:

 uncss: { dist: { options: { ignore: [/js-.+/, '.special-class'], ignoreSheets: [/fonts.googleapis/], }, files: { 'dist/css/unused-removed.css': ['src/index.html', 'src/contact.html', 'src/service.html'] } } } 

Грунт-вно-htmlmin

Последняя задача Grunt, которую я хочу обсудить в этой статье, — это grunt-contrib-htmlmin , задача минимизации HTML-кода. Он не сильно ускоряет ваш сайт, потому что он часто экономит всего несколько килобайт, а если вы используете контент с использованием сжатия gzip, выигрыш еще ниже. Поэтому, если вы хотите минимизировать свой HTML, ну … комплименты; это означает, что ваш сайт уже был оптимизирован.

Тем не менее, философия, которой следует придерживаться при работе с сетью, заключается в том, что каждый килобайт имеет значение. Итак, давайте посмотрим на простую конфигурацию, которая интегрирует эту задачу в наш рабочий процесс:

 htmlmin: { dist: { options: { removeComments: true, collapseWhitespace: true }, files: [{ expand: true, cwd: 'src', src: '**/*.html', dest: 'dist/' }] } } 

Приведенный выше код обрабатывает все страницы, помещенные в каталог «src» и его подпапки. Для каждой из этих страниц задача удаляет все комментарии и сворачивает найденные пробелы, сохраняя результаты в каталоге «dist».

Вывод

В этой статье я познакомил вас с пятью задачами Grunt, чтобы легко повысить производительность вашего сайта. Они настолько просты, что у вас действительно нет никаких оправданий, чтобы избегать их использования и предложить своим пользователям лучший опыт благодаря более быстрому обслуживанию. Надеюсь, вам понравилась эта статья, и вы скоро будете выполнять эти задачи.

Вы когда-нибудь использовали их? Насколько они улучшили ваш сайт? Есть ли какие-то задачи, которые вы любите и хотите поделиться с нами?