Как сжать JavaScript в режиме реального времени? - PullRequest
3 голосов
/ 24 февраля 2010

Мне было интересно, есть ли способ сжатия javascript в реальном времени, так же, как gzip работает для HTML (и, очевидно, CSS)?

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

Ответы [ 4 ]

3 голосов
/ 24 февраля 2010

gzip работает со всем текстом, включая JavaScript

Если вы хотите сделать больше сжатия (например, с помощью YUI-компрессора перед распаковкой), вы можете заставить свой сервер это сделать, но было бы проще сделать это перед загрузкой.

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

2 голосов
/ 24 февраля 2010

Если вы имеете в виду «сжимать», как в «сохранить код в том же формате, но сжать его по конвейеру», тогда включите сжатие gzip в соответствии с инструкциями для вашего сервера, которые вы не указали в тегах /question.

Если вы имеете в виду «сжимать», как в « минимизировать код », то есть варианты, которые вы можете попробовать, например, включить модуль / процесс минимизации в конвейер. Совсем недавно я создал решение в ASP.net, которое использует Microsoft Ajax Minifier 4.0 для минимизации запрашиваемых файлов javascript, на лету , в основном путем добавления тегов сценария на страницу. с тегом src, похожим на minifier.ashx? source = my / javascript / file / и / path / here.js, и с использованием класса Minifier в AjaxMin.dll для минимизации кода по требованию. Это имеет несколько преимуществ перед предварительной минификацией:

  1. Вы можете передать флаг на свой live сайт через cookie, значение строки запроса, заданное имя пользователя, чтобы отключить минимизацию, которая упрощает отладку, если вам нужно решить проблему "на жить "
  2. Вы можете вносить экстренные изменения в ваш действующий код, не изменяя свой неунифицированный код, минимизируя его, загружая его (очевидно, это не то, что вы должны делать регулярно, но приятно, что такая возможность есть, если это необходимо).
  3. Меньше всего набора артефактов сборки (минимизированных js-файлов) нужно беспокоиться об отслеживании, контроле исходного кода и т. Д.,

Dis-преимущества:

  1. Минификация добавляет некоторые накладные расходы на запросы сценариев. Этого можно избежать, кэшируя результат минимизации в памяти или на диске
  2. Я не уверен, разрешает ли лицензия для AjaxMin.dll такой вид использования
  3. Если вы используете Visual Studio / другой инструмент, который предоставляет intellisense для скрипта, он может быть не в состоянии дать вам это из тегов скрипта
2 голосов
/ 24 февраля 2010

На Apache это сжимает все, кроме изображений:

<IfModule mod_deflate.c>

# Insert filter
SetOutputFilter DEFLATE

# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</IfModule>
2 голосов
/ 24 февраля 2010

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

Другой вариант - указать веб-серверу сжимать файлы перед передачей (но он должен делать это автоматически).

Другим вариантом является задание cron (см. cron(1) или планировщик Windows) на сервере, которое периодически проверяет файл (скажем, раз в день) и сжимает его при загрузке новой версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...