Плагин сжатия веб-пакетов

Я пытаюсь понять, как правильно использовать webpack-html-плагин с плагин сжатия, документация на последний немного скудна.

Моя конфигурация веб-пакета заявляет:

output: {
  filename: 'js/[name]-[hash].js',

Плагин сжатия наконец-то запущен

new CompressionPlugin({
    asset: "[path].gz[query]",
    algorithm: "gzip"
})

В конце концов, скрипты создаются и сжимаются правильно.

js/app-caf3b4b3.js.gz     382 kB          [emitted]  [big] 

Я могу заявить предзагрузку gzip файла в шаблоне index.html

 <link rel = "preload" href = "<%= htmlWebpackPlugin.files.chunks[chunk].entry %>.gz" as = "script">

Но за вставку этой строки отвечает webpack:

<script type = "text/javascript" src = "/js/app-caf3b4b3.js">

внутри <body></body>

Как я могу попросить webpack использовать сжатый скрипт?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
0
11 604
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Связывать сжатый файл в формате html не нужно. Вы должны делать это на стороне сервера. Вы также можете сжать файлы css и html.

Настройте сервер на отправку файла с использованием сжатия gzip, вам также потребуются соответствующие заголовки, чтобы сообщить браузеру, как интерпретировать этот сжатый файл.

Если вы используете сервер Apache, вы можете включить сжатие gzip с файлом .htaccess.

Я использую это для своего сервера Apache:

# enable the rewrite capabilities
RewriteEngine On

# prevents the rule from being overrided by .htaccess files in subdirectories
RewriteOptions InheritDownBefore

# provide a URL-path base (not a file-path base) for any relative paths in the rule's target
RewriteBase /

# GZIP
## allows you to have certain browsers uncompress information on the fly
AddEncoding gzip .gz
## serve gzip .css files if they exist and the client accepts gzip
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
## serve gzip .js files if they exist and the client accepts gzip
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
## serve gzip .html files if they exist and the client accepts gzip
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.html $1\.html\.gz [QSA]
## serve correct content types, and prevent mod_deflate double gzip
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1,E=is_gzip:1]
RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1,E=is_gzip:1]
RewriteRule \.html\.gz$ - [T=text/html,E=no-gzip:1,E=is_gzip:1]
Header set Content-Encoding "gzip" env=is_gzip

Вы можете найти в Google дополнительную информацию о как оптимизировать сайт с помощью сжатия gzip.

https://gtmetrix.com/enable-gzip-compression.html

https://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-compression/

https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/optimize-encoding-and-transfer#text_compression_with_gzip

Вы можете сделать это через Плагин сжатия Webpack из вашего приложения SPA или также со стороны сервера. Я отвечу за спа-центр Vue.js, на котором я его тестировал для конфигурации. Веб-пакеты React и Angular не будут отличаться, за исключением имен файлов конфигурации.

Шаги:

  1. Создайте файл vue.config.js, если он еще не существует

  2. Добавьте что-нибудь в этом роде

    const CompressionWebpackPlugin = require("compression-webpack-plugin");
    
    module.exports = {
    
      configureWebpack: {
    
        plugins: [
          new CompressionWebpackPlugin({
            filename: "[path].gz[query]",
            algorithm: "gzip",
            test: /\.(js|css)$/,
           ...
    
          })
        ]
      }
    };
    

Дополнительные параметры доступны в документации плагина.

Другие вопросы по теме