• Код из файла *.js выполняется после формирования DOM?

    @alexalexes
    Порядок парсинга скрипта зависит от того, какой атрибут укажите у тега script. По умолчанию, парсинг начинается в синхронном режиме, как только загрузится закрывающуюся скобка } у лексически значимой корневой конструкции (функция, класс и т.д.), или просто встретится вызов функции.
    Ответ написан
    Комментировать
  • Код из файла *.js выполняется после формирования DOM?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Нет и так было всегда.
    Код js начинает исполняться в тот момент, когда парсер на него натыкается.
    Ответ написан
    4 комментария
  • Как в laravel через input записать в Базу данных метры метр кубический?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Этот символ — обычный текст. Работа с ним на бэкенде никак не отличается от работы с буквой «ъ». Ввести в инпут его можно разными способами: скопировать откуда-нибудь, набрать при помощи alt-кодов или вы можете на странице сделать кнопку, при нажатии которой этот символ будет вставляться в инпут.
    Ответ написан
    1 комментарий
  • Читаются все Alert ы в JS подряд?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Вы присваиваете внутри условия, а не сравниваете.
    Сравнивают двойным или тройным знаком равенства.

    Операция присвоения возвращает то, что присваивается. В обоих случаях у Вас это не пустая строка, что внутри условия интерпретируется как истина.
    Так как это два последовательных if, не знающих друг о друге и не имеющих return внутри себя, то получаем:
    1. если истина, то + 10.
    2. если истина, то +5
    2.1 иначе упс
    Ответ написан
    6 комментариев
  • Grid-tempate-areas для sass?

    imko
    @imko
    Senior Scratch Developer
    Область не может быть непрямоугольной
    Ответ написан
    Комментировать
  • Почему шрифт применяется только к цифрам?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Почему шрифт применяется только к цифрам?

    Подозреваю, вы пытаетесь применить его к тексту на русском. И, вероятно, он не поддерживает кириллицу (буквально нет символов букв). Возможно, есть версия с поддержкой, но это вопрос к дизайнеру.
    Ответ написан
    1 комментарий
  • Проблема с PHP на битрикс. Что делать?

    Adamos
    @Adamos
    Проблема обусловлена, с одной стороны, обновлением версии РНР, а с другой - старой версией Битрикса.
    Учитывая, что этот модуль vote - это самая знаменитая дыра в Битриксе за последние годы... скажем так, ваши проблемы могут быть немножко больше, чем вам, возможно, кажется.

    Мой сайт на Битриксе боты долбят в давно залатанные дыры по десять раз на дню, например.
    Ответ написан
    Комментировать
  • Как работает тег video?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Это потоковая отдача контента, в зависимости от браузера реализация слегка разная, но в целом файл тянется чанками, то есть загрузки всего файла ждать не нужно. Чаще всего файл кешируется на диске, а не хранится в памяти, если его размер больше определенного.
    Ответ написан
    Комментировать
  • Что такое Docker простыми словами?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Что такое Docker простыми словами

    простыми словами

    Если совсем прям простыми, то - это некая легковесная оболочка, которая способна изолировать приложение внутри себя от внешнего мира. Очень похож (по логике) на системы виртуализации VMware, VirtualBox, Parallels итп, но сам не является им.

    Возможности:

    - Контейнеризация: Docker позволяет паковать приложения вместе со всеми их зависимостями в контейнеры, обеспечивая тем самым их независимость от конкретной инфраструктуры.
    - Переносимость: Контейнеры Docker могут быть запущены на любом компьютере, который поддерживает Docker, независимо от операционной системы. Это делает распространение и развертывание приложений намного проще.
    - Изоляция ресурсов: Каждый контейнер Docker работает в изолированной среде и не влияет на другие контейнеры или хостовую систему.
    - Слоистая файловая система: Docker использует слоистую файловую систему для хранения данных, что позволяет существенно экономить дисковое пространство и упрощает обновление и распространение контейнеров.
    - Сетевые возможности: Docker позволяет настраивать сетевые параметры каждого контейнера, что позволяет создавать сложные многокомпонентные приложения.
    - Docker Hub: Docker Hub – это репозиторий, где можно хранить и делиться контейнерами. Это облегчает развертывание и распространение приложений.
    - Docker Compose: Это инструмент для определения и запуска многоконтейнерных - Docker-приложений. С помощью Compose вы можете использовать файл YAML для конфигурации служб вашего приложения, а затем с помощью одной команды создать и запустить все службы.
    - Docker Swarm: Docker Swarm предоставляет нативные возможности Docker для оркестрации и масштабирования кластера Docker.
    Ответ написан
    Комментировать
  • Почему в теле цикла не отображается консоль?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Когда вы сравниваете число с массивом, какой вы ожидаете результат?
    - i while(<= arr){
    + i while(<= arr.length){

    Более того, цикл у вас бесконечный, потому что i в нём не изменяется, так что это даже и хорошо, что он не запускается.
    Ответ написан
    1 комментарий
  • Реально ли заменить gulp на vite?

    bingo347
    @bingo347
    Crazy on performance...
    Есть сборщик gulp
    То что под gulp есть сборщики не делает сам gulp сборщиком. Gulp - task runner, запускалка задач. То есть сборщик под капотом может быть любой, хоть тот же vite.
    Теперь про vite, основная его фишка - это ускорение dev сборок и за счет этого ускорение самого процесса разработки. Достигает он это за счет того, что по сути не собирает Ваши исходники, а только применяет к ним трансформации, хотя зависимости все же собирает с помощью esbuild. При этом для прода вся сборка переадресуется на rollup. И то что в dev и в prod у Вас будут по сути разные сборщики изредка приводит к багам, которые воспроизводятся только в prod сборках. Rollup надо сказать тоже не идеален и на больших проектах порой ломает код, хоть и редко.
    Тут мое ИМХО и не более
    Rollup для сборки библиотек.
    Webpack для сборки конечных приложений.
    Vite интересен скорее интегрированным в него vitest, который позволяет писать unit тесты ближе к логике (привык я к хорошему в Rust).

    А по факту, смена сборщика чревата ошибками, сильными изменениями в структуре проекта и прочими подводными камнями.
    Если вопрос "стоит ли переезжать" появился только из hype-driven-development (погоней за модой по-простому), то ответ однозначный - нет, не стоит.
    Если же текущая сборка накладывает на Вас сильные ограничения и борьба с этими ограничениями занимает очень много времени, настолько, что потенциальные проблемы от смены сборки скорее всего займут времени меньше, то да, стоит переезжать.
    Ответ написан
    1 комментарий
  • Как прижать footer к низу страницы, перебробовал все способы?

    @karminski
    Senior React.JS Developer
    Это элементарно гуглится
    Ответ написан
    Комментировать
  • Как запретить тексту увеличивать размер flex-элемента?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    min-width: 0; добавить к item2
    Ответ написан
    Комментировать
  • Почему forEach выдает разные результаты?

    Stalker_RED
    @Stalker_RED
    a.a+=1 сработает.
    Вы в первом случае меняете значение a.a (больше однобуквенных названий, давайте добавим в мире путаницы!)
    во втором просто складываете его значение с единицой и никуда это значение не применяете.
    let x = 3 // x=3
    x++ // x=4 инкремент
    let y = x + 1 // y=5, x=4 все еще 
    x += 2 // x=6
    Ответ написан
    Комментировать
  • Почему forEach выдает разные результаты?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    если коротко и не совсем корректно, то
    a++ это a = a + 1
    a+1 это ничего. Потому что нет присваивания.

    P.s. не совсем корректно потому что
    a++ не то же самое что a = a+1, потому что a++ вернёт текущее значение а потом его инкрементирует:
    var a = 1;
    console.log(a++) // 1
    // тут же ещё раз выводим а без инкремента\сложения
    console.log(a) // 2
    a = a +1
    console.log(a) // 3
    Ответ написан
    2 комментария
  • Как правильно подходить к возвращаемым типам функциях php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Хорошие вопросы.
    Разумеется, увеличивать количество запросов к БД ради красивой типизации - это абсолютно не вариант.

    Как можно увидеть, в приведенной цитате написано не однозначно, а "скорее всего".
    И поэтому надо конечно стараться, чтобы функция возвращала какое-то одно значение, но не делать этого любой ценой. Поэтому getUserDataFromDatabase вполне может возвращать array|false, а getUserIdFromDatabase - int|false, хотя я бы с ней не заморочивался, первой вполне достаточно. А userIsPresentInDb вообще не нужна, вместо неё можно использовать одну их предыдущих.

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

    return $result ?: []; // дёшево и сердито

    Но это будет всё равно не очень красиво. В одной стороны - да, для проверки, вернула ли функция непустое значение, такой вариант вполне сгодится. Но с другой стороны все равно как-то неаккуратненько. Ведь мы на самом деле ждём не абы какой массив, а вполне определённый, с конкретным набором полей. То есть, если эта функция вернет массив вида [0, 42, 100500], то это будет явно не то, что нам нужно, но при этом типизация и слова поперёк не скажет.

    Если думать от типизации, то функция getUserDataFromDatabase, возвращающая какой-то абстрактный массив - это нонсенс, бессмыслица. Эта функция должна возвращать юзера. Поэтому в идеале надо придумать способ указать, что функция возвращает не абстрактный, а конкретный массив определенного формата. Тем более, что такой способ как раз есть, ведь типизованный массив - это же объект! И для данного случая даже специальный паттерн есть - ValueObject (хотя в случае с пользователем лучше будет все-таки делать полноценный класс, содержащий не только данные, но и методы, например auth(), который сравнивает хэш пароля с введенным).

    Соответственно, в идеале функция должна возвращать объект, представляющий пользователя.

    И уже в этом объекте поле id может либо либо быть нулём, либо иметь какое-то положительное значение. Или даже объект может содержать отдельное свойство, заполнен/не заполнен.

    И вот в этом случае типизация заиграет совсем новыми красками, и будет использоваться на 100%
    function getUserFromDb( int $userId ) : UserObject {
            return $result ? UserObject::fillFromArray($result) : new UserObject();
    };
    $user = getUserFromDb();
    if (!$user->id) {
        // нинашли :'(
    }


    Но опять же, как пишет ниже Сергей delphinpro, зависит от задачи.
    И решив проблему правильной типизации значения, которое функция вернет, если нашла пользователя, можно вернуться к вопросу о том, что возвращать, если функция ничего не нашла. И в этом случае вполне подходящим вариантом будет вернуть null
    function getUserFromDb( int $userId ) : ?UserObject {
        return $result ? UserObject::fillFromArray($result) : null;
    };
    
    if ($user = getUserFromDb()) {
        // нашли :)
    }
    Ответ написан
    6 комментариев
  • Как сделать сделать поиск по строке php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    stripos и strpos работают правильно

    А если вам вдруг кажется, что они работают неправильно, то надо привести пример.
    И тогда вам сразу объяснят, что вы делаете неправильно
    Ответ написан
    4 комментария
  • Почему не срабатывают свойства background?

    Lynn
    @Lynn
    nginx, js, css
    https://developer.mozilla.org/ru/docs/Web/CSS/back...

    Сокращённое CSS свойство background устанавливает сразу все свойства стиля фона


    Используйте в атрибуте style свойство background-image.
    Ответ написан
    Комментировать
  • В IE не работает mask-image, что делать?

    vabka
    @vabka
    Токсичный шарпист
    Делай на IE что-то по проще, без mask-image.
    Ничего плохого не случится, если пользователи IE получат не тот сайт, который задумал дизайнер.
    Ответ написан
    Комментировать
  • Как написать цикличный таймер?

    Stalker_RED
    @Stalker_RED
    Напишите список ваших задач, или периодов, или как их там. В них храните либо длительность, либо время начала и окончания, как вам удобнее.

    Напишите ОДИН setInterval, который сравнивает текущее время со временем старта или конца ваших периодов.

    Конструкции типа time-- идут лесом.
    Потому что и setInterval и setTimeout не гарантируют время срабатывания. Они работают "не раньше чем", а позже - запросто. Только хардкор: const now = new Date() на каждом тике таймера.

    Всякие циферки для отображения вычисляются из разницы между now и start или end, математика простейшая.
    Ответ написан
    Комментировать