• Как правильно сегодня собрать браузерный ES6?

    - babel следует подключать по возможности всегда, хотя бы для обработки es7-8 фишек, которые вам понравятся, но еще не успели внедрить во все браузеры.
    - webpack можно подключить через gulp. Вполне можно выполнять отдельные такси с помощью gulp, а что-то обрабатывать с помощью webpack`а. Так же можно, например, запускать отдельные npm скрипты для выполнения параллельной или последовательной работы gulp и webpack. Особо полезные фишки webpack (имхо): tree shaking, [name][hash].ext корректное именование файлов на выходе, динамический импорт файлов.
    - делать отдельные сборки для старых и вечнозеленых браузеров можно. Подключать можно используя
    <script type="module" src="module.mjs"></script>
    <script nomodule src="fallback.js"></script>

    Подобный хак. Сначала подключаем сборку для браузеров, поддерживающих модули, и почти наверняка, весь es6 (e7-8 не обязательно, поэтому может потребоваться babel для транспилинга es7-8 в es6), а потом в качестве фаллбека подключаем файл в котором весь код преобразован в es5 (или ниже, если необходимо и возможно).
    Ответ написан
    2 комментария
  • Почему происходит задержка применения CSS?

    ae_ph
    @ae_ph
    I'm a owl )
    iframe будут работать медленнее по тому, что для браузера есть дополнительные накладные расходы (его рендеринг, поддержка его экземпляра и ссылки на него).
    Ответ из статьи
    =====================================================
    Иван Кулаков,
    Проверьте ваш HTML документ.
    Если вы указывали в <head> JavaScript и если вы его указали раньше стилей CSS тогда возможна изначальная загрузка JavaScript а затем и CSS стилей из за чего могут быть эти баги.
    Нужно указывать сначало CSS стили а затем уже JavaScript код. Но в иделе конечно писать JavaScript перед закрывающим тегом </body>
    Также хотелось-бы добить, чтобы вы указали ваш <title>Document</title> в низу под стилями.
    6066728f7d82e434619101.jpeg

    Попробуйте написать в конце HTML документа в "скрипт с пробелом" или с комментарием.
    Примеры:
    <script type="text/javascript"> </script>
    <script type="text/javascript">//</script>


    Или за место верхнего скрипта с пробелом просто добавьте пустой JS скрипт там.
    6066681e0d4db105801708.jpeg

    Так-же попробуйте это решение описанное в css-tricks.
    Transitions только после загрузки страницы.

    Цитата из w3 org

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


    Также перехода можно избежать, задав стили в HTML файле вместо использования CSS, которые загружаются асинхронно.
    Ответ написан
    9 комментариев
  • Какие языки "убийцы" C/С++?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Первую свою книжку по С я прочитал в 1988 году. С тех пор С все убивают и убивают, то один "убивец" находится, то другой...сколько уже их было - никто и не помнит, потому что через полгода-год "убивец" отправляется на свалку истории, а С - живее всех живых :D
    Ответ написан
    Комментировать
  • Какие языки "убийцы" C/С++?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Нет таких. Язык проверен временем, развивается. На нем написано много кода, много чего заточено под C++. А статьи вроде "убийцы C/С++" пишут на сайтах для лохов, наряду с другими заголовками вроде - "всего одна капелька дешевого..." На хабре тоже правда бывают проскакивают на короткое время статьи с такими заголовками, но там правда неплохо так сливаю карму "писателю".

    Можете поставить себе в браузер какой-нибудь блокировщик рекламы, чтобы не видеть такие статьи.
    Ответ написан
    Комментировать
  • Почему событие scroll не работает на экранах меньше 800px?

    wapster92
    @wapster92 Куратор тега JavaScript
    Потому-что скролл это скролл, а то что ты делаешь, это resize
    Ответ написан
    2 комментария
  • Как правильно сделать lazy load?

    dima9595
    @dima9595
    Junior PHP
    ленивая загрузка тогда вам не подходит при работе с кликами. ленивую загрузку используют как правило для подгрузки изображений при видимости самого блока с изображением.

    в вашем же случае достаточно будет data-src и src менять местами при клике.
    Ответ написан
    2 комментария
  • Как проверить: является ли аргумент кодом цвета hex?

    Alexandre888
    @Alexandre888
    Javascript-разработчик
    if (/[0-9A-Fa-f]{6}/g.test(args[0])) console.log("правильный hex")
    Ответ написан
    Комментировать
  • Как readme.md оставить только на гитхаб?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Добавление файла .gitignore не удаляет файл из репозитория. Оно лишь предотвращает автоматическое добавление файла в репозиторий при ближайшем индексировании (например через git add .), но даже игнор не запрещает нам начать отслеживать любой файл просто принудительно добавив его в индекс git add <file>

    Однажды добавив файл в репозиторий, вы уже не сможете его оттуда удалить. Это если понимать под репозиторием всю его базу со всей историей.

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

    Если файл мешает на локальной машине, то для локальной работы используйте другую ветку. Не ту, что показывается по умолчанию на гитхабе. И удалите файл в этой ветке.
    Файл разумеется не исчезнет из истории локальной копии репозитория, но пропадёт из локальной рабочей копии файлов проекта и не будет мозолить глаза.
    Ответ написан
    Комментировать
  • Как создать репозиторий на GitHub из папки на xampp?

    glaphire
    @glaphire
    PHP developer
    Если сайт это независимый проект, то логичнее было бы сделать git init внутри папки htdocs/site, или вынести содержимое сайта на уровень глубже и поправить конфиги апача. Дальше - создать репу на гитхабе, инструкции как залить существующий проект будут сразу же после создания репы
    Ответ написан
    5 комментариев
  • Какие веб-технологии наименее требовательны к ресурсам памяти и ЦП сервера?

    @rPman
    Минимизировать потребление ресурсов позволит грамотная разработка, не хотите тратить лишнее - не тратьте. К сожалению затраты на саму разработку растут экспоненциально от сэкономленных ресурсов, начиная с определенного уровня это становится на столько накладно что проще купить больше железа чем платить очень дорогим разработчикам поддержку эффективного решения.

    Советы:
    * не используйте http rest с генерацией html на сервере (устаревший подход, но много готовых фреймворков его используют, у этого подхода только одно достоинство - дешевая горизонтальная масштабируемость), ваш бакэнд должен выглядеть готовым веб сервером и не должен на каждый запрос делать лишние инициализации.
    * переносите все что только можно на сторону клиента, всякие single page application, в идеале бакэнд должен быть чем то типа прослойки к базе данных и авторизация, все остальное пусть работает на клиенте
    * уменьшайте количество запросов (т.е. запросить 1 мб в виде одного файла менее ресурсоемко чем запросить сто по десять килобайт), никаких периодических запросов на сервер для проверки статусов, пользуйтесь вебсокетами
    * все что неизменно или редко меняется должно быть статикой, на ее поддержку тратится несравнимо меньше ресурсов сервера
    * не перебарщивайте с использованием готовых фреймворков, да это соблазняет простотой и получением готового результата путем комбинации решений как в конструкторе, но начиная с какого то момента ограничения подхода и борьба с особенностями и даже багами превысят затраты на самостоятельную разработку решения. Знаменитый анекдот 'как программист заваривает чайник' отличная иллюстрация того что готовые решения увеличивают затраты ресурсов и по простому это не исправить.
    Готовые репозитарии решений это конечно отлично но вы должны понимать что не вы их поддерживаете а значит становитесь заложником чужих решений и разработчиков, на которых вы не влияете. А уж когда у вас критичная и финансовая информация, чужие готовые решения становятся огромной дырой в безопасности.
    Ответ написан
    Комментировать
  • Как передавать аргументы в функцию в нужном порядке в JS?

    VlasenkoFedor
    @VlasenkoFedor
    Программист: php, js, go
    function myFunc({t = null, c = null, g = null}) {
        console.log(t, c, g)
    }
    
    myFunc({t: 5});
    myFunc({c: 10});
    myFunc({g: 20});

    Вариант передавать объект
    Ответ написан
    Комментировать
  • Как получить левую часть строки и правую? Или как вставить знак после 38 символа?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Вставить - никак. Строки в js изменять нельзя. Можно сделать новую:

    str.replace(/(?<=.{38})/, ':')
    // или
    str.replace(/.{38}/, '$&:')
    // или
    [...str].map((n, i) => i === 38 ? `:${n}` : n).join('')
    Ответ написан
    Комментировать
  • Как улучшить программу с помощью ооп?

    Fzero0
    @Fzero0
    Вечный студент
    Не надо думать что ООП это прям святой грааль, и как только вы начнете все писать через классы у вас прям и кода станет меньше и он будет оптимальный. Единственное назначение ООП - существенно облегчить разработку и последующее сопровождение сложного софта (больших проектов).
    бессмысленный код "типа" ООП
    const datas = [
    {
      description: "new",
      img: "https://www.svgimages.com/svg-image/s8/air-jordan-logo-256x256.png",
      name: "Nike1",
      price: 100
    }, {
      description: "classic",
      img: "https://www.freepnglogos.com/uploads/puma-logo-png-1.png",
      name: "Adidas1",
      price: 120
    },
    {
      description: "new",
      img: "https://www.svgimages.com/svg-image/s8/air-jordan-logo-256x256.png",
      name: "Nike2",
      price: 200
    }, {
      description: "classic",
      img: "https://www.freepnglogos.com/uploads/puma-logo-png-1.png",
      name: "Adidas2",
      price: 320
    }
    ]
    
    class Products {
      constructor(name, price, description, img){
        this.name = name;
        this.price = price;
        this.description = description;
        this.img = img;
     }    
    }
    
    class Manager {
     constructor(selector = '#tables', data = []) {
       this.root = document.querySelector(selector) || document.body;
       this.products = data.length === 0 ? this._demoProducts() : data;
     }
     _demoProducts() {
            let nike = new Products("Nike", 100, "new-shoes","https://www.svgimages.com/svg-image/s8/air-jordan-logo-256x256.png");
            let adidas = new Products("Adidas", 120, "classic-shoes","https://www.freepnglogos.com/uploads/puma-logo-png-1.png");
            return [nike, adidas];
        }
     getHTMLTemplate() {
       return this.products.map(function(product, i) {
         return `<div class="info-goods" data-id='${i}'>
                <div class="img"><img src=${product.img} width="80" height="80" alt='${product.name}'></div>
                <div class="name">${product.name}</div>
                <div class="price">${product.price}</div>
                <div class="description">${product.description}</div>
               </div>`
       });
     } 
     init(){
      this.root.insertAdjacentHTML('beforeend', this.getHTMLTemplate().join('<hr>'));
     }
    }
    
    const manager = new Manager();
          manager.init();
    Ответ написан
    Комментировать
  • Как улучшить программу с помощью ооп?

    Tim-A-2020
    @Tim-A-2020
    Просто отрендерить данные достаточно этого
    Ответ написан
    4 комментария
  • Почему в базу данных попадает путь без слэшей?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    потому что данные в БД надо добавлять по-человечески, а не как пацаны в подворотне показали.

    Данные в БД надо всегда отправлять отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда.
    Для этого надо
    • Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    • Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
    • Привязать переменные к запросу.
    • Выполнить подготовленный ранее запрос с помощью с помощью execute()

    В mysqli это будет так
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("sssss", $title, $discription, $date, $path);
    $stmt->execute();

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

    Но по-хорошему для работы с БД в РНР лучше использовать PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->execute([$title, $discription, $date, $path]);

    И скажи спасибо что у тебя просто слеши пропали, а не всю базу шутники удалили
    Ответ написан
  • А как вы делаете социальные share кнопки?

    iamd503
    @iamd503
    Верстальщик
    Ответ написан
    Комментировать