Yvision.kz
kk
Разное
Разное
399 773 постов42 подписчика
Всяко-разно
3
06:36, 31 октября 2011

Пакетное сжатие css/js файлов

Имеется: 160 CSS файлов, 327 JavaScript файлов

Задача: За короткое время, файлы, которые раскиданы по разным папкам, сжать YUI Compressor'ом!

Времени на написание, либо интегрирование специальных систем нет, поэтому было решено реализовать на win cmd

Решение задачи было разделено на несколько подзадач:

Упаковка

  1. Реккурсивный проход по папкам в поисках файлов с расширением *.css|*.js
  2. Оригинальный файл копируется в файл filename.(css|js).unpacked
  3. Упаковка очередного файла YUICompressor'ом
  4. Оригинальный файл заменяется сжатым

Распаковка

  1. Реккурсивный проход по папкам в поисках файлов с расширением *.unpacked
  2. Файл filename.(css|js).unpacked копируется в файл filename.(css|js)
  3. Файл filename.(css|js).unpacked удаляется

Примочки

  1. Упаковка и Восстановление логируется
  2. Путь к YUI, каталог с дистром, расширение unpacked файла, путь к log файлам регулируется в переменных в верху батника

Как использовать?

  1. Кидаем файлик в корневой каталог дистрибутива, в подпапках которого есть файлы сss/js
  2. Указываем путь к YUI Compressor (или у к своему инструменту)
  3. Запускаемstart_packing.bat

Распаковка

  1. Запускаем start_restore.bat

Заточка

  1. Замените в файле start_packing.bat cтроку №26 на свой инструмент
 
java -jar %YUI_DIR%/build/yuicompressor-2.4.6.jar %%i -o %%i
 

Deploy

  1. Перед заливкой в рабочую версию настроил в FileZilla (Вид->Фильтры по названию файлов) исключение на передачу файлов оканчивающихся на *.unpacked
  2. Залил
  3. Затем в dev версии восстанавливаем сжатые файлы
  4. Получается так, что в Production'е сжатые файлы, а в деве остаются оригинальные

Листинг

Файл start_packing.bat - упаковка

 
  1. @echo off
  2.  
  3. @SET DISTR_DIR=.
  4. @SET UNPACKED_FILE_EXT=unpacked
  5. @SET LOG_FILENAME=D:\work\webapps\citylife_packed\logs\log_%DATE%.txt
  6. @SET YUI_DIR=D:\work\webapps\yui
  7.  
  8. echo [ %DATE% as %TIME% ]
  9. echo Start of packing files in directory "%DISTR_DIR%"
  10. echo.
  11.  
  12. IF DEFINED %DISTR_DIR% @cd %DISTR_DIR%
  13. @echo Start of packing files in directory: "%DISTR_DIR%" >> %LOG_FILENAME%
  14. @echo.>>%LOG_FILENAME%
  15. @echo.>>%LOG_FILENAME%
  16.  
  17. FOR /R %%i IN (*.css, *.js) DO (
  18.  
  19. @echo [ %%i ] >> %LOG_FILENAME%
  20.  
  21. @echo Packing file "%%i"
  22. @copy %%i %%i.%UNPACKED_FILE_EXT%
  23. @echo - %TIME%: backuped as "%%i.%UNPACKED_FILE_EXT%" >> %LOG_FILENAME%
  24.  
  25. java -jar %YUI_DIR%/build/yuicompressor-2.4.6.jar %%i -o %%i
  26. @echo - %TIME%: successfully packed >> %LOG_FILENAME%
  27.  
  28. echo.>>%LOG_FILENAME%
  29. echo.>>%LOG_FILENAME%
  30. )
  31.  
  32. echo.
  33. echo [ %DATE% at %TIME% ]
  34. echo End of packing...
  35.  
  36. @echo [ %DATE% at %TIME% ] >> %LOG_FILENAME%
  37. @echo End of packing... >> %LOG_FILENAME%
  38.  
  39. echo.>>%LOG_FILENAME%
  40. echo.>>%LOG_FILENAME%
  41.  
  42. pause
 

Файл start_restore.bat - распаковка

 
  1. @echo off
  2.  
  3. @SET DISTR_DIR=files
  4. @SET UNPACKED_FILE_EXT=unpacked
  5. @SET LOG_FILENAME=D:\work\webapps\citylife_packed\logs\log_restore_%DATE%.txt
  6.  
  7. echo [ %DATE% as %TIME% ]
  8. echo Start of RESTORE packing files in directory "%DISTR_DIR%"
  9. echo.
  10.  
  11. @cd %DISTR_DIR%
  12.  
  13. @echo Start of RESTORE packing files in directory: "%DISTR_DIR%" >> %LOG_FILENAME%
  14. @echo.>>%LOG_FILENAME%
  15. @echo.>>%LOG_FILENAME%
  16.  
  17. FOR /R %%i IN (*.css, *.js) DO (
  18.  
  19. @echo %%i>> %LOG_FILENAME%
  20.  
  21. @copy %%i.%UNPACKED_FILE_EXT% %%i
  22. del %%i.%UNPACKED_FILE_EXT%
  23.  
  24. @echo %TIME%: successfully restored>> %LOG_FILENAME%
  25.  
  26. @echo.>>%LOG_FILENAME%
  27. @echo.>>%LOG_FILENAME%
  28. )
  29.  
  30. echo.
  31. echo [ %DATE% at %TIME% ]
  32. echo End of restoring...
  33.  
  34. @echo [ %DATE% at %TIME% ] >> %LOG_FILENAME%
  35. @echo End of restoring... >> %LOG_FILENAME%
  36. echo.>>%LOG_FILENAME%
  37. echo.>>%LOG_FILENAME%
  38.  
  39. pause
 

Скорость

  • 160 CSS файлов - сжато за 50 секунд
  • 327 JavaScript файлов - сжато за 3 минуты
3
721
6