Задать вопрос
Ответы пользователя по тегу JavaScript
  • Как ограничить частоту запросов к бэкэнду?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Выдавать и проверять токен. При первой загрузке страницы выдаётся уникальный токен, с которым может быть выполнен первый запрос к апи. В ответ на первый запрос с токеном отдаются данные и токен для следующего запроса – только с ним, и не раньше X секунд можно получить данные. И так далее.

    Разумеется, хранить токены в in-memory хранилище (Redis, Memcached, APC). Продумать вариант с потерей связи и перезапросом со старым токеном (кэшировать данные на N секунд). Запрос со следующим токеном стирает из кэша предыдущий и его данные.
    Ответ написан
    Комментировать
  • Как полностью очистить Application Cache через javascript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Мозилла рекомендуют обновить manifest-файл, и вызвать метод window.applicationCache.swapCache() – но он не обновит уже загруженные в приложение файлы. Поэтому после этого хорошо бы перезагрузить и страницу.

    p.s. вообще AppCache ведь deprecated, не стоит его использовать. Вместо него – Service Workers.
    Ответ написан
    Комментировать
  • Можно ли узнать информацию о добавляемом на сервер аудиофайле?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Если эта информация прописана в id3 теге mp3 файла, то можно. Например, ffmpeg или его утилита ffprobe умеют читать эти данные из mp3 файла:
    ffprobe -v quiet -print_format json  -show_format  music.mp3

    Результат:
    {
        "format": {
            "filename": "music.mp3",
            "nb_streams": 2,
            "nb_programs": 0,
            "format_name": "mp3",
            "format_long_name": "MP2/3 (MPEG audio layer 2/3)",
            "start_time": "0.025056",
            "duration": "219.350204",
            "size": "7072585",
            "bit_rate": "257946",
            "probe_score": 51,
            "tags": {
                "title": "Rihanna - Work (Feat. Drake)(VipMusic.In)",
                "artist": "VipMusic.In",
                "album": "Rihanna - ANTi (2016) - VipMusic.In",
                "composer": "VipMusic.In",
                "copyright": "VipMusic.In",
                "publisher": "VipMusic.In",
                "genre": "[VipMusic.In]"
            }
        }
    }

    Имейте в виду, что могут загрузить Metallica, прописав в тегах файла, будто это Лепс.

    Ещё вариант – подключаться к api какого-то музыкального сервиса опознавания записи по звуку – напр. EchoNest вроде бы может принимать upload'ы и идентифицировать треки.
    Ответ написан
    Комментировать
  • Можете расшифровать такую форму записи?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    См. оператор запятая – он оценивает каждое из перечисленных выражений и возвращает результат последнего. Например:
    (123,456,789) // 789
    Ответ написан
  • Как на JS асинхроно отслеживать улсовие if else?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вместо setInterval попробуйте использовать requestAnimationFrame() – callback будет вызываться часто, но в нём проверяйте время от предыдущего «рабочего» срабатывания, чтобы прошло больше 50мс.

    Приведённые вами проверки условий не должны быть сколько-нибудь заметными для CPU, если только вы их не для миллиона пар объектов прогоняете каждый раз.
    Ответ написан
    Комментировать
  • Как нарисовать молекулу на canvas?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Легко нашёлся готовый конструктор. Хотите молекулу MDMA? =)

    upd. «я буду читать комменты перед отправкой ответа. я буду читать комменты перед отправкой ответа. »

    upd.2 поднял из комментариев: WebGL библиотека для визуализации молекул.
    Ответ написан
  • Как пройтись по 4 массивам одной функцией?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Я бы использовал arguments: в функцию первым аргументом передавал искомое значение, а дальше сколько угодно массивов:
    function check(search) {
      var i=1, result=[];
      for(;i<arguments.length;i++) {
        arguments[i].some(function(el,j){
          if( el !== search) return;
          result.push("массив "+(i-1)+" эл. "+j);
          // return true; // если не больше одного раза в одном массиве ожидается
        });
      }
      return result;
    }
    
    var found = check( 11, a,b,c,d);
    Fiddle
    Ответ написан
    Комментировать
  • Как работать с атрибутами data-* в jQuery?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Используйте метод jQuery .data():
    <div id="mydiv" data-modal-name="Ololo"></div>
    var modalName = $('#mydiv').data("modal-name");
    Fiddle
    Ответ написан
    Комментировать
  • Как узнать номер элемента массива?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    var arr = [{name:'Петя', id: 45},{name:'Петя', id: 123},{name:'Игорь', id: 6542},{name:'Коля', id: 5},{name:'Вася', id: 2}]
    var index, search = 5;
    for( var i=0;i<arr.length;i++) if( arr[i].id === search) { index = i; break; }
    
    // В переменной index либо по-прежнему undefined, либо индекс искомого элемента
    console.log( "Индекс " + (index === undefined ? 'не найден' : index));
    // Индекс 3


    Upd. не самый удачный вариант Максим можно улучшить через .some():
    var found, search = 5;
    arr.some(function (el, index) {
      if( el.id !== search) return;
      found = index;
      return true;
    });
    Ответ написан
    1 комментарий
  • Каковы реальные лимиты (ограничения) в Vk API?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Эти лимиты ВК могут изменять, и не раскрывают их точные значения. ТП ответит что-то подобное.

    Различия в бане за wall.get() и groups.getMembers() я бы предположил, обусловлены общей статистикой этих методов – вероятно, на wall.get() сейчас бОльшая нагрузка, поэтому к злоупотреблению им они чувствительнее.

    Вы можете выполнять запросы с token'ами аккаунтов, которые дали разрешение. В таком случае ограничение 3 в секунду – это на один токен.
    Ответ написан
    2 комментария
  • Как вывести каждое 5ое значение от 1 до 100?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    for( var i=1; i<=100; i++) console.log( i%5 ? i : "azaza");
    /* 1
       2
       3
       4
       azaza
       6
       ... */


    Старый вариант:
    for( var i=1; i<=100; i+=5) console.log("i:" + i, "azaza");


    Либо 1, либо 100 войдёт в ряд, но не оба сразу. Считать от "1" – закончится на 96. Начать с 5 (или с 0) – тогда последней будет сотня.
    Ответ написан
    4 комментария
  • Магический пересчет HEX кодов, возможно?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Написал вам пример с переходом, где по каналам R, G и B считается промежуточное значение. Цвета A и B надо задавать строго как 6-значные 16-ричные строки.

    Такой вариант проще в реализации, но хуже по качеству – по-моему, средние цвета невзрачны и неправильны.

    Качественно, по-крутому, надо переводить цвета в модель HSL или HSB, в тех каналах считать промежуточное значение, и конвертировать его обратно в RGB для отображения.
    Ответ написан
    Комментировать
  • Нужна ли математика для создания подобных эффектов?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Глаз (© Artur Vill) сделал, разумеется, не "Зоракс" (как и всё остальное, засвеченное в нарезке).

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    10к в одной папке может быть проблемой. Я бы раскидал по дереву папок, скажем, по сотням от 0 до 20, и числам:

    1234 => /12/34/ => и там пять файлов
    0001 => /00/01/
    2000 => /20/00/

    У себя в одном проекте я организовал примерно похожую структуру папок, но чуть усложнил – т.к. число папок не равномерно для разных корневых папок, я зеркалирую порядок битов в каждом номере, и бью на уровни по шестнадцатиричным буквам:
    число  двоичное        наоборот        hex  папка
    0001   0000 0000 0001  1000 0000 0000  800  /8/0/0
    1234   0100 1101 0010  0100 1011 0010  4B2  /4/B/2
    0173   0001 0111 0011  1100 1110 1000  CE8  /C/E/8
    2000   0111 1101 0000  0000 1011 1110  0BE  /0/B/E
    Так в каждом уровне папок у вас будет не более 16 подпапок.

    А ещё, может быть, вы не делаете предзагрузку звуков? Стоит начинать скачивать звуковой файл сразу, как становится ясно, или вероятно, что он понадобится. Чтобы на момент начала воспроизведения файл уже был загружен.
    Ответ написан
    Комментировать
  • Как открыть ссылку на js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Ловите событие клика. Дальше два варианта:

    1. подменять атрибут href в ссылке;

    2. останавливать событие, и делать window.open() с новым адресом.
    Ответ написан
    1 комментарий
  • Что не хватает в моем коде? Что изучать дальше?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Я только про «упаковку» напишу. Не хватает английского языка – сразу понятно, что уровень не разговорный. "Prophet" – это скорее, «пророчество», «предсказание», чем прогноз. Прогноз погоды – "weather forecast". Та же претензия к содержанию Readme. Помимо языка, Readme не полон, т.к. не даёт толком никакого представления о продукте. Ссылка на демо или хотя бы скриншоты не помешали бы подтвердить, что выглядит действительно красиво. Как устанавливать, какие зависимости, примеры интеграции, API, ссылки на использованные компоненты, может. Не видно тестов.
    Ответ написан
    Комментировать
  • Как написать (простое) дополнение Firefox максимально просто, без углубления в изучении?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Для себя наскоро написал простое расширение под FireFox, просмотрев их гайд по созданию расширений. Понадобилось установить nodejs и jpm.

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Cохраняйте кликнутую ссылку. Если кликают впервые, её ещё нет среди сохранённых:
    var used=[];
    function checkIt(e){
        if( !~used.indexOf( this)) used.push( this), e.preventDefault();
    }
    $('.notsofast').on('click',checkIt);

    Fiddle

    ТС уточнил, что при клике по другим ссылкам, нужно «обнулять» посчитанные ранее. Тогда проще – надо запоминать только один элемент, кликнутый ранее:

    var used;
    $(".categoriesPage .categoryBox .textBox").on("click", function(){
        if( used !== this) used = this, e.preventDefault();
    }
    Ответ написан
    7 комментариев
  • В чем проблема с учебой программированию?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Если трудно – значит, на этом учишься. Так и должно быть. Можно учиться на абстрактных задачах, можно на реальных – была бы разница «до» (– Не знаю, как вообще к этому подойти!) и «после» решения (– Ха! Так вот, как оно делается, совсем не сложно!).

    Попробуйте себя в тех задачах, которые лично вам близки и интересны. Может, это генеративный арт – когда скрипт генерирует какие-то оригинальные узоры, рисунки, анимации, GIF'ы, которые потом все расшаривают в сетях. А может, реальные задачи, за которые платят.

    Не важно, как – целиком своим умом, или с помощью коллеги, соседа, StackOverflow или Toster'а вы в итоге решите задачу – главное, решите, и уже будете понимать, как подобное делать.

    Поэтому работать лучше там, где вы по началу даже чуть-чуть не дотягиваете до уровня вакансии, где коллеги кругом все круче вас – это для вас идеальное место, где вы будете расти наиболее быстро.

    Что касается примера с выводом в консоль. Как и с любой другой необъятной, «сложной» и непонятной задачей – бейте её на более мелкие, отбивайте кусочки, которые можете решить сразу самостоятельно. Вывод в консоль – можете вывести "Hello world?". Отлично, сделано. Вывести первую строку. Прекрасно! Вывести вторую? Мега. Теперь, может, что-то оптимизируем – ведь 1-я и вторая по сути очень похожи? И так далее, пока не образуется решение в одну строку, а вы отправитесь пить кофе, почитая себя гением на сегодня. : )
    Ответ написан
    Комментировать