• Как правильно работать с таким rest api?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Какой толк от логически правильного проектирования бэкенда, если она значительно влияет на скорость загрузки проекта (а значит на пользовательский опыт и сео-метрики) ?
    Как вообще понять логическую правильность? Предположим, можно сделать ручку GET https://api-domain/groupsWithSettlements - ручка для "владений, обогащённых информацией о населённых пунктах" - это логически верно?

    Разделение сущностей - это хорошо, но оно должно нести в себе смысл, решать какую-то задачу. Допустим, несколько клиентов с разной логикой, которым не всегда нужны полные данные (мобильные приложения, ещё один веб фронт, просто отдаём кому-то API, ...). Причём не гипотетических, а уже запущенных или спроектированных. Если архитектурное решение плохо влияет на проект - это плохое решение, каким бы красивым оно не казалось

    Ответ, который вы получаете от заказчика, очень похож на "не мои проблемы". Ну, значит скорость загрузки страницы - не ваши проблемы, вот и всё. Если вам платят и просят сделать плохо - почему бы нет?)
    Ответ написан
    2 комментария
  • Сколько запросов нормально посылать с front на rest api?

    Zraza
    @Zraza
    Помог ответ? Отметь решением!
    1) Так делать нормально до тех пор, пока это удовлетворяет наши требования по быстродействию.
    Если требования не оговорены - то "пока сайт визуально не тормозит".
    А критерий "торможения" зависит от нескольких факторов:
    - Объем передаваемых данных.
    - Качество интернета пользователей. Если пользователи работают с 3G в полях - логично, что требования будут выше.
    - Как мы отображаем данные в процессе загрузки. Если пользователь получает на экран что-то полезное уже после ответа 1-го запроса - хорошо.
    - От того, как быстро наш сервер обрабатывает те или иные запросы. Лучше быстро отдать/отобразить какие-то основные данные, а потом догружать дополнительные (если это долго).
    2) Подход REST с разделением сущностей по эндпоинтам не очень-то способствует сокращению количества запросов.
    Можно, конечно, добавлять связанные сущности в ответы... Но там, где они не нужны - мы получаем overfetching.
    Можно посмотреть в сторону graphql для решения этой задачи. Но т.к. вопрос "стоит ли переживать" - видимо, пока не стоит.
    Ну или отходить от концепции REST в угоду оптимизации.
    Ответ написан
    Комментировать
  • Стоит ли из данных полученных с двух ajax запросов создавать 1000 новых?

    Fernus
    @Fernus
    Техник - Механик :)
    Исходя чисто из вопроса...

    Как лучше это сделать?


    Там же и ответ:

    Переложить всю работу на бек часть, чтобы был 1 https запрос на получение данных
    Ответ написан
    Комментировать
  • Как получить доступ к микрофону и веб-камере автоматически?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Никак.
    Разрешение может дать только пользователь.
    И это сделано специально против таких как ты
    Ответ написан
    4 комментария
  • Какой ноутбук взять для frontend в 2022 году?

    @rPman
    Для работы (если у тебя не 3d) первый упор должен быть на монитор, размер, качество матрицы, разрешение

    Второе требование - наличие быстрого и объемного накопителя (например возможность добавить свой вторым или заменить уже имеющийся)

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

    Клавиатура у ноутбука обычно неудобная (полноценная клавиатура с правильным/удобным расположением кнопок, таких как навигационные стрелки, кнопки ctrl/alt/shift/menu а так же ins/del это почти нереально, а значит либо придется приучаться к неудобному расположению (кстати часто вендоры изобретают свое, что делает этот 'скилл' абсурднобесполезным) либо таскать с собой нормальную клавиатуру ;)

    И главное, в конечном счете ноутбук превращают в стационарный компьютер и мучаются.

    Подумай 10 раз и все же купи нормальный десктоп.
    Ответ написан
    Комментировать
  • Как в node.js на windows 10 запускать mp3 на фоне?

    @garbagecollected
    require('child_process').execSync(`'C:\Program Files\VideoLAN\VLC\vlc.exe' --qt-start-minimized --play-and-exit --qt-notification=0 "D:\path\to\file.mp3"`);
    Ответ написан
    1 комментарий
  • Как в apexcharts в donut убрать selected по клику на pie?

    @7rows
    Frontend Разработчик / Vue / JS / TS / CSS
    states: {
        active: {
          filter: {
            type: 'none' /* none, lighten, darken */
            allowMultipleDataPointsSelection: false,
          }
        }
      }


    https://apexcharts.com/docs/options/states/#active
    Ответ написан
    Комментировать
  • Как в apexcharts убрать лишнее пространство вокруг диаграммы?

    SPART4K
    @SPART4K
    Middle Front-end Developer (Vue.js/Nuxt.js)
    По поводу пустого простарнства:
    В этой библиотеки напрямую такой возможности нет
    Но вы можете выставить высоту вашей обложке и тогда все будет хорошо
    Наверное это единственный и лучший способ для вашей цели.
    option: {
    chart: {
        type: 'donut',
        width: '100%',
        height: '100%'
      },
    }


    .wrapper {
      width: 400px;
      height: 400px;
      background-color: rgba(0, 0, 0, 0.4);
    }
    Ответ написан
    Комментировать
  • Как получить ответы на запросы сторонних скриптов в js?

    @zkrvndm
    Софт для автоматизации
    Делать браузерное расширение не обязательно, вы можете запускать свой код сразу в консоли Ctrl + Shift + J и это не потребует установки никаких расширений. Либо вы можете использовать готовое расширение, например:
    https://chrome.google.com/webstore/detail/custom-j...

    Кроме расширений, таких как выше, также можно использовать блокировщики рекламы. Казалось бы причем тут блокировщики рекламы? Ну просто это их базовый функционал, многие блокировщики рекламы из под коробки позволяют на сторонних сайтах запускать свой код, это называется UserScript или пользовательские скрипты:
    https://kb.adguard.com/ru/general/userscripts

    Насчет того, как именно перехватывать запросы на чужом сайте... для этого на самом деле достаточно заменить метод window.XMLHttpRequest своей собственной функцией, это фактически позволит перехватывать все запросы выполненные посредством XMLHttpRequest, аналогично дела обстоят и c fetch.

    Замена родных нативных методов браузера своими собственными называется манкипатчем:
    https://yandex.ru/search/?text=XMLHttpRequest+fetc...

    Пример простейшего манкипатча:
    var original = {
    	open: XMLHttpRequest.prototype.open,
    	send: XMLHttpRequest.prototype.send
    };
    
    XMLHttpRequest.prototype.open = function (method, url, async, user, password) {
    	console.log('Инициируется запрос:', method, url);
    	return original.open.call(this, method, url, async, user, password);
    };
    
    XMLHttpRequest.prototype.send = function (data) {
    	console.log('Отправляются данные:', data);
    	return original.send.call(this, data);
    };
    Ответ написан
    6 комментариев
  • Не срабатывает анимация в keyframes?

    RAX7
    @RAX7
    Единицы измерения добавь
    @keyframes animeSvg {
      0% {
        stroke-dashoffset: calc(var(--stroke-dash) * 3px);
      }
      50% {
        stroke-dashoffset: calc(var(--stroke-dash) * 2px);
      }
      100% {
        stroke-dashoffset: calc(var(--stroke-dash) * 1px);
      }
    }
    Ответ написан
    1 комментарий
  • Как изменить таск Gulp.js (добавление gulp-changed)?

    Mordraug
    @Mordraug
    frontend разработчик
    в сообщении ошибки же указано, что нужен контекст. Типа так:
    changed(dest)
    Ответ написан
    4 комментария
  • Как запустить gulp-webp?

    Это баг gulp-webp https://github.com/sindresorhus/gulp-webp/issues/25 Используйте вместо него связку gulp-imagemin и imagemin-webp - там таких проблем не возникнет. Пример можете найти в статье https://www.smashingmagazine.com/2018/07/convertin...
    Ответ написан
    2 комментария
  • Как отформатировать красиво текст ошибки, пробелами и переносами текста?

    delphinpro
    @delphinpro Куратор тега Gulp.js
    frontend developer
    function validate () {
      return src('.')
        .pipe(plumberSmart())
        .pipe(through2(function (file, enc, callback) {
          callback(new PluginError({
            plugin: 'validate',
            // Именно так форматировать сообщение
            message: `${chalk.underline('Привет я строка 1')}
    ${chalk.cyan('Привет я строка 2')}
    
    Я подведение итогов`
          }))
        }))
    }


    Или так
    function validate () {
      return src('.')
        .pipe(plumberSmart())
        .pipe(through2(function (file, enc, callback) {
          callback(new PluginError({
            plugin: 'validate',
            message: `${chalk.underline('Привет я строка 1')}` + '\n' +
                     `${chalk.cyan('Привет я строка 2')}` + '\n' +
                     '\n' +
                     `Я подведение итогов`
          }))
        }))
    }
    Ответ написан
    Комментировать
  • SASS: extend or mixin?

    andead
    @andead
    друпал девелопер, фрилансер
    extend нельзя использовать в @media, поэтому пользуюсь только миксинами.
    Ответ написан
    Комментировать
  • Как лучше подключать scss bem блоки?

    delphinpro
    @delphinpro Куратор тега Sass
    frontend developer
    Не сваливайте все блоки в одну папку, а делите по уровням абстракции.
    Кнопка – примитив
    Карточка – компонент более высокого порядка, может содержать в себе в том числе кнопки.

    @use primitives/**
    @use components/**
    Ответ написан
    Комментировать
  • Как реализовать такое?

    @wadowad
    Можно реализовать через padding. Например, padding-top: 30% - это верхний внутренний отступ 30% от ширины родителя. Обратное поведение можно задать через calc:

    padding-top: calc(100px - 10%);

    Тогда при уменьшении ширины родителя, верхний отступ будет увеличиваться.
    Ответ написан
    1 комментарий
  • Нужно ли разделять стили по страницам?

    suffix_ixbt
    @suffix_ixbt
    https://www.babai.ru/
    При таком малом весе (149кб) объединённого файла стилей можно предположить что на каждой странице стили занимают вообще мизерный размер. Ну так и поместите их inline. Кэшироваться в браузере они также будут.

    Правда не могу представить ситуацию когда такая милли-оптимизация нужна :)
    Ответ написан
    2 комментария
  • Нужно ли разделять стили по страницам?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Не нужно. Файл один раз загрузится и останется в кэше браузера.
    Ответ написан
    1 комментарий
  • Как в Swiper отключить поддержку свайпов пальцем?

    Andrey_PSK
    @Andrey_PSK
    Обновим)
    allowTouchMove: false
    Дока
    Ответ написан
    Комментировать
  • Как работает данный код?

    JRK_DV
    @JRK_DV
    Рецепты https://codepen.io/jrkdv/full/LKLXdq
    предположение такое:

    цитата из доки
    Метод Window.getComputedStyle() возвращает объект, содержащий значения всех CSS-свойств элемента, полученных после применения всех активных таблиц стилей, и завершения базовых вычислений значений, которые они могут содержать. Некоторые CSS-свойства доступны через API, предоставляемые объектом, или индексацию по именам CSS-свойств.

    Предполагаю автор, вашего скрипта, при добавлении "getComputedStyle()" ориентировался на выделенную фразу из цитаты

    function closeAccordion (accordion) {
      // ... <= до вызова функции высота "auto"
      accordion.style.height = `${accordion.scrollHeight}px` // Устанавливаем высоту
      window.getComputedStyle(accordion, null).getPropertyValue('height') // Провоцируем вычисление новых изменений
      accordion.style.height = '0' // Устанавливаем высоту
      // ... => после выхода из функции рендер видит, что высота была Npx, стала 0px => запускает анимацию
    }


    Без вызова "getComputedStyle()", соответственно:
    до выполнения функции закрытия аккордиона высота была "auto"
    после завершения функции высота стала "0"
    для рендера высота изменяется из "auto" в "0" => анимация не выполняется


    1) Работает ли это во всех браузерах?
    2) Всегда ли он будет срабатывать?

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