Ответы пользователя по тегу Веб-разработка
  • Нужно ли информировать по правилам GDPR об использовании IndexedDB, когда Cookies фактически не используются?

    bingo347
    @bingo347
    Crazy on performance...
    Нужно информировать пользователя если Ваш ресурс либо третья сторона посредством Вашего ресурса, хранит любые данные, в любом хранилище, позволяющие идентифицировать пользователя в дальнейшем.
    То есть:
    храним токен авторизации (в куках, localStorage, indexedDB или еще где-то) - уведомляем
    храним id истории поиска - уведомляем
    подключили яндекс метрику, гугл аналитику, гугл таг менеджер, скрипты рекламных сетей - уведомляем
    ну и т.д.
    Ответ написан
    1 комментарий
  • Как и по какому принципу работает внедрение рекламы на сайт Wordpress?

    bingo347
    @bingo347
    Crazy on performance...
    В современных реалиях, единственный адекватный подход - заключить договор с агентством.
    Вам предоставят js-код, который нужно будет просто вставить на сайт и остальное (поиск рекламодателя, анализ аудитории, таргетинг и т.д.) уже не Ваша проблема.

    Если хотите текстовую рекламу: Yandex.Direct
    Если интерактивную/видео: Adfox (Yandex), MyTarget (mail.ru) или NativeRoll
    Ответ написан
    Комментировать
  • Насколько актуально использование шаблонизаторов на сервере?

    bingo347
    @bingo347
    Crazy on performance...
    Есть такая весьма полезная, но иногда трудно реализуемая (зависит от выбранного стека) штука, как двухсторонний рендеринг. Преимущества в скорости выдачи готового к потреблению контента, как при первом запросе к сайту (серверный рендеринг), так и при последующих (клиентский рендеринг).
    Один из подходов упрощения реализации - вынос рендеринга в отдельный слой, способный работать, как на клиенте так и на сервере. Притом на сервере, скорее всего, он будет работать под node.js (так как на клиенте у нас только js), хотя и не обязательно (handlebars шаблоны легко реализуются на php или python).
    При этом слой api может быть реализован на любом языке.
    Пример: фронтенд (под ним я понимаю слой UI + UX) на vue, api на Go. Для серверного рендеринга нам нужна упрощенная реализация vue, без байндинга с DOM, но способная выдавать html в виде строки - VueSSR (не очень оптимизированая вещь, но нагрузка на серверный рендеринг как правило не большая).
    Есть еще два важных момента:
    Во-первых, крайне не желательно, чтоб на клиентской стороне не тратились и так дефицитные ресурсы на старте на рендеринг, который уже выполнен (vueRootVM.$mount()).
    Во-вторых, серверному рендерингу скорее всего понадобится доступ к api. Необходимо его упростить, чтобы запросы шли в обход nginx, напрямую, по локальной сети (в случае разных машин под api и рендеринг) или по unix сокету (в случае одной машины).

    Подводя итог. Актуально ли делать серверный рендеринг? Зависит от проекта. В любом случае, в современном мире он может существовать только в дополнение к клиентскому. А стоит ли оно того - решает каждый сам.
    Ответ написан
    1 комментарий
  • Воспроизведение аудио?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Полностью обойти не получится, ибо политика против агрессивного воспроизведения звука.
    Звук, что у video что у audio, можно включать только синхронно по действию пользователя.
    В blink (chrome, chromium, etc.) прокатит хак, если на действие пользователя вызвать метод load(), после play() можно вызывать когда угодно. Однако хак не работает в AppleWebkit (Safari на osX, любой браузер на iOS).

    Кроме того, эту ситуацию можно отлавливать. В современных браузерах метод play возвращает промис, который резолвится после удачного запуска и реджектится при неудачном (как в Вашем примере).
    Ответ написан
    3 комментария
  • Как осуществить отправку файла письмом строго после оплаты услуги через форму?

    bingo347
    @bingo347
    Crazy on performance...
    Никак и не нужно! Подрубайте эквайринг банка у которого обслуживаетесь, это гораздо лучше по трем причинам:
    1. Вам объяснят как отследить оплату
    2. Это законно, не будет проблем с налоговой
    3. Это дешевле (если сравнивать со штрафами от налоговой)
    Ответ написан
    Комментировать
  • Как разместить картинку как на макете?

    bingo347
    @bingo347
    Crazy on performance...
    /*блок родителя*/
    .parent-block {
      position: relative;
      width: 100%;
      max-width: 1330px;
      margin: auto;
    }
    /*блок картинки*/
    .image-block {
      position: absolute;
      right: 0;
      transform: translateX(60%);
    }
    Ответ написан
    Комментировать
  • Откуда пошло разделение терминов с Client-side и Server-side на Front end и Back end?

    bingo347
    @bingo347
    Crazy on performance...
    "Client-side и Server-side" и "Frontend и Backend" - это абсолютно разные и никак не связанные понятия

    Клиент - это приложение, которое делегирует часть своего функционала другому приложению - серверу
    Сервер - это приложение, которое обслуживает множество клиентов, предоставляя им свой функционал
    Frontend - это часть приложения, отвечающая за интерфейс (GUI, CLI, etc.), то есть то, что непосредственно видит пользователь, с чем пользователь взаимодействует
    Backend - это часть приложения, отвечающая за бизнес логику, за фоновые задачи, за то что скрыто от пользователя

    Практически любое приложение содержит backend часть, не зависимо от того клиент оно, сервер или вообще работает без клиент-серверного взаимодействия
    frontend часть может содержать как клиент, так и сервер, хотя сервера содержат ее не часто
    Яркий пример - X.org (сервер GUI в Linux и некоторых других *nix системах) содержит frontend часть - рисует на экране, получает пользовательский ввод (клавиатура, мышь, джойстик, etc.), а простейшие WindowManager (например awesome), являющиеся клиентами по отношению к X.org, frontend части не содержат

    Конкретно в web это идет с тех времен, когда вся логика была на сервере, а на клиенте были статичные html страницы, а js использовался только для красотулечек-финтифлюшечек

    P.S. Еще про web, а конкретно про его клиентскую часть, то есть браузер:
    Когда пишем html, css - это frontend (пусть "чистые" верстальщики порадуются)
    Когда пишем js код взаимодействующий с DOM, CSSOM, рисующий на Canvas - это frontend
    Когда в js обрабатываем пользовательские события (keyup, click, focus, touchstart, etc.) - это frontend
    Когда на js производим расчеты, проверки ввода, вешаем таймеры, работаем с локальными хранилищами, отправляем ajax запросы - это backend
    Когда обрабатываем такие события как load, message, DOMContentLoaded - это backend
    Код работающий в WebWorker'е - это backend
    Продолжать можно долго, суть думаю ясна
    Ответ написан
    Комментировать
  • Что нужно помнить в js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Бесполезно учить JS (как и любой другой ЯП или технологию), владение приходит только с практикой и опытом
    От того, что Вы прочитали что-то о незнакомой Вам технологии, Вы получите нулевой результат
    От того, что скопировали примеры - аналогично
    От того, что решили самостоятельные задачи - результат около 5%
    Начните делать небольшой проект и за информацией лезте в MDN, это будет гораздо эффективнее
    P.S. Кантор устарел, ИМХО
    Ответ написан
    Комментировать
  • В каких случаях использование фреймворка(например express.js) для nodejs не оправдано?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Когда у Вас хайлоад express/koa выльются затратами вида "нам нужно еще +5 машин", но железо нынче дешевое, пишите на express, и Вам проще и я буду продолжать по 200-300 тыс зарабатывать
    Ответ написан
    Комментировать
  • Что делать веб разработчику, если уже всё придумано?

    bingo347
    @bingo347
    Crazy on performance...
    Пока не возникнет потребности в чем-то - не появится и идеи. Делать что-либо ради того, чтобы сделать - результаты будут плачевными, хотя бы потому, что Вы даже не представляете себе потребности ожидаемые от продукта, который Вы делаете.
    Пример. Все мои пакеты на npm возникли из-за того, что я не нашел того, что хорошо бы решало мою задачу, далее делался велосипед, далее приходило понимание, что этот велосипед нужен где-то еще, в итоге я создаю пакет, npm publish и... блин, а мой велосипед полезен кому-то еще
    Ответ написан
    Комментировать
  • Чем опасна загрузка в iframe с постороннего сайта?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Ничем. Кросдоменный iframe исполняется в отдельном изолированном контексте, а в последних версиях хрома в отдельном потоке
    Ответ написан
    Комментировать
  • MEAN: Можно ли держать HTTP-socket открытым в течение всего сеанса?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    ИМХО, но для этой задачи лучше подойдет web-socket
    Для простоты реализации можно заюзать https://www.npmjs.com/package/ws-api
    Ответ написан
    Комментировать
  • Node.js что мне нужно, синхронность или асинхронность?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    node v7.6+ или транспайлим бабелем async2generators
    function requestAsync(params) {
      return new Promise((resolve, reject) => {
        request(params, (err, response, body) => {
          if(err) { return reject(err); }
          resolve({response, body});
        });
      });
    }
    
    async function getURL(_url) {
      var data, url = _url;
      do {
        const {body} = await requestAsync({url});
        data = JSON.parse(body);
        url = _url + '&pageToken=' + data.nextPageToken;
      } while(data.nextPageToken !== undefined);
      return data;
    }
    Ответ написан
    5 комментариев
  • Какие технологии нужны для полноценного SPA?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Если нужен серверный рендеринг (например для сео или ускорения первичной загрузки), то тут однозначно придется использовать node.js
    Для всего остального бэк может быть любым
    БД выбирается под данные и то, как Вы с ними будете работать
    Общение между фронтом и бэком лучше организовать через websocket
    Ответ написан
    Комментировать
  • Как достучаться до сервера?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    hostname у server.listen должен быть IPv4 или IPv6 строкой
    исключение 'localhost' - алиас для '::1'
    колбэк скорее всего 1-м аргументом получает ошибку, но Вы ее не обрабатываете

    если не указывать hostname или передать в него '0.0.0.0' то порт будет слушаться на всех сетевых устройствах
    Ответ написан
    Комментировать
  • Каким методом обошли проверку баланса в скрипте?

    bingo347
    @bingo347
    Crazy on performance...
    1. Любые данные должны поступать в запрос как данные, в sql ориентированых БД для этого есть prepared запросы
    У Вас же в поля формы можно вставить sql-injection
    2. Любая операция, требующая нескольких запросов на изменение данных должна быть обернута в транзакцию, если что-то пошло не так - откат
    Ответ написан
    Комментировать
  • Какой Internet Explorer стоит учитывать при разработке?

    bingo347
    @bingo347 Куратор тега HTML
    Crazy on performance...
    IE официально deprecated и те кто его используют вряд ли принесут Вам прибыль, так что вполне можно ориентироваться на Edge у которого проблем значительно меньше, а так на IE10+ практически все лечится с помощью polyfill.io
    А вот на что из динозавров действительно стоит обратить внимание - Safari, я лично 8+ стараюсь поддерживать, который в свою очередь так же лечится polyfill.io
    Ответ написан
    1 комментарий
  • Как работают WebSockets?

    bingo347
    @bingo347
    Crazy on performance...
    WebSocket - постоянное соединение поверх http(s)
    При установлении соединения происходит рукопожатие с помощью специальных http заголовков, после любая сторона в любой момент времени (пока соединение не прервется) может писать в тело запроса сообщения. Каждое такое сообщение представляет из себя передаваемые данные + мета-данные

    1. Можно найти сходство с tcp, только вместо пакета у нас сообщение. Так как ws работают поверх http, который в свою очередь работает поверх tcp, то формально одно сообщение может быть разбито на несколько tcp пакетов, а в одном пакете может содержаться несколько сообщений, однако единицей данных для ws является именно сообщение
    2. ws - это постоянное соединение, которое будет висеть пока любая из сторон не закроет его либо пока не оборвется связь. Так как сокет формально может простаивать (когда нет обмена данными), то tcp соединение для него нужно открывать с опцией keep-alive, а так же желательно отправлять http заголовки для keep-alive в рукопожатии.
    3. Любая сторона может в любой момент времени может отправить любое количество сообщений. Получающая сторона получит данные, когда до нее дойдут все tcp пакеты самого раннего из сообщений (это гарантирует, что сообщения придут в том же порядке, в котором они были отправлены)
    Ответ написан
    6 комментариев
  • Как правильно сравнить время в цикле?

    bingo347
    @bingo347
    Crazy on performance...
    Если start > end то промежуток содержит полночь, в этом случае надо проверять, что текущее время входит либо в промежуток от start до полуночи либо от полуночи до end
    Ответ написан
    2 комментария
  • Как удалить повторное отправление post на сервер node.js?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    req.headers содержит все заголовки запроса распаршеные в объект, где ключ - сам заголовок приведенный в нижний регистр, а значение - его значение
    То есть в Вашем случае можно проверять req.headers.referer
    Ответ написан
    Комментировать