Страницы

Поиск по вопросам

пятница, 24 мая 2019 г.

Долгая загрузка сайта

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

В стиле всего 79 строчек, но самую большую нагрузку в стилемов файле беру изображения:
background: url(../images/bg.jpg);
И вот каждая картинка грузит около 3-5 секунд (весом 900кб).
Не понимаем, с чем связана эта проблема, у 95% пользователей все окей, а у остальных 5% - такая вот беда...
При прямом открытии картинки по URL, эту картинку грузит все равно те же 5 секунд, а остальные - шустро (200мс в среднем).
В какую сторону стоит копать в такой ситуации?


Ответ

Я бы посоветовал вам оптимизировать весь статический контент на сайте.
Сжатие графики
В вашем случае кроме сжатия стилей и скриптов посоветую сжимать и графику. К примеру, картинки можно легко сжать без потери качества только за счет удаление exif-данных. На реальном сайте можно сократить размер картинок в среднем на 70%, что на современном сайте равняется примерно 4 МБ. Пример на gulp
var gulp = require('gulp'), imagemin = require('gulp-imagemin'), imageminJR = require('imagemin-jpeg-recompress'), imageminSvgo = require('imagemin-svgo');
// Optimizing images gulp.task('imagemin', function() { gulp.src('./img/**/*') .pipe(imagemin([ imageminJR({ method: 'ms-ssim' }), imageminSvgo({ plugins: [ {removeViewBox: false} ] }) ])) .pipe(gulp.dest('./public/img/')) });
А для браузеров, которые понимают легковесный формат webp (формат разработан Google), можно сделать еще такой вариант изображений:
var gulp = require('gulp'), webp = require('gulp-webp');
// Generate Webp gulp.task('webp', function() { gulp.src('./img/**/*') .pipe(webp()) .pipe(gulp.dest('./public/img/')) });
Оптимизация скриптов
Сперва объедините все скрипты в один файл и минифицируйте их. Это помет сократить количество HTTP-запросов и размер файлов:
var gulp = require('gulp'), concat = require('gulp-concat'), uglify = require('gulp-uglify');
// Concat JS gulp.task('js', function(){ gulp.src([ './js/jquery.js', './js/wow.js', './js/menu.js', './js/scrollspy.js', './js/main.js', './js/temp/contact.bundled.js', './js/owl.carousel.js' ]) .pipe(concat('script.js')) .pipe(uglify()) .pipe(gulp.dest('./public/js/')) });
Оптимизация стилей
Кроме обычной минификации стилей можно использовать и продвинутую - объединять дубликаты классов и @media. Пример на gulp из моего [web-starter-kit][1]:
var gulp = require('gulp'), stylus = require('gulp-stylus'),
// Минифицирует CSS, объединяет классы. Не ломает CSS, в отличие от cssnano, который, к примеру, может неправильно выставлять z-index csso = require('gulp-csso'),
// Объединяет все @media cmq = require('gulp-combine-mq'),
// Сокращает CSS-селекторы gs = require('gulp-selectors'),
// Проставляет вендорные префиксы autoprefixer = require('gulp-autoprefixer'),
livereload = require('gulp-livereload'), nib = require('nib');
// Compiling Stylus in CSS gulp.task('css', function() { gulp.src('./styl/*.styl') .pipe(stylus({ use: nib() })) .pipe(cmq()) .pipe(csso()) .pipe(autoprefixer('last 3 versions')) .pipe(gulp.dest('./public/css/')) });
А если совсем делать нечего, то можно еще и селекторы сократить:
// Minify selectors gulp.task('gs', function() { var ignores = { classes: ['active', 'menu', 'nav', 'slide', 'error', 'form-control', 'loader', 'showLoader', 'fadeLoader', 'webp', 'wow', 'owl-*', 'i-*'], ids: '*' }; gulp.src(['./public/**/*.css', './public/**/*.html']) .pipe(gs.run({}, ignores)) .pipe(gulp.dest('./public/')) });
Кстати, наверняка у вас есть классы, добавляющиеся через JS, поэтому предварительно стоит все такие классы вынести в переменную ignores
Кеширование статики на стороне пользователя
Также бы посоветовал кешировать скрипты и стили на стороне пользователя, чтобы исключить их повторную загрузку, если они не изменились:
Header set Cache-Control "max-age=2592000"
И включить gzip сжатие на сервере:
# сжатие text, html, javascript, css, xml: AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript

Комментариев нет:

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