Ответы пользователя по тегу JavaScript
  • Что учить, не могу определиться!?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    идите постепенно, вещи вроде Angular и React намного проще изучить когда у вас уже есть определенный уровень в JS, а именно четкое понимание базовых концепций. А так это будет просто тыканье на месте и не продуктивно потраченное время.

    Берусь за jquery, json, sass,lessи ничего толком выучить не могу

    Учить JSON? бред. Осоздайте необходимость появления форматов типа JSON/XML/etc. Целенаправленно учить less/sass, то же не ок. Учите CSS (less/sass/postcss это лишь инструменты которые позволяют вам более грамотно организовать ваш код), и не в плане свойства/селекторы, а в плане подходов к верстке (БЭМ, MCSS и т.д.). Ну и да, заучите что такое DRY и почему вообще возникла необходимость в инструментах типа less/sass.

    ajax

    Не изучайте AJAX, изучайте HTTP. Тогда будет проще отделить реализацию от общей концепции. Хватит бездумно говорить "сделаю AJAX запрос", давайте говорить "сделаю HTTP запрос".

    короче направление простое - когда у вас будет более мение стабильный фундамент - то можно приступать к более высокоуровневым вещам.
    Ответ написан
    15 комментариев
  • Что такое Virtual DOM?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну вот есть DOM. Он медленный, и дергать его просто так не стоит. А есть виртуальный DOM, что-то типа прослойки между вашим кодом и реальным DOM. Вы можете дергать виртуальный DOM сколько вам душе угодно, а прослойка эта соберет всю инфу о том как вы чего делали, и попробует оптимизировать взаимодействие с реальным DOM что бы вышло как можно меньше действий.

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

    Решение в лоб - каждый раз когда приходят данные, дропать старую таблицу, проходить циклом по массиву и формировать новую. Это куча операций с DOM. У вас каждые n милисекунд будет полностью перестраиваться вся эта штука, дропаться и создаваться новые элементы и все это будет ужасно долго пересчитываться и перерисовываться.

    А теперь добавим между всем этим виртуальную апишку, которая запоминает что она там в прошлый раз создала и что надо в этот раз создать. Вы все так же влоб проходите циклом по массиву и просите виртуальный дом построить новую апишку, а виртуальный дом будет стараться переиспользовать то что у него уже есть, ну и все в таком духе. За счет этого получается нефиговый прирост производительности (но есть потери на работу самого виртуального DOM, зато можно фигачить как хочешь).

    Если же прослойку эту сделать со своим интерфейсом, можно получить слой абстракции для работы с UI. Именно это предлагает тот же React. Слой абстракции над UI. Вы можете работать с реактом, но UI будет отрисовываться не через DOM а скажем... это может быть нативный интерфейс мобильной платформы (гуглить native-react). Ну и т.д.
    Ответ написан
    Комментировать
  • Как получить доступ к элементу в react.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Обычно в html у блока прописываем id, а в js скрипте получаем к нему доступ через document.getElementById("id")

    и получаем море проблем.

    в React вы работаете с компонентами, и можете встраивать свою специфичную логику внутрь конкретных компонентов. Скажем есть метод componentDidMount который вызовется после рендринга DOM и вы можете там обращаться к нодам уже DOM и что-то делать.

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

    https://facebook.github.io/react/docs/component-sp...
    Ответ написан
    3 комментария
  • SetTimeOut возвращает отрицательное значение?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    static int timeoutId()
    {
        static int lastUsedTimeoutId = 0;
        ++lastUsedTimeoutId;
        // Avoid wraparound going negative on us.
        if (lastUsedTimeoutId <= 0)
            lastUsedTimeoutId = 1;
        return lastUsedTimeoutId;
    }

    исходя из этого кода - негативным timeoutID быть не может. Там есть проверка, если все id-шки закончились и пошло переполнение - то ресетится в единицу. Но это хром. В других браузерах может быть все совсем по другому. Главное не привязывать логику к формату timeoutID и все будет хорошо.
    Ответ написан
    2 комментария
  • Объясните ситуацию с выявлением утечек памяти в dev tools?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну давайте рассуждать. Если вы приказали собрать мусор и он собрался и удалился, значит сборщик сам бы все почистил если бы памяти стало малова-то. Просто вы не дождались этого момента. С другой стороны, если после ручной сборки мусора память не опустилась до baseline то есть вероятность утечки памяти.
    Ответ написан
    Комментировать
  • Почему в ответе выходит 122?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Задачка на каррирование и понимание работы областей видимости и цикла жизни переменных.

    Функции mystery и mystery3 возвращают функции, которые имеют доступ к переменным родительского скоупа. Функция создается каждый раз при вызове функций mystery/mystery3 потому не возникает проблем с повторным вызовом.

    Переменные живут пока на них хоть кто-то ссылается. В вашем примере на них ссылаются возвращаемые функции, и пока они не отработают, данные нам все еще доступны. Хоть вам может и казаться что после завершения работы функции они исчезают в небытие.

    Вот собственно и все.
    Ответ написан
    6 комментариев
  • Как в AngularJS сделать формы неактивными во время сабмита (глобально)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вам же уже ответили на этот вопрос.

    stackoverflow.com/questions/24119329/fieldset-and-...

    Можно написать директиву для формы, можно определить директиву fieldset что бы не менять разметку...

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

    Пример
    Ответ написан
  • Где поискать JavaScript программиста для open source проекта?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    что бы велосипед не изобретался заново

    реализовать небольшой Object-Oriented JavaScript Framework


    Мне кажется в этих двух цитатах есть противоречие.

    Вот вам и идея проекта. Web-сайт агрегатор идей и поиск единомышленников.
    Ответ написан
    5 комментариев
  • Можно ли на сервере словить внешний ajax запрос?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Это запрос с клиента. Есть конечно шанс что расширение посылает дополнительную финформацию о себе в заголовках, но вообще Same-origin policy не должно давать просто так расширению делать запросы к к серверу не поддерживающее CORS. А если CORS поддерживается, то можно в заголовках выставить ограничения.
    Ответ написан
    Комментировать
  • Есть ли пример структуры angular+sailsjs+coffee?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    sailsjs - backend, angular - frontend. Между ними rest. так что ищите отдельно. Есть и то и то под кофе я так понимаю
    Ответ написан
    2 комментария
  • Поможете с Gulp?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    return gulp.src('assets/css/*.css')
            .pipe(sourcemaps.init())
            .pipe(postcss([ autoprefixer({ browsers: ['last 2 version'] }) ]))
            .pipe(sourcemaps.write('.'))
            .pipe(gulp.dest('./dest'));
    });


    тут явно не хватает строчки... что-то типа gulp.task
    Ответ написан
    2 комментария
  • Есть ли смысл с точки зрения производительности разделять объявление переменных внутри функции?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Нет, не загоняйтесь даже по поводу таких вещей. Если у вас это не в цикле выполняется десятки тысяч раз то вообще можно забить.

    Советую так же посмотреть доклад "Javascript глазами Jit компилятора"
    Ответ написан
    3 комментария
  • Существует ли подобный шаблон привязки javascript событий к DOM?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В целом норм, что-то похожее применяется в Angular (директива ng-click). Только там все чуть сложнее.
    Ответ написан
  • Нужны ли углубленные знания javascript angular-разработчику?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Хватит ли мне этого чтобы работать с ангуляром или надо сначала разобраться полностью javascript

    Ну вы же сами понимаете что не зная javascript вы будете писать гуано? Другой вопрос что это можно совместить, так как без заний JS вам и ангуляр будет тяжко познать.

    В целом это довольно жирный пласт знаний и если вы сейчас на почти нулевом уровне планируйте что что бы подняться на норм уровень у вас уйдет где-то годик проб и ошибок.
    Ответ написан
    3 комментария
  • Как составить регулярку?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Регулярные выражения парсят хорошо только регулярную грамматику.

    Вообще сложно что-то предложить так как совсем не понятно что вам надо парсить. Предоставьте пример исходного текста и что надо получить в итоге. Мне вообще кажется что вы какой-то XML хотите разобрать...
    Ответ написан
  • Совет в изучении ООП JavaScript?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Как быстро врубиться в ООП в JS:

    Все объекты. У объектов есть конструктор и прототип. Создание нового объекта - копирование прототипа в новый экземпляр объекта и вызов конструктора. В качестве контекста вызова конструктора будет использоваться экземпляр объекта. Конструктор - просто функция которая по умолчанию возвращает контекст вызова, но вы можете там сделать return и вывести любую херню.

    Важно понимать что прототип копируется. То есть если вы создали 10 инстансов одного типа, потом поменяли прототип, например добавив метод), то у первых 10-ти инстансов этих методов не будет, а у новых - будет.

    Наследование - просто объявляете тип со своим прототипом. В силу некоторых особенностей от некоторых типов не так то легко отнаследоваться без кастылей (например от массива).

    Для упрощения работы в ES2015 новый синтаксис для объявления объектов своих типов.

    Принципы ООП такие же как и везде, единственное что для инкапсуляции стоит еще про модули почитать так как в JS (как и в некоторых других языках) нет модификаторов доступа.
    Ответ написан
    Комментировать
  • Оптимизация CSS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Почитайте про то как происходит разбор селекторов и все встанет на свои места. Селекторы разбираются слева на право (или снизу вверх по дереву). То есть селекторы вида:

    .some-specific-element

    будут относительно быстрее

    #some-hight-specific-element .some-not-so-specific-element


    пососкольку не нужно сильно далеко траверсить DOM дерево.

    Самый медленный вариант селекторов:
    body.someSpecificClass *,
    * + span,
    html span


    benfrain.com/css-performance-revisited-selectors-b...

    идею вы должны уловить. Чем ближе в дереве - тем быстрее. А вообще с вложенными селекторами и каскадированием стилей лучше не баловаться слишком сильно. Учитывая что у вас есть препроцессоры.

    Ну и про BEM почитайте (У Вадима Макеева был неплохой доклад на эту тему).
    Использовать не агитирую но идеи которые в этой методологии заложены должны сильно облегчают жизнь.

    p.s. посмотрите в сторону autoprefixer и избавьте свой CSS от этих ужасных миксинов. Как уже заметили выше добавлять префиксы для border-radius уже не имеет смысла. Ваши миксины это не учитывают, а autoprefixer имеет актуальную статистику и позволяет вообще не париться по поводу таких вот вещей.
    Ответ написан
    1 комментарий
  • Масштабирование Javascript-приложений?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Хотел бы спросить вашего мнения, господа!


    Берем готовый фреймворк предоставляющий нам структуру - готово. Главное не делать лишних зависимостей и не пилить велосипеды. Low coupling и high cohesion.

    Ну и да, если вы думаете о будущем но не пишите тестов - вы не думаете о будущем. Либо у вас или ваших QA слишком много свободного времени для поиска регрессий.
    Ответ написан
    1 комментарий
  • Разделение бизнес-логики от представления в Javascript?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    MVC (и развития этих идей: MVVM, MVP, MVA, PAC...)

    Идея проста... между двумя слоями вводим третий который изолирует одно от другого. Слоеное лучше бисквита.

    p.s. Если вы не знаете как это организовать, лучше на самом деле взять фреймворк или библиотеку, которая организует для вас слой представления и абстрагирует ваш код от него (React например).
    Ответ написан
    6 комментариев