• Как научить imagemin (gulp) сжимать только новые фото и не трогать уже обработанные?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Подключаем библиотеку gulp-changed
    const changed = require('gulp-changed');

    И первым делом перед тем как сжимать проверяем время последнего изменения, затем сравниваем хеш:

    .pipe(changed(dir.output + '/images', {
                hasChanged: changed.compareLastModifiedTime
            }))
            .pipe(changed(dir.output + '/images', {
                hasChanged: changed.compareContents
            }))
    Ответ написан
    2 комментария
  • Как ускорить загрузку сайта?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Общие рекомендации для ускорения сайта. Этим методом я могу оптимизировать сайты до 100%. Другой вопрос - нужно ли это)))

    1) Установите плагины Fastest cache + Fastest cache premium + Autoptimize.
    В плагине Fastest Cache & Premium включите все пункты, КРОМЕ 3-х пунктов касающихся CSS
    5b7010485d97c901632931.png
    В плагине Autoptimize включите пункт оптимизации CSS, перейдите в расширенные настройки поставьте галочку Inline All CSS и из исходного кода скопируйте код, которые между . После чего сгенерируйте критичный CSS на сайте https://jonassebastianohlsson.com/criticalpathcssg... и добавьте его в плагин autoptimize.
    Этим вы уберете проблемы:
    "удалить js & css код препятствующий отображению". Согласно оф. источнику сам fastest cache не убирает render blocking CSS из-за чего мы и используем autoptimize.
    https://www.wpfastestcache.com/premium/optimize-cs...
    P.S. У вас сейчас на сайте именно на это гугл и жалуется.
    2) оптимизируйте изображения. Рекомендую использовать EWWW Image Optimizer и если позволяют финансы, то берите премиум пакет, чтобы лучше оптимизировать. В противном случае, гугл все равно жалуется. Или же можете вручную сжать фотографии, предварительно скачав их на компьютер. Для ручного сжатия я использую jpegoptim & jpegtran
    Cсылка - https://sheensay.ru/optimization-png-jpg#kak-ustan...
    https://ruhighload.com/jpegoptim
    Достаточно оставить % сжатия 25-30%

    3) Если вы разместили счетчики и различные информеры и кнопки "поделиться", то чтобы гугл не жаловался можно подключать их локально. Так как гугл не рекомедует подключать скрипты локально, так как они могут устареть, то обязательно создайте Cron задачу и регулярно обновляйте эти файлы. Пример рнр скрипта, который регулярно обновляет js скрипты.
    В корне сайта создайте папку js & рнр файл со следующим содержимым. А далее по крону запускайте этот файл. Достаточно обновлять раз в неделю... Соответственно, все скрипты подключайте локально предварительно изменив js код
    <?php
    function downloadJs($file_url, $save_to)
    {
        $content = file_get_contents($file_url);
        file_put_contents($save_to, $content);
    }
    // Yandex Metrika
    downloadJs('https://mc.yandex.ru/metrika/watch.js', realpath("./js") . '/watch.js');
    // Yandex Share
    downloadJs('https://yastatic.net/es5-shims/0.0.2/es5-shims.min.js', realpath("./js") . '/es5-shims.min.js');
    downloadJs('https://yastatic.net/share2/share.js', realpath("./js") . '/share.js');
    // Google Analytics
    downloadJs('https://www.google-analytics.com/analytics.js', realpath("./js") . '/analytics.js');
    // Googla Adsense
    downloadJs('http://pagead2.googlesyndication.com/pagead/show_ads.js', realpath(".js") . '/show_ads.js');
    downloadJs('https://pagead2.googlesyndication.com/pagead/osd.js', realpath("./js") . '/osd.js');
    downloadJs('https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js', realpath("./js") . '/adsbygoogle.js');
    // VK
    downloadJs('http://vk.com/js/api/openapi.js?139', realpath("./js") . '/openapi.js');
    // Google Plus Widget
    downloadJs('https://apis.google.com/js/plusone.js', realpath("./js") . '/plusone.js');
    // Google Recaptcha
    downloadJs('https://www.google.com/recaptcha/api.js', realpath("./js") . '/api.js');
    downloadJs('https://www.google.com/recaptcha/api2/webworker.js', realpath("./js") . '/webworker.js');
    downloadJs('https://www.google.com/recaptcha/api.js', realpath("./js") . '/api.js');
    ?>

    4) Если на сайте ВП используете аватарки от gravatar, то закэшируйте их при помощи плагина FV Gravatar Cache или Harrys Gravatar Cache
    5) Если на сайте вы используете вставку картинок, которые добавляются извне, то плагин LH Cache Remote Images поможет вам их закэшировать и отдавать локально
    6) Если гугл жалуется на Query String from static resources, то установите плагин Remove Query Strings From Static Resources

    На самом деле многое из предложенного выше являются лишним и наверное не стоит гоняться за % оптимизации. У себя я использую плагин Fastest Cache & Fastest Cache Premium и все. Но иногда заказчики просят именно результата 100% и тогда приходится прибегнуть к вышеуказанным мерам.
    Ответ написан
    Комментировать
  • Как в php регуляркой удалить все пробелы, тире и скобки?

    @Paulch
    Чуть поправляю коллегу выше. Нужен array.
    ('(', ')', ' ', '-') - это массив, его и нужно передать в str_replace

    $phone = str_replace(array('(', ')', ' ', '-'), '', $phone );
    Ответ написан
    Комментировать
  • Как сделать такие вырезы и бордер?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    С помощью градиентов можно нарисовать все, что угодно:

    Ну и обычными картинками тоже можно, через border-image или так же, через фоны.
    Ответ написан
    Комментировать
  • Разработка сайта на WordPress и git (github)?

    @mihanentalpo
    У меня есть мануал и набор самодельных инструментов для работы с WordPress посредством git-репозитория.
    https://mihanentalpo.me/2017/03/wordpress-по-челов...
    Ответ написан
    Комментировать
  • Как заставить WebStorm автоматически заворачивать длинные строки?

    Mesuti
    @Mesuti
    Актуализирую
    5b2bdfba7fcc6405104636.jpeg
    Ответ написан
    Комментировать
  • Как заставить WebStorm автоматически заворачивать длинные строки?

    loratokareva
    @loratokareva
    html верстальщик
    я не помню с какой такой идеи я влепил птичку в View|Active Editor| Use Soft Wraps


    Долго билась с проблемой переноса длинных строк.
    Народ, вот оно!!!

    098c12011fbd4d368e2bf93f301ece00.jpg

    Всем добра)
    Ответ написан
    Комментировать
  • Как заставить WebStorm автоматически заворачивать длинные строки?

    miminari13
    @miminari13
    view - active editor - use soft wraps
    это для вебшторма, но думаю в phpstorm тоже самое
    Ответ написан
    3 комментария
  • Как вставить произвольный код для отдельной страницы в WordPress?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    /**
    	 * Регистрация скриптов и стилей
    	 * @see  https://developer.wordpress.org/reference/functions/wp_register_script/
    	 * @see https://developer.wordpress.org/reference/functions/wp_register_style/
    	 */
    	function my_assets() {
    
    		wp_register_script( 'my-script', 'script_link'  );
    		wp_register_style( 'my-style',  'style_link');
    	}
    
    	add_action( 'wp_enqueue_scripts', 'my_assets' );
    
    	/**
    	 * Шорткод с нужным содержимым
    	 * @see https://developer.wordpress.org/reference/functions/add_shortcode/
    	 */
    	function my_shortcode() {
    		/**
    		 * Вызов скриптов и стилей которые зарегистрировали раньше
    		 * @see https://developer.wordpress.org/reference/functions/wp_enqueue_script/
    		 * @see https://developer.wordpress.org/reference/functions/wp_enqueue_style/
    		 *
    		 */
    
    		wp_enqueue_script( 'my-script' );
    		wp_enqueue_style( 'my-style' );
    
    		/////////
    		// СВОЙ КОД
    		////////
    	}
    
    	add_shortcode( 'my_custom_code', 'my_shortcode' );


    В контент нужной страницы вставляете [my_custom_code]
    Ответ написан
    Комментировать
  • Как вы ведёте проекты по разработке сайта в Trello?

    Atanvar
    @Atanvar
    Frontend developer
    Спринты.

    1 спринт:
    - дизайн
    верстка
    программирование

    2 спринт:
    дизайн
    верстка
    программирование
    и тд.

    Чаще всего дизайн выносят за спринты.
    Статусы:
    Открыта
    В процессе
    Завершениа
    Тестирование
    Проверена
    Переоткрыта

    Все задачи попадающие в статус завершена - хватаются QAшниками и проверяются, если все норм - переводят в статус "Проверено", если нет то переводят в "переоткрыта".
    Ответ написан
    3 комментария
  • Возможен ли план самообучения WEB разработке?

    @DAGpro
    https://github.com/thedaviddias/Front-End-Checklist
    Дорожная карта по технологиям, что нужно знать для фронтенда, бекенда и девопса:
    https://github.com/kamranahmedse/developer-roadmap
    Ответ написан
    Комментировать
  • Как в woocommerce вывести определенный атрибут товара в каталоге?

    @Filipp_off
    Здесь достаточно подробное описание для вывода атрибутов в каталоге или на странице товара:

    webreason.ru/vyvod-atributov-tovara-woocommerce
    Ответ написан
    Комментировать
  • Хранение изображений в mysql или всё же папке?

    apavlyut
    @apavlyut
    www.apavlyut.ru
    Вот правильные вопросы люди пишут, я только подведу к ответу - составьте в экселе конкретную таблицу по пользователям / страницам / картинкам и их размерам, добавьте еще что-нибудь по вкусу и посмотрите что на что выходит.

    Из цифр всегда просто сделать выводы о том какие вам нужны железки, какая архитектура этого всего понадобится, также вопросы по языкам / обработчикам, ведь если все сильно мощно по эксплуатации этого добра тогда вам и про кеш и про cdn думать нужно, и какая стратегия ваших действий (стратегия - последовательность задач которые вы решите чтобы достичь вашу цель).

    Думать от цифр очень практично и удобно - большинство ответов перед глазами.

    Крайне рекомендую использовать для этого гугл таблицы, потому что их встроенная автоматическая статистика (при клике справа снизу на значек explore) показывает сразу все виды срезов и отчетов и по техническим системам узкие места обнаруживаются очень быстро.

    Узкие места - это найденные точки от которых вам нужно принимать решение как поступать.

    А по существу - я храню в базе картинки которые добавляют пользователи через визуальный редактор, очень удобно копипаст делать, и просто в одном месте это "добро" держать, они у меня падают прямо с текстов в binary (это когда в img src="data:image/jpeg;base64....") - очень удобный кейс без заморочки аплоуда и поддеркжи того что накидают где у нас малый контроль.

    Все остальные изображения относящиеся к контенту - лучше выносить и сразу в storage - любой, от s3 до dropbox, не важно, смысл в дальнейшем удобстве обслуживания - в его и бекапите, и разливаете по cdn если нужно, и что угодно делаете вне зависимости от кода.

    Ну в общем все решения существуют не в позиции конкуренции друг с другом - а в позиции конкретного применения в зависимости от ваших целей, которые вы себе определяете из вашего контекста. Большинство решений крайне хороши сами по себе, применять нужно то что вам будет а) проще всего реализовать и поддерживать (не забывайте что вы с набором своих навыков тоже полноценная часть этой системы) б) что дешевле по времени и ресурсам решит вашу задачу (упрощенный ТРИЗ - идеальная функция та которая работает и не требует никакого ресурса).

    Успехов!
    Ответ написан
    5 комментариев
  • Как сверстать подобный блок?

    @Adikjoro
    Hexagon избитый дизайн. Уже и не удивишь им никого. Начинай изучать SVG. Там создание многоугольных форм это 2+2. Вот небольшой курс по основам SVG
    Если нормально разогнаться и JS подучить, то можно создать сайты типа этих:
    Waaark
    Cédric Pereira
    Humaan
    LOCUS SOLUS
    Ответ написан
    Комментировать
  • Чем в gulp корректно минифицировать CSS?

    @redbis
    Пробовал?

    var gulp = require('gulp');
    var minifyCSS = require('gulp-minify-css');
    var sourcemaps = require('gulp-sourcemaps');
     
    gulp.task('minify-css', function() {
      return gulp.src('./src/*.css')
        .pipe(sourcemaps.init())
        .pipe(minifyCSS())
        .pipe(sourcemaps.write())
        .pipe(gulp.dest('dist'));
    });
    Ответ написан
    Комментировать
  • Как сделать вертикальное выравнивание блоков в Bootstrap?

    delphinpro
    @delphinpro
    frontend developer
    <div class='container'>
       <div class='row specific-block'>
        ...
       </div
    </div>


    .specific-block {
      display: flex;
      align-items: center;
    }


    .specific-block {
      >div {
        display: table-cell;
        vertical-align: center;
      }
    }
    Ответ написан
    8 комментариев
  • Бывает ли что-то аналогичное nib для sass?

    delphinpro
    @delphinpro Куратор тега Sass
    frontend developer
    Для sass подобные вещи есть - компас, бурбон.
    Для префиксов используйте автопрефиксер, а не примеси препроцессора (неважно какого).
    Ответ написан
    Комментировать
  • Каким сервисом пользуетесь при описании ошибок в верстке?

    @esvlad
    Веб-разработчик
    Используем в компании https://trello.com/.
    Ответ написан
    Комментировать