Priest

Members
  • Content count

    8
  • Joined

  • Last visited


Reputation Activity

  1. Priest liked a post in a topic by node.js in Сжимаем и совмещаем CSS/JS на лету   
    Данная тема посвящается в основном новичку или тем кто не знаком с новыми технологиями и возможностями некоторыми серверными плюшками и не только. И да эта тема именно для оптимизации сайта и именно здесь ей место.
     
    При построении очередного сложного проекта мы зачастую создаем кучу файлов CSS и JS, да даже HTML. Все это мы делаем для себя любимого и для программистов которые в случае чего будут администрировать проект и по мере листинга кода их глаза, точнее брови не будут залезать на ж..пу.
    К примеру, я лично да и мои знакомые, стараются распределить программный код по файлам, скажем для хедера свой стилевой файл css (header.css), для менюшки свой, для футера, да даже для пагинации, все распределено по файлам и в случае чего не нужно будет долго искать участок кода отвечающий за настройку определенного блока, открыл нужный файл и все настройки в нем. Другими словами это очень удобно.
     
    Однако после таких удобств для программиста страдает конечный пользователь, кому же хочется загружать по 20-30 css файлов сайта и столько же еще JS файлов, да и загрузка такого пучка файлов существенно повышает загрузку самой страницы сайта, ведь браузер делает каждый раз запрос на сервер где расположен данный файл.
     
    Примерно года два назад я прибегал к различным онлайн сервисам для сжатия файлов, а зачастую какой то стиль должен переопределять настройки предыдущего стиля и если поменять очередность то может поехать какой то элемент дизайна. Следить за этим и перебирать ручками это печальное занятие, а дальнейшая правка сжатого файла печалит еще больше.
     
    Скажем если мне понадобиться поправить отступ менюшки, мне придется открыть файл менюшки, поправить в нем отступ, затем открыть сжатый файл и искать по регулярке участок кода менюшки или же опять таки вручную компилировать (собирать) все это добро и опять сжимать, все это негативно влияет на меня и в итоге я просто забиваю на эту правку и говорю себе, пользователь стерпит, поплюется да привыкнет. А это в корне противоречит хорошим и качественным проектам которые пытаются подстроится под бОльшую аудиторию.
     
    Все это постоянно подталкивало на поиски решения данной проблемы.
     
    Ладно не буду писать тонны текста, главное надаюсь вы уловили саму суть проблемы описанной выше.
     
    Решение данной проблемы долго искать не пришлось, уже было много различных решений, а которое я использую сейчас, об этом и напишу.
     
    Сразу скажу, если вы увидите что то неизвестное вам, не пугайтесь, вы оказались в 21 веке и миллионы людей разрабатывают очень полезные и удобные инструменты по работе и управлению сайтами. Тем более что я буду писать для новичков и очень сжато, только нужно для настройки.
     
    Речь пойдет о Gulp https://github.com/gulpjs/gulp
    Gulp поможет вам сжать любой код, проверить наличие ошибок в коде, объединить код, и еще миллион других возможностей вплоть до оптимизации стилей под IE.
     
    Что такое NPM, вы можете погуглить, в прочим так же как и обо всем написанном в данном топике, все это не нова, и я не открываю вам окно в европу, хотя для некоторых это именно ибудет окном.
     
    Для полноценной работы с Gulp вам нужно будет установить Node.JS на сервере, и не нужно пугаться, все что вам нужно будет сделать это ввести всего одну (ну ладно две) команды, для ubuntu они выглядят так
    sudo apt-get update sudo apt-get install nodejs Установка node.js быстрая и не помешает вашим сайтам
    работать в штатном режиме.
    После установки node.js вы можете проверить его работу в и ssh ввести простую команду
    console.log('ok') Если увидите ответ «ок», нода установилась.

    Вместе с node.js установится и npm менеджер, с помощью которого вы установите gulp

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

    Устанавливаем сам gulp
    sudo npm i gulp -g Давайте предположим что наш проект находится в папке на сервере
    /var/www/data/site.ru/ А файлы CSS и JS, или даже сторонние плагины для сайта, находятся:
    /var/www/data/site.ru/static/css/ /var/www/data/site.ru/static/js/ /var/www/data/site.ru/plugins/ Что нам понадобиться, это всего лишь один файл с настройками gulpfile.js и ничего более!
     
    Но тем не менее сам gulp не может сжимать и объединять файлы, он помогает создать и управлять тасками (task) по сборке проекта.
     
    Вам нужно будет добавить некоторый список npm модулей, так же как мы добавили gulp
    sudo npm i gulp-jshint gulp-concat gulp-rename gulp-uglify gulp-minify-css -g Описание данных модулей вы сможете найти на гитхаже или в гугле вбейте «npm gulp-minify-css»
    Вкратце это тот набор модулей который будет сжимать, объединять, переименовывать файлы проекта.
     
    Для скомпилированных исходников дайте так же создадим дополнительную папку
    /var/www/data/site.ru/compiled/ Файлы именно из этой папки мы и будет подключать на самом сайте.
     
    Теперь создадим сам файл gulpfile.js в директории с сайтом
    /var/www/data/site.ru/gulpfile.js И напишем сам компилятор, откроем gulpfile.js и пропишем в него код:
    var gulp = require('gulp'); var jshint = require('gulp-jshint'); var concat = require('gulp-concat'); var rename = require('gulp-rename'); var uglify = require('gulp-uglify'); var minifyCss = require('gulp-minify-css'); var path = { 'scriptScreen': [ './static/plugins/menu/script.js', './static/js/cookie.js', './static/js/auth.js', './static/js/comments.js', './static/js/slider.js', ], 'cssScreen': [ './static/css/screen.css', './static/css/header.css', './static/plugins/menu/css/style.css' ], 'dist': './static/compiled' }; // Конкатенация и минификация файлов JS gulp.task('script-screen', function(){ gulp.src(path.scriptScreen) .pipe(jshint()) .pipe(jshint.reporter('default')) .pipe(concat('screen.js')) .pipe(rename('screen.min.js')) .pipe(uglify()) .pipe(gulp.dest(path.dist)); }); // Конкатенация и минификация файлов CSS gulp.task('css-screen', function(){ gulp.src(path.cssScreen) .pipe(concat('screen.css')) .pipe(rename('screen.min.css')) .pipe(minifyCss({compatibility: 'ie8'})) .pipe(gulp.dest(path.dist)); }); // Действия по умолчанию gulp.task('default', function(){ gulp.run('script-screen','css-screen'); // Отслеживаем изменения в файлах gulp.watch([path.scriptScreen, path.cssScreen], function(event){ gulp.run('script-screen', 'css-screen'); }); }); Теперь при выполнении команды
    gulp все ваши файлы объединяться и сожмутся.
     
    По ssh вам нужно перейти в корневую папку каталога
    cd /var/www/data/site.ru/ и соответственно выполнить
    gulp После выполнения команды, gulp уведомит вас в консоле что все закончено, или если есть ошибки в файлах, он выведет их в консоль, укажет строки ошибок и даже пояснить что не так и почему возникает эта ошибка или предупреждение.
     
    В папке compiled появятся минифицированные файлы
    /compiled/screen.min.js /compiled/screen.min.css Их и нужно подключить на страницах сайта.
     
    Теперь при изменении файлов в папке static, вам нужно будет просто вновь запустить команду gulp и она автоматически перекомпелируются.
    Если вам нужно поменять порядок файлов, измените их последовательность в gulpfile и выполните команду.
    Если вам нужно добавить файлов, добавите их список в gulpfile и выполните команду.
     
    Все автоматически сожмется, теперь вам не нужно будет пользоваться какими либо онлайн сервисами и вручную перебирать файлы, все это сделает за вам Gulp.
     
    ПС. хотел покороче, но вышло как всегда =(
  2. Priest liked a post in a topic by telet in Какой язык нужно учить   
    Узбекский