Ответы пользователя по тегу JavaScript
  • В чем разница между именованиями переменных построчно и через запятую?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Есть разница, которая называется стилем программирования. Когда вы работаете в команде или просто хотите улучшить качество читабельности своего кода, применяются стили и стандарты.

    С точки зрения выполнения кода разницы нет. Предполагаю, что есть малозначимая разница при разборе кода JS-движком.
    Ответ написан
    Комментировать
  • Как устроена архитектура современного front-end приложения?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    В одностраничном приложении (SPA) присутствует единая точка входа. Это загрузка основного скрипта, который будет отвечать за логику работы приложения. Это как index.php в корне веб-сайта. Ну а дальше он уже сам решает, что делать. В основной скрипт обычно включены составляющие отвечающие за маршрутизацию и загрузку других частей приложения. Вы можете представить себе SPA как набор кирпичиков с раствором в виде основного скрипта.
    Так вот эти кирпичики могут быть загружены сразу, а могут лишь в тот момент, когда они потребуется, примерно как Autoloader в Composer.

    Относительно загрузки есть несколько разных подходов.
    1. Когда грузится только загрузчик и затем остальные скрипты и шаблоны подгружаются по необходимости.
    2. Когда все (скрипты+шаблоны) собирается в огромный JS-файл. Это файл потом работает.
    3. Когда JS идет большим файлом, а шаблоны отдельно (так работает AngularJS 1).

    Есть множество различных сборщиков, например WebPack, Gulp, Brunch, Grunt. Их вариаций много, не пугайтесь.

    После начальной загрузки приложение решает, что должно быть запущено первым. Обычно это какие-то системные вещи, вроде загрузки шаблонизатора, всяких кэшей и роутера.
    Далее роутер рабирает маршрут и запускает нужный модуль (контроллер/компонент); в зависимости от фреймворка это выглядит по-разному, но суть одна и таже.
    Каждый компонент отвечает за модификацию отдельных узлов дерева состояний, которое так или иначе спроецировано на DOM. Если смотреть на бэкенд, это как подставлять в шаблон данные, только на бэкэнде это происходит в один проход, а здесь перестройка происходит сразу после изменения оригинальных данных.
    В каждом феймворке это сделано по-своему. Смысл одинаков - проекция данных на DOM.
    Данные вытаскиваются приложением самостоятельно, могут быть загружены через Ajax. У меня есть приложение, где транспорт идет через веб-сокеты. Можно даже через iframe заморочиться, это не имеет значения.
    Иногда сервер отдает страничку с изначально подготовленными данными. Это делается в разных целях, в основном для уменьшения скорости старта приложения.

    Из личного опыта скажу, что вам следует начинать с Angular 2, т.к. он сделан намного проще остальных в плане использования.
    Ответ написан
    1 комментарий
  • Почему mysql обрывает соединение?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Да, использование пула соединений поможет вам избежать подобной проблемы.

    Рекомендуется также изменить размер количества одновременных соединений (max-connections) в настройках MySQL.
    Ответ написан
    2 комментария
  • Что это за библиотека "сортировка списка"?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    jQuery, элементарная замена класса.
    Ответ написан
    Комментировать
  • Почему AngularJS не всегда удаляет элементы DOM, которые удаляются из $scope?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Для начала смотреть в tr.
    Еще можно попробовать $scope.applyAsync()
    Ответ написан
    Комментировать
  • Как посредством API проверить вступил ли пользователь в сообщество Vk/Facebook/Ok?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Называется это все Social Lock, соц. сетями не приветствуется. Обычно делается кнопка вроде "Получить купон через ВК", пользователь кликает на кнопку, далее он устанавливает ваше ВК приложение себе (авторизуется через него), потом у вас есть идентификатор и токен пользователя и вы проверяете членство пользователя в сообществе. Если альтернативные способы получения ID-пользователя (кликджекинг), но они караются очень жестоко как со стороны поисковых систем, так и со стороны соц. сетей.
    В целом практика Social Lock сомнительна, очень советую от нее отказаться.
    Как можно сделать так, чтобы пользователь все же присоединился к сообществу.

    Вариант 1. "Хитрожопый". У вас есть закрытое сообщество, в нем вы выкладываете купоны, как только пользователь вступает в него, он получает доступ к купонам со скидками. Часть пользователей покидает сообщество сразу после вступления и получения доступа к купонам.

    Вариант 2. "Правильный". Ваши сообщества интересны. В них есть купоны, статьи, хороший контент о продукции, которую вы продаете. Например уроки макияжа и готовки. Для мужчин работают обзоры, хаки, приколы. Т.е. ваши сообщества ведутся профессионально. Это дорогой вариант, но хорошо работает с приличными конторами. В такие сообщества люди вступают часто и сидят там годами, приглашают в них друзей. Сайт обычно интегрируется с ними путем встраивания постов на страницы продуктов и виджетов.
    Ответ написан
    Комментировать
  • Как спарсить access_token из страницы дебаггера на Фейсбук?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Вам не нужно ничего парсить. Просто используйте готовое Javascript SDK, чтобы работать с Facebook.
    https://developers.facebook.com/docs/facebook-login/web
    Ответ написан
    2 комментария
  • Возможно ли поллноценно в facebook api javascript осуществить logout сразу из приложения и из системы?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Я рекомендую не зацикливаться на моменте выхода из Facebook. Это другой сайт, который не имеет никакого отношения к вашему.

    Здесь про выход расписано https://developers.facebook.com/docs/reference/jav...
    Можете попробовать открывать https://www.facebook.com/logout.php в спрятанном iframe, чтобы вышибить сессию Facebook из браузера. Не самое красивое решение, но должно сработать.
    Ответ написан
    1 комментарий
  • Как на своём сайте вывести счетчик лайков конкретной записи?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Прочитайте это раздел целиком https://developers.facebook.com/docs/javascript

    Подключите Javascript SDK.
    Установите приложение себе и получите токен пользователя. Вызовите ваш с полученным токеном пользователя.

    Помните, что код может выполняться в контексте текущего пользователя и в контексте приложения.

    FB.api(
      '/10154092833240172',
      'GET',
      {"fields":"reactions.type(LIKE).summary(total_count).limit(0).as(like),reactions.type(LOVE).summary(total_count).limit(0).as(love),reactions.type(WOW).summary(total_count).limit(0).as(wow),reactions.type(HAHA).summary(total_count).limit(0).as(haha),reactions.type(SAD).summary(total_count).limit(0).as(sad),reactions.type(ANGRY).summary(total_count).limit(0).as(angry)"},
      function(response) {
          // посмотрите, что приходит в ответе
         console.log(response);
         // затем используйте любимый способ для интерполяции данных и html
      }
    );
    Ответ написан
  • Есть ли обучение по созданию push уведомлений?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Если ты не понимаешь теорию, значит на практике у тебя ничего стоящего не выйдет.
    А так вполне себе хорошая теория тут https://developer.mozilla.org/en-US/docs/Web/API/P...
    И она содержит ссылочку на вполне себе реальный пример https://github.com/chrisdavidmills/push-api-demo

    Как эта штука используется на практике.

    После того, как вы определились с тем, что вы собираетесь отправлять, вам нужно сделать несколько вещей.
    1. Запросить у пользователя разрешение на отправку уведомлений. Делается это через Notification.requestPermission. Если мы получили подтверждение, то идем дальше, если нет, забиваем на это дело. Здесь нужно быть очень осторожным и делать это ненавязчиво.

    2. Создать фоновый обработчик, который будет принимать push-уведомления от сервера. Это делается через вызов navigator.serviceWorker.register. Например так https://github.com/chrisdavidmills/push-api-demo/b...
    Он подписывается на канал. Канал - это как комната в чате.

    За канал отвечает сервер. Сервер слушает порт, браузер подключается к серверу и тупо ждет пока сервер что-нибудь пришлет. Сервер может периодически отправлять пустые сообщения, на которые клиент должен отвечать для поддержания соединения активным. Поэтому у сервера может быть много открытых соединенией.

    3. Написать сервер уведомлений. У nginx есть хороший модуль. Он будет обслуживать клиентов.

    Рекомендую к просмотру https://www.youtube.com/watch?v=5A5Iw9z6z2s
    Ответ написан
    7 комментариев
  • Почему скомпилированный TypeScript намного читабельнее чем транспилированный ES6?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Два варианта:
    1. Различные способы трансляции
    2. К одному был применен минификатор, а к другому нет.

    А вообще забейте на отображение, если вам нужно отладка, используйте sourcemaps.
    Ответ написан
    Комментировать
  • Как получить действие/настроение из поста в Facebook Graph API?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Вы не очень внимательно читали документацию, хотя в ней довольно толково все расписано.
    Есть параметр fields, в который передается список полей. https://developers.facebook.com/docs/graph-api/usi...

    Существует также интересный параметр metadata, который вернет вам список полей объекта с описаниями.

    $request = new FacebookRequest(
      $session,
      'GET',
      '/10206059239425923_10211089063488381',
      array(
        'metadata' => '1'
      )
    );
    
    $response = $request->execute();
    $graphObject = $response->getGraphObject();
    /* handle the result */
    Ответ написан
  • Не убьёт ли WebAssembly node.js?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Нет. Вы путаете клиентскую сторону и серверную.
    node.js предназначена для работы на сервере. WebAssembly - запуск ресурсоемких приложений на клиенте.
    Ответ написан
    Комментировать
  • Как правильно спроектировать MYSQL для чата на node.js?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Вы неправильно рассматриваете систему чатов.
    В чатах есть комнаты, внутри комнат сообщения и участники.
    Тет-а-тет это приватная комната с 2-ми участникам.

    room 
    - id
    - name
    - private
    
    participant (участник чата)
    - id
    - name
    
    roster (список участников чата)
    - room_id
    - participant_id
    
    history (история сообщений)
    - id
    - room_id
    - participant_id
    - timestamp
    - type (тип сообщения, иногда нужны системные сообщения от ботов)
    - text
    - deleted


    А теперь вперед - учить JOIN'ы!

    По поводу нагрузки - при правильном проектировании приложения, нагрузка на базу будет минимальной, преимущественно проверки, кто принадлежит к какой комнате и запись в историю.
    Сколько-нибудь значимая нагрузка будет при 10к человек онлайн. Поверьте, это очень большая посещаемость.
    При большей посещаемости ваша проблема будет решена горизонтальным масштабированием (шардингом БД).
    Ответ написан
    Комментировать
  • Гоогле API maps как задать константу?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Если посмотрите на пример, то вам нужно знать placeId для отправной точки.

    // вместо place.place_id вам нужно захардкодить какой-нибудь идентификатор
        origin_place_id = place.place_id; // например  origin_place_id = "ChIJq6qqWiSsEmsRJuIpepyEua4"
        route(origin_place_id, destination_place_id, travel_mode,
              directionsService, directionsDisplay);
    Ответ написан
  • Существуют ли рекомендации(техники, подходы) быстрого поиска ошибок в коде?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    При поиске ошибок необходимо использовать системный и структурный подходы плюс дедукция.
    Например, у вас есть ошибка "Клиент не получает уведомление о заказе".
    В данном случае у вас есть система заказа и система доставки почты.
    Нужно выяснить, какая именно система не работает, заказ или почта.
    Если другие письма доходят, то значит что-то не так с системой заказа.
    Аналогично разбираем на части систему заказов до момента вызова функции отправки почты.
    В данном случае нам нужен отладчик в связке с хорошей IDE.
    Устанавливаете брейкпоинт и смотрите, вызывается ли функция после создания заказа. Если да, то проверяете аргументы, нет - значит ошибка происходит до этого момента. Следовательно вам потребуется стек вызовов функций/методов. Обычно он доступен через отладчик. Используя отладчик вы можете идти по стеку вызовов как сверху вниз, так и снизу вверх. Как вам будет удобнее.
    Данный метод позволяет отлаживать ошибки в проектах любого уровня сложности.

    Помимо использования отладчика необходимо совершенствовать знания о языковых примитивах и их использовании (надо курить маны), использовать современные методологии разработки, потихоньку учить разные паттерны проектирования и фреймворки.

    Кроме изучения самого языка, необходимо понимать, как работает почта, DNS, базы данных, очереди, стек TCP/IP и сетевые операционные системы в целом.
    Ответ написан
    Комментировать
  • Как создать колонки одинаковой высоты?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    .row-eq-height {
      display: -webkit-box;
      display: -webkit-flex;
      display: -ms-flexbox;
      display:         flex;
    }


    getbootstrap.com.vn/examples/equal-height-columns
    Ответ написан
    Комментировать
  • Он лайн редактор схем для нескольких одновременных пользователей. Реализация?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    То, что обычно применяется на практике для совместной работы над документами https://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D0%B5%D...
    Ну а общение можете реализовать через веб-сокеты, например socketo.me
    Ответ написан
    Комментировать