Gulp html: Gulp для новичков | htmlbook.ru

Содержание

Grunt- и Gulp-таски для оптимизации производительности

#Grunt- и Gulp-таски для оптимизации производительности

Снижение производительности может влиять на вовлечённость пользователей, на их ощущения от взаимодействия с сайтом и его доходность. К счастью, команда проекта «Make The Web Faster» из Google предложила набор наилучших практик для поддержания ваших страниц лёгкими, быстрыми и привлекательными. Они включают минификацию ресурсов вроде CSS и JavaScript, оптимизацию изображений, встраивание CSS в разметку, удаление неиспользуемых стилей и т.д.

Если вы имеете полный доступ к вашему серверу, отличным вариантом для вас будет использование модуля PageSpeed для Apache и Nginx с фильтрами для многих из этих задач. Тем не менее, если же доступа нет, или вы понимаете, что модуля будет не достаточно, существует достаточно плагинов для систем сборок, использование которых, пожалуй, позволит восполнить пробелы с более точным контролем производительности.

Ниже представлены Grunt- и Gulp-плагины, которые команда Yeoman регулярно использует в своих проектах.

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

Примечание: Генератор webapp для Grunt и Gulp от команды Yeoman уже включает плагины для оптимизации изображений, конкатенации и минификации HTML/CSS/JS. Мы считаем, webapp — отличная основа, а настоящая статья охватывает плагины, выходящие за пределы этих процессов.

Сжатие и оптимизация изображений

Средняя веб-страница сейчас занимает чуть больше 1.5 Мб, включая изображения, составляющие большую часть от этого объёма. Мы стремимся поддерживать размеры наших изображений настолько малыми, насколько это возможно, чтобы сократить время ожидания их загрузки пользователем.

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

Это очень важно для пользователей мобильных устройств с ограниченными тарифными планами или медленным подключением.

Grunt
  • grunt-contrib-imagemin
  • grunt-imageoptim (только для OSX)

Почему два плагина? Ок, вот вам отличный анализ различий между ними. Можете выбрать один, наиболее подходящий для вас.

Gulp
  • gulp-imagemin

На момент написания статьи ещё не существовало плагина для Gulp, использующего ImageOptim.

Примечание: Ребята из Etsy выяснили, что добавление всего лишь 160 Kб изображений на их страницы увеличивает отказ пользователей мобильных устройств на 12%. Если вы не можете сократить количество изображений на страницах, хотя бы оптимизируйте их.

Генерация отзывчивых изображений для элемента

<picture>

Если у вас сайт с RWD, адаптирующийся под различные устройства, вы также можете делать отзывчивыми и изображения.

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

Это одна из причин, по которой нам нужно использовать отзывчивые изображения, и в связи с этим мы рады приветствовать srcset — то, что, как мы надеемся, приведёт к полному внедрению элемента <picture>.

Существует несколько Grunt-плагинов, помогающих генерировать несколько изображений с различными разрешениями в рамках вашего процесса сборки проекта.

Grunt
  • grunt-responsive-images — используйте вместе с Imager.js, элементом <picture> или полифилом picturefill.
  • grunt-clowncar

Кроме того, если вам нужно изменить размер больших изображений, можете воспользоваться grunt-image-resize.

Примечание: Исследование Тима Кадлека в области отзывчивых изображений привело к выводу, что их использование может привести к экономии до 72% на размере изображений. Несмотря на то, что пока ещё рано делать выбор в пользу отзывчивости, BBC и Guardian используют Imager.js в качестве кросс-браузерного решения.

Минификация SVG изображений

SVG файлы, созданные в редакторах, обычно содержат большое количество избыточной информации (мета-данные, комментарии, скрытые элементы и т.д.). Всё это может быть совершенно безвредно удалено или сконвертировано в более компактное представление, не влияя на отрисовку.

Grunt
  • grunt-svgmin
Gulp
  • gulp-svgmin

Генерация спрайтов

Grunt
  • grunt-spritesmith
Gulp
  • gulp-sprite

Конвертация изображений в WebP

WebP это современный формат изображений, который предлагает сжатие изображений для веба с потерями и без. Изображения WebP со сжатием без потерь по размеру на 26% меньше, чем PNG и со сжатием с потерями на 25-34% меньше, чем JPEG. Это достаточно экономично и, к счастью, существуют Grunt- и Gulp-плагины кодирования WebP.

Grunt
  • grunt-webp
Gulp
  • gulp-webp

Примечание: Тест, проведённый WebPageTest, говорит, что в сравнении с JPEG загрузка изображений WebP происходит гораздо быстрее, благодаря их маленькому размеру. В Chrome Web Store выяснили, что использование WebP дало в среднем 30% экономии, что сохраняет им несколько терабайт трафика в день.

Сборка SVG спрайтов с поддержкой для различных браузеров

Grunt

  • grunticon

Gulp

  • gulp-svgmin

Мы считаем, что встраивание изображений используя Data URI сейчас стало анти-паттерном, влекущим за собой низкую производительность на мобильных устройствах.

Минификация CSS

Минификация устраняет лишние пробелы, переносы строк, отступы и символы, которые обычно не нужны в релизной версии вашего продукта. Сжатие HTML-, CSS- и JS-файлов может улучшить парсинг, выполнение и время загрузки. Касательно CSS мы рекомендуем:

Grunt
  • grunt-contrib-cssmin
Gulp
  • gulp-cssmin

Удаление неиспользуемого CSS

В проектах, основанных на CSS-фреймворках вроде Bootstrap, Foundation и т.д. вы обычно не используете всё разнообразие доступных стилей. Вместо того, чтобы включать весь фреймворк в релиз, используйте UnCSS для удаления неиспользуемых вашими страницами стилей. Таким образом, некоторые разработчики облегчают свои таблицы стилей до 85% от исходного размера.

Grunt
  • grunt-uncss
Gulp
  • gulp-uncss

Примечание: Наиболее часто задаваемый разработчиками вопрос по поводу UnCSS или процесса удаления неиспользуемого CSS это может ли он также работать со стилями, внедряемыми в страницу динамически. Наш ответ — «да». Это стало возможным благодаря тому, что UnCSS работает в паре с PhantomJS. Разработчики получают от 10 до 120 Кб экономии на типовой Bootstrap-странице, и настолько же хорошо UnCSS работает и с другими фреймворками.

Встроенный CSS

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

Grunt
  • grunt-inline-css
Gulp
  • gulp-inline-css

Комбинирование медиа-выражений

Хоть это и не является рекомендацией команды PageSpeed, но вы имеете возможность комбинировать медиа-выражения в единые определения. Мы сочли эти плагины полезными для обработки CSS, генерируемого препроцессорами, которые могут использовать вложенные определения медиа-запросов.

Grunt
  • grunt-combine-media-queries
Gulp
  • gulp-combine-media-queries

JavaScript

Минификация, сжатие JS

Grunt
  • grunt-contrib-uglify
  • grunt-closure-compiler
Gulp
  • gulp-uglify
  • gulp-closure-compiler

RequireJS (оптимизация с r.js)

Grunt
  • grunt-requirejs
Gulp
  • RequireJS

Минификация HTML

Grunt
  • grunt-contrib-htmlmin
Gulp
  • gulp-htmlmin

Простая конкатенация

Grunt
  • grunt-contrib-concat
Gulp
  • gulp-concat

Общее сжатие для файлов/папок

Grunt
  • grunt-contrib-compress
Gulp
  • gulp-zip

Сжатие Zopfli

Алгоритм сжатия Zopfli — это библиотека сжатия с открытым исходным кодом, которая генерирует выходные данные на 3-8% меньше в сравнении с zlib при максимальном уровне сжатия.

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

Grunt
  • grunt-zopfli
Gulp
  • gulp-zopfli

Примечание: Когда в Google Fonts начали использовать Zopfli, шрифты стали легче в среднем на 6%, а в некоторых случаях на 15%. По словам Ильи Григорика, для Open Sans уменьшение размера было более чем на 10%, что сказалось на уменьшении времени на отрисовку и загрузку. Однако, изображения сжатые с Zofli декодируются дольше, чем обычные JPG. Эти показатели можно использовать для принятия решения о целесообразности использования WebP.

Встраивание CSS критического пути

Критический путь представляет собой код и ресурсы, необходимые для отрисовки контента, расположенного в верхней части страницы (прим. пер.: дословно «above-the-fold» — до сгиба, т.е. первый экран страницы) — то есть то, что ваши пользователи увидят в первую очередь, когда они станут загружать вашу страницу.

PageSpeed рекомендует встраивать ваши необходимые стили для улучшения производительности. В то время, как инструменты вроде mod_pagespeed достаточно высоко эффективны для достижения этого, оптимизировать необходимые стили другими инструментами гораздо сложнее.

Вы можете использовать PhantomJS со скриптами speedreport, чтобы получить представление о том, какие стили отвечают за верхушку страницы и затем вручную оптимизировать их.

Примечание: Пол Кинлэн написал букмарклет для оценки стилей верхушки страницы, который тоже стоит посмотреть.

Asset pipeline (авто-обработка всех оптимизаций)

Одним из инструментов, на которые стоит обратить внимание является AssetGraph.

AssetGraph смотрит на проекты как на набор задач на графах, где узлами считаются наборы ресурсов (HTML, CSS, изображения, JS), а рёбрами — отношения между ними (теги img, a, script и т.д.).

Если AssetGraph определит, как проектные наборы ресурсов связаны друг с другом, он может автоматически выполнить большинство оптимизаций производительности. Это работает, в частности, на маленьких проектах и в данный момент идёт работа над поддержкой для больших проектов.

Grunt
  • grunt-reduce
Gulp

Пользователи Gulp должны использовать непосредственно AssetGraph.

Сравнительный анализ

Приведённые ниже бенчмарк-плагины полезны для использования в качестве части реализации подхода непрерывной интеграции (Continuous Integration). Несмотря на то, что в настоящее время они доступны только для Grunt, вы можете использовать gulp-grunt для запуска Grunt-тасков через Gulp. Мы рекомендуем:

  • grunt-pagespeed — превосходен для автоматического определения ваших количества очков PageSpeed как часть непрерывной интеграции.

  • grunt-topcoat-telemetry — получение гладкости, времени загрузки и другой статистики из Telemetry, как часть процесса непрерывной интеграции. Это может помочь вам настроить панель сравнительного анализа производительности, похожую на ту, что используют в TopCoat.

  • grunt-wpt — непрерывная интеграция с очками WebPageTest.

  • grunt-phantomas — время ответа на запросы, на ответы, время загрузки первого изображения/CSS/JS, время события готовности DOM и другое.

Framework Optimization

Grunt
  • grunt-ngmin
  • grunt-react
  • grunt-vulcanize — хорош для конкатенации веб-компонентов
Gulp
  • gulp-ngmin
  • gulp-react
  • gulp-vulcanize
Misch
  • gulp-google-cdn
  • gulp-size

Заключение

Снижение производительности может влиять на вовлечение пользователя и его впечатления от взаимодействия с ресурсом. Уделите время на эксперименты с плагинами для оптимизации производительности — узнайте, какие практические выгоды они могут дать вашим проектам.

Посетители ваших сайтов будут счастливее в результате мгновенного отклика, да и вообще, быстрый веб — лучше для всех.

Верстка лендинга с использованием Gulp, JavaScript и HTML/CSS.

Часть 1

Читать подробнее

09.01.2023 Богдана Гайворонская

Фрилансеры не всегда заключают договор на разработку сайта с заказчиками, полагаясь на договоренности, озвученные устно или сформулированные в переписке. Ведь сам процесс согласования и подписания документов занимает определенное время и требует усилий. Впрочем, сотрудничество на доверии достаточно рискованно для обеих сторон. Кроме того, что один из участников может безнаказанно отказаться от выполнения своих обязанностей, есть немало нюансов, которые затрудняют сотрудничество в случае отсутствия документально заверенных алгоритмов работы. Даже когда обе стороны намерены добросовестно выполнить все договоренности, их может подвести банальное недоразумение.

Читать подробнее

02.01.2023 Влад Сверчков

Так какими технологиями необходимо владеть, чтобы стать Intern/Junior FrontEnd разработчиком в 2023 году? Проанализировав вакансии на украинском рынке айти, мы составили список актуальных инструментов, которые обычно требуют работодатели от кандидатов. Их перечень – ниже в статье.

Читать подробнее

30.03.2021 Влад Сверчков

Верстка сайтов и веб-программирование привлекают большое количество новичков в мир IT. Это связано с достаточно низким порогом вхождения. Количество желающих стать фронтендщиком с каждым годом увеличивается, вследствии чего растут и требования к кандидатам.

Читать подробнее

29.07.2020 Влад Сверчков

Full-stack разработчик (произносится “фулл стек”) — это некий мастер на все руки в мире веб-разработки. Ему под силу реализовать как клиентскую, так и серверную сторону приложения, которыми, обычно, занимаются FrontEnd и BackEnd разработчики раздельно друг от друга. Таким образом, Full-stack специалист способен в одиночку вести проект от начала до конца.

Читать подробнее

06.11.2019 Влад Сверчков

Верстка сайтов и веб-программирование привлекают большое количество новичков в мир IT. Это связано с достаточно низким порогом вхождения. Количество желающих стать фронтендщиком с каждым годом увеличивается, вследствии чего растут и требования к кандидатам.

Читать подробнее

03.05.2019 Редакция ITVDN

Конструкторы сайтов представляют собой сервис по самостоятельной разработке интернет страниц. В отличие от CMS они просты в управлении, а также открывают множество возможностей настройки и опций, востребованных в современном онлайн мире.

Читать подробнее

04.01.2019 София Меренич

Готовы ли вы к внедрению инноваций в ваши веб-приложения в 2019 году? Представляем вам последние тренды веб-разработки, которым, безусловно, стоит следовать!

Читать подробнее

27.11.2018 Flavio Copes

Когда вы начинаете свои эксперименты с Vue и открываете инструменты разработчика в браузере, вы обнаружите предложение загрузить инструменты разработчика Vue. js по указанной ссылке.

Читать подробнее

27.08.2018 Angular Guru

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

Читать подробнее

14.03.2018 Charles McCathie Nevile

На сегодняшний день W3C уже выпустило релиз 5.2. Это второй пересмотр HTML 5, который идет сразу за HTML 5.1, увидевшего свет в прошлом году. В 2014 году мы выразили желание устраивать «ревизию» HTML каждый год. Что же, похоже, наше желание было услышано.

Читать подробнее

31.01.2018 Редакция ITVDN

Добро пожаловать в наш небольшой сборник советов от ведущих разработчиков на платформе Node.JS! Цель сей статьи – обобщить все те знания, которые были в свое время опубликованы в различных обучающих постах или журналах.

Читать подробнее

17.01.2018 Дмитрий Охрименко

Переход от AngularJS к Angular 2 был огромным шагом вперед. При этом изменилось абсолютно все, без обратной совместимости. В то же время, Angular 4 добавила новые возможности, но при этом была обратно совместимой с Angular 2 (Версия Angular 3 была пропущена из-за @angular/router, который на момент релиза был 3.x, в то время как остальные пакеты 2.x. Для того, чтобы избежать путаницы и перевести все пакеты к одной версии, третья версия была пропущена). Angular 5 — это следующее обновление, в котором изменения затронули механизмы, работающие «под капотом».

gulp-html-lint — Анализ работоспособности пакетов npm

Все уязвимости безопасности относятся к производственных зависимостей прямых и косвенных пакеты.

Угроза безопасности и лицензии для основных версий

Все версии

9. 02022 |
Версия Уязвимости Лицензионный риск
07/2017

Популярный

  • C
  • 2

    H
  • M
  • L
  • H
  • M
  • L

Лицензия
Массачусетский технологический институт

Политика безопасности
Нет

Ваш проект подвержен уязвимостям?

Сканируйте свои проекты на наличие уязвимостей. Быстро исправить с помощью автоматизированного исправления. Начните работу со Snyk бесплатно.

Начните бесплатно

Еженедельные загрузки (179)

Скачать тренд

Звезды GitHub
3

Вилки
4

Авторы
2


Популярность прямого использования


Пакет npm gulp-html-lint получает в общей сложности 179 загрузок в неделю. Таким образом, мы забили Уровень популярности gulp-html-lint будет ограничен.

На основе статистики проекта из репозитория GitHub для npm gulp-html-lint, мы обнаружили, что он снялся 3 раза, и это 7 других проектов в экосистеме зависят от него.

Загрузки рассчитываются как скользящие средние за период из последних 12 месяцев, за исключением выходных и известных отсутствующих точек данных.

Частота фиксации

Нет последних коммитов

Открытые проблемы
2

Открытый заказ на продажу
2

Последняя версия
6 лет назад

Последняя фиксация
6 лет назад


Дальнейший анализ состояния обслуживания gulp-html-lint на основе каденция выпущенных версий npm, активность репозитория, и другие точки данных определили, что его обслуживание Неактивный.

Важным сигналом обслуживания проекта для gulp-html-lint является это не видел никаких новых версий, выпущенных для npm в за последние 12 месяцев и может считаться прекращенным проектом или проектом, который получает мало внимания со стороны его сопровождающих.

За последний месяц мы не обнаружили никаких запросов на вытягивание или изменений в статус issue был обнаружен для репозитория GitHub.

Совместимость с Node.js
>=5.0.0


Возраст
7 лет

Зависимости
3 прямых

Версии
3

Установочный размер
0 Б

Распределенные теги
1

Количество файлов
0

Обслуживающий персонал
1

Типы TS
Нет


gulp-html-lint имеет более одного и последнего тега по умолчанию, опубликованного для пакет нпм. Это означает, что для этого могут быть доступны другие теги. пакет, например рядом, чтобы указать будущие выпуски, или стабильный, чтобы указать стабильные релизы.

gulp-html-component — Обзор пакета NPM

Компонент HTML

Этот подключаемый модуль позволяет создавать архитектуру компонентов HTML в проекте. Простой в установке и невероятно простой в использовании плагин позволит вам работать с целевыми страницами и другими проектами без необходимости дублировать HTML-код или создавать множество функций JavaScript для рендеринга HTML-кода.

Установить

Во-первых, вам нужно установить плагин с чьей-то платформы:

npm install gulp-html-component // или пряжа добавить gulp-html-компонент

и вставьте его в gulp.task

const gulp = require("gulp") const htmlComponent = require("gulp-html-component") gulp.task("дескриптор-html", () => { вернуть gulp. src("ваш/путь") .pipe(htmlКомпонент()) .pipe(gulp.dest("ваш/расстояние/путь")) })

Использование

Перед использованием плагина важно знать условия, при которых вы можете монтировать ваши компоненты:

  • Файл в компонентах / должен быть CamelCase;
  • Имя компонента должно быть точно таким же, как оно определено в components/ ;
  • Конец тега компонента всегда заканчивается на /> .

Для использования плагина в HTML-коде нужно просто создать файловую структуру, где будут располагаться компоненты и страницу, на которой они будут использоваться:

// Структура файла + источник + компоненты - Компонент.html - страница.html // компоненты/Component.html <дел> Привет мир

// страница.html <тело> <Компонент/>

В выводе вы вставляете Component.html в page. html :

// page.html (вывод) <тело> <дел> Привет мир

Конфигурация

Имя Тип По умолчанию Описание
PATH
PATH
PATH
.0241 на том же уровне.
encoding String "utf8" Базовый формат кодирования ваших файлов.

const gulp = требуется ("глоток") const htmlComponent = require("gulp-html-component") gulp.task("дескриптор-html", () => { вернуть gulp.src("ваш/путь") . pipe(htmlКомпонент({ // Он будет проверять каталог компонентов по "./src/components" путь: "./источник", кодировка: "utf8" })) .pipe(gulp.dest("ваш/расстояние/путь")) })

Использование компонентов

Реквизиты

Передача свойств доступна через атрибут p-%name% :

// компоненты/Component.html <дел> {{ содержание }}

// страница.html <тело> <Компонент p-bind:content="Hello World" />

Слушатели

Чтобы отправить событие компоненту, который должен срабатывать в корневом или конкретном элементе HTML, вы можете использовать свойство p-on . Если вам нужно передать все события родительскому элементу компонента, вам не нужно ничего делать, кроме как добавить его в page.html страница:

// page.html <тело> <Компонент p-bind:content="Hello World" p-on:click="func" /> // page.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *