Ответы пользователя по тегу JavaScript
  • В чем разница между map, observable, subscribe, Promise?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    map - для каждого результата
    toPromise - преобразовать Observable в промис
    subscribe - подписаться на изменения в observable

    разница между observable и промисами - промисы отрабатывают только один раз, observable можно перезапускать множество раз. То есть вместо того что бы запоминать конфиг, мы буквально создаем объект, описывающий запрос (до вызова subscribe/map запрос реальный не отправляется). Если у вас отвалилась сеть и мы хотим повторить запрос - достаточно еще раз вызвать метод объекта, а не создавать новый запрос. Банально удобнее, особенно в плане реюза кода (можно сделать на уровне сервиса перехватчик запросов, который бы хэндлил за нас такие ситуации).
    Ответ написан
    Комментировать
  • Инкапсуляция в Es6 отсуствует?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Раньше я объявлял приватные свойства и методы так:


    Раньше вы криво создавали объекты и у вас получалась кривая реализация паттерна "модуль". Да и "свойства и методы" ваши приватные они как бы не совсем свойства и методы, это просто переменные (статические свойства в терминах java) и функции.

    Или я что-то упустил?

    Инкапсуляция в javascript достигается и достигалась ранее за счет модулей (сокрытие переменных в дочернем скоупе.

    let privateStaticVar = 'foo';
    
    // то что экспортируется - то публичное
    export default class MyClass() {
        constructor() {
        }
    }
    
    // или
    
    export default (function () {
        let foo = 'foo';
    
        return class FooBar {
             constructor() {
             }
        };
    }());


    Ну и в es2015 добавились символы как простой вариант сделать настоящие приватные переменные, ну и еще есть weakmap.

    const privateFoo = Symbol('foo');
    
    export default FooBar {
        constructor(foo) {
           this[privateFoo] = foo;
        }
    }
    Ответ написан
    5 комментариев
  • JavaScript ООП, запутался?

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


    Вы запутались. ООП не про повторное использование кода, функции/процедуры больше за это отвечают. Объекты отвечают за сокрытие состояния.

    Автор писал что в свойство prototype вообще не нужно лезть.

    Изнутри инстанса объекта - да. Когда ты описываешь новый тип объектов и хочешь отнеследоваться - то надо указать прототип объекта.

    То ли пока я учил JavaScript что то поменялось в этом плане

    Чуть поменялось, вышел ES2015, еще в прошлом году. Теперь все чуть проще и работа с прототипами объектов при наследовании/определении новых объектов стала чуть более прозрачной и удобной. И про createObject/defineProperties можно помнить только что бы понимать как все работает.
    Ответ написан
  • Минифицируете ли файлы JS для фриланса?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    а нужно ли?


    Нужно, но не с целью "уберечься от воровства", не минифицированные исходники конечному клиенту тоже нужно предоставить так как они его собственность.

    А вот с целью клиентской оптимизации - да, нужно. И поэтому во время демо тоже это нужно, что бы можно было прогнать google pagespeed например и радоваться хорошим показателям. У многих клиентов это выступает в качестве нефункционального требования - быстрая загрузка/отрисовка.
    Ответ написан
  • Как построить аутентификацию через токены?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Пожалуй выложу чуть более "няшную" ссылку, в допллнение к Алексей Уколов

    jwt.io
    Ответ написан
    Комментировать
  • Как правильно писать тесты в javascript для классов и их методов?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Есть непонимание процесса написания правильных тестов.


    Процесс просто. Формализуем тест кейс, описываем его в виде теста. Причем нужно делать так, что бы тесты ничего не знал о реализации нашего объекта, завязка исключительно на интерфейс. Тогда оверхэда на написание и поддерживание тестов практически не будет.

    Добавил я продукт и что мне мониторить?


    У вашего объекта должен быть какой-то публичый метод, который может предоставить проверку.

    Если такого метода нет, то нам надо подменить List на мок, но ваш код этого не позволяет сделать. Опять же это мы уже тест на реализацию завязываем, а стало быть наши тесты становятся хуже. Но коль уж мы пошли по этому пути можно просто length померять.
    Ответ написан
  • Что выбрать для back-end медицинского портала?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Устойчивость - любой мэйнстрим язык

    Читаемость кода - это не имеет отношение к языку или платформе, сделать плохо можно всегда и везде.

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

    Словом... вот что разработчик знает, то и надо брать. Либо опять же на усмотрение разработчика.
    Ответ написан
    Комментировать
  • Как в Angular проверить залогин ли пользователь?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    P.S. Ставить в ng-init и вообще в html статус залогинености на момент запроса, считаю костылем


    ng-init это вы о чем? Есть run у модулей, там такие проверки можно делать. Или в ресолвах роутера (что даже лучше).

    В целом же если вам нужна максимальная защита - то делаем обычную логин форму и отдаем html-ку с ангуляром только авторизованным чувакам. Токены всякие в этом случае через http-only куки.
    Ответ написан
    3 комментария
  • Можно ли написать full spa на angularjs?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Между монгой и angular всеравно что-то должно быть. Благо добавить мидлвэр с авторизацией черезй JWT какой между монгой и angular проблем не составляет. Ну и есть отдельные сервисы которые предоставляют такие штуки.
    Ответ написан
    Комментировать
  • А кто сказал что в ES6 не должно присутствовать var?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    90% переменных должны быть const, остальные let. Для var места не остается, хотя конечно его можно юзать, но это будет тоже самое что let. Их должно быть мало.
    Ответ написан
    23 комментария
  • Как реализовать CORS при для AJAX-запроса на JQuery?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) CORS настраивается на сервере
    2) для Phonegap/Cordova CORS не нужен, это фишка браузера а не webview.
    3) для разработки можете поднять прокси-сервер (есть готовые, достаточно поискать в npm) который будет добавлять вам CORS заголовки.
    Ответ написан
    2 комментария
  • На каком языке пишут шейдеры для Canvas?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    GLSL
    Ответ написан
    Комментировать
  • Есть ли реальный профит от изоморфных приложений?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    скорость работы приложения значительно падает, если делаем его изоморфным


    В чем выражается? Как делали замеры? Почему медленнее?

    классический SPA работает намного быстрее, чем изоморф

    Разницы быть не должно вообще.

    Причины понятны - во первых увеличение ядра, во вторых периодическая перерисовка целых страниц.


    Опять же, ваше изоморфное приложение немного странное, по сути это должно влиять только на первую загрузку, затем все должно работать как SPA, никаких перезагрузок.

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


    Ну как бы тот же гугл учитывает стили при ранжировании (адаптация под мобильники и т.д.)

    В чем профит?


    Изоморфность нужна только для того, что бы уменьшить время отрисовки UI. То есть время между первым запросом и отрисовкой UI должно быть минимально. То что JS подгрузится секундой-двумя позже - это уже незначительная проблема, пользователь скорее всего первые секунды будет разбираться что он хочет делать дальше.
    Ответ написан
    23 комментария
  • Лучший ресурс/книга/видеоуроки для изучения AngularJS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Дополню ответ bromzh

    лучший способ изучения


    Ограничивать себя и практиковаться.

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

    Или там "никогда не используйте фильтры для работы с коллекциями, пусть результат фильтра всегда будет строкой". Это сразу сильно ограничит вас в том как убить свое приложение и превратить шаблоны в кашу, а так же чуть почистит мозги.

    Или... "Не полагаться на двустороннее связывание". То есть... оно увы в angular 1.x везде, но нужно понимать риски с этим связанные и стараться делать все так, что бы элементы нижнего уровня ничего не меняли на верхнем уровне, а все изменения проходили либо через колбэки или сервисы. Исключения - формы, тут двусторонний биндинг бывает очень полезным.

    Так же "Никогда не использовать ng-controller", или "Делать все на stateless компонентах" и все такое.

    Для всех этих правил есть свои исключения, но нужно 10 раз подумать можно ли соблюсти правило прежде чем его нарушить.

    Я так же собрал парочку толковых ссылок которые могут быть полезны новичку. Там так же пример ооочень простого приложения с тестами.

    Так же рекомендую сразу же изучить хотя бы основные плюшки ES6 с babel и использовать их. Таким образом можно сильно упростить структуру приложения.

    А ну и да, ТЕСТЫ! Пробуйте писать приложения используя TDD, это очень полезно для новичков и так же действует как ограничение. Типа "если неудобно писать тесты - подумай как сделать так что бы было удобно писать тесты изменяя тестируемый код". Ну и все такое. У TDD есть свои правила вроде "не меняйте тесты и код одновременно" и т.д.

    Новички должны быть в ежевых рукавицах.
    Ответ написан
    Комментировать
  • На каком уровне нужно знать JS начинащему?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    как все это грамотнее выстроить в учебный план?


    https://developer.mozilla.org/en-US/docs/Web/JavaScript - готовый план (туториалы).

    В целом с текущими трендами было бы неплохо ознакомиться с функциональным и ОО программированием. Основные конепции, понятия "сильно/слабо связанный/зацепленный код", "имутабельность", "чистые функции" и т.д.
    Ответ написан
    Комментировать
  • Почему получаю ошибку Maximum call stack size exceeded?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    У вас тут идет рекурсивный вызов геттера и сеттера (вы из геттера age вызываете геттер age). Что бы понять что значит эта ошибка - читаем как работают рекурсии и что такое "стэк вызовов".
    Ответ написан
    1 комментарий
  • Какие существуют рецепты деплоймента веб-проекта на Go?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вопрос склеивания и минификации JS файлов


    Вы уже используете System.js, а стало быть можно использовать бандлеры на основе system.js: https://github.com/systemjs/builder

    Короче, я прошу совета, как довести это до ума.


    Собираем локально или на CI сервере в виде tar.gz архива, заходим на сервер и распаковываем.

    tar.gz можно заменить на deb/rpm пакеты, docker образы и все что угодно.
    Ответ написан
    2 комментария
  • ES 2015, Coffeescript или TypeScript? Что лучше и почему?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ES2015. и babel, поскольку это стандарт (Chrome50 поддерживает его на 91%). Ну и да, можно использовать фичи из ES2016 вроде async/await для улучшения читабельности кода.

    TypeScript это ES2015 + ES2016 stage1 + опциональная возможность объявлять типы, благодаря которой появляется возможность проводить статический анализ на этапе сборки. Это очень выгодно для очень больших проектов (именно поэтому Angular2 написан на нем, это ооочень большой проект).

    CoffeScript на сегодня не актуален, возможно этот проект получит дальнейшее развитие.
    Ответ написан
  • Откуда функция берёт переменные?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    но откуда вложенная функция в функцию byField берёт переменные


    вы вызываете функцию sort и в качестве аргумента даете ей эту "вложенную" функцию. Функции в JS это такие же объекты как числа, строки и т.д.
    Ответ написан
    Комментировать