Ответы пользователя по тегу JavaScript
  • Существует такой скрипт, который определяет поддерживает ли браузер определенное свойство и добавляет префиксы?

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

    Так что берем в руки autoprefixer и делаем прекомпиляцию на сервере, + сервим в gzip + кеширование.

    --- updated ---
    Сори, попутал с transform в css файликах.

    Для js ничего предложить не могу, только такое:
    www.kirupa.com/html5/vendor_prefixes_javascript.htm
    Ответ написан
    4 комментария
  • Нужно ли складывать много маленьких JS файлов в один большой?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Если вы используете HTTP2 - то не обязательно, но это врядли.

    если загрузить асинхронно 10 файлов по 100кб то это будет быстрее чем один 1МБ файл

    А если загружать по 80 файлов по 10кб то это будет медленнее чем 10 файлов по 100кб, так как расходы на установление соединения будут больше чем время ожидания доставки очередной порции данных.

    Браузер делает запросы за ресурсами паралельно (можете в дебагере браузера посмотреть, там же информация о том кто блокирует загрузку), так что загрузка нескольких файлов будет быстрее загрузки одного большого. Но, даже с учетом keep alive, браузер не может реюзать полноценно при таком раскладе соединения, и он будет их плодить в большом количестве, и чем больше их, тем больше нагрузка на сервер, тем медленнее будет получаться статика. Так что нужно найти баланс.

    Я бы предложил разделить все на:
    - angular.js
    - vendor.bundle.js - все сторонние модули и прочее
    - app.bundle.js - все файлики приложения.

    тогда да. асинхронная загрузка будет быстрее.
    Ответ написан
    1 комментарий
  • PHPStorm, куда слезть с него? nodejs / frontend разработчики, поможете?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Что-то продуктивнее? VIM.

    Вообще интересно чем вас не устраивает WebStorm/PhpStorm. Вы может поделитесь.
    Ответ написан
    7 комментариев
  • Поддержка ECMAScript 6 в Node.js Express.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    На днях случился праздник, вышел Nodejs v4.0 (node.js и io.js слились вместе).

    По поводу поддержки ES2015:
    https://kangax.github.io/compat-table/es6/#node4

    А так же есть babel.js
    Ответ написан
    Комментировать
  • Верстка -> Frontend -> Full Stack developer - какой оптимальный путь развития?

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

    Вне зависимости от выбранного языка или фреймворка, принципы остаются примерно те же. С Symfony мы можем говорить о гексагональной архитектуре, луковой архитектуре, data mapper и т.д. С nodejs мы тоже можем обо всем этом говорить но там не особо развиты идеи data mapper (на данный момент). Приходится жить с active record или dbal. Ну и опять же управление зависимостями в js и в php по разному организованы, хотя суть (dependency inversion) остается той же.

    Единственный совет дам - не распыляйтесь. Старайтесь не переключаться между фронтэндом и бэкэндом слишком часто, это уменьшит скорость обучения. Большая часть знаний в принципе спокойно мигрирует из одной сферы в другую, так что не переживайте.
    Ответ написан
    Комментировать
  • Как спроектировать JavaScript приложение?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для начала разберитесь с принципами объектно-ориентированного и функционального программирования. Штуки вроде "почему высокая связанность кода это плохо, зачем нужны MVC и т.д."

    Паралельно можете поразбираться с типичными шаблонами проектирования под js: largescalejs.ru

    Ну и еще - ES2015, активное использование модулей и штук вроде jspm/webpack для сборки. По сути все проблемы в js - кривое управление зависимостями (вся соль ООП в принципе состоит в инверсии зависимостей, функциональные подходы делают все еще лучше). Сейчас ситуация с этим всем намного лучше чем была скажем еще года 4 назад.

    Опять же, когда речь идет о реально больших проектах, следует перестать писать на каждый чих свой велосипед. Нужна библиотека для организации маршрутизации - берем готовую. Нужно работать с датами - берем moment.js и т.д. Сборщики вроде того же jspm умеют выдерать из популярных библиотек то что можно (если можно так сделать, скажем с angular2 выдрать только нужные модули можно. а вот с angular1 нет).
    Ответ написан
  • Нужен ли JavaScript для работы с фреймворками?

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

    Конечно нужно, вы же будете на JS писать. Фреймворки дают вам только инфраструктуру, это второстепенная часть приложения, хоть и бывает так что она занимает 95% приложения.

    Нужно знать и понимать:
    - основные конструкции, циклы, условия и т.д.
    - функции, контекст вызова функции, скоупы
    - объектная модель в JS, представление о том какие типы данных в JS есть и что все есть объект
    - прототипное наследование
    - event loop или асинхронность в контексте javascript-а.
    - было бы неплохо годик попрактиковаться прежде чем делать кому-то проекты.

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    $scope.onChange(); // тут можно передать контекст. Читать документацию.
    Ответ написан
    Комментировать
  • Удобно ли будет организовать PHP клиент для RestFull API (SPA)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    теряем возможность работы с куки и сессиями

    Ну не совсем, с куками вы все так же можете работать и через куки хранить сессии, другое дело что это в 99% не нужно. А токены - JWT решает все проблемы.

    не очень удобно и не привычно работать с JS MVC

    Привыкните, учитывая то что JS MVC это то, чем должно быть MVC.

    сео оптимизация

    Тут есть варианты:
    - гугловский краулер поддерживает JS нынче, на счет остальные не вкурсе.
    - генерация снапшетов (phantomjs например) и Ajax crawling
    - server-side рендринг, актуально при втором пункте.

    везде нужно тягать токен туда сюда

    Большая часть фреймворков делают это прозрачно для разработчика, так что это то же самое что туда-сюда тягать куки.

    и к нему можем написать клиент на любом php фраэмворке в классическом виде

    Почитайте про гексагональную архитектуру, например. HTTP API и классический WEB UI это лишь два интерфейса к одной и той же логике, которая инкапсулирована в сервисы. Разница лишь в том, как DTO из сервисного слоя будет юзаться для формирования представления (будь то json или html).

    https://www.youtube.com/watch?v=ajhqScWECMo - вот вам посмотреть на досуге.
    Ответ написан
  • Как узнать что есть что в javascript?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    console.log - console(переменная) log(свойство)


    console - это переменная, которая содержит ссылку на объект
    console.log - это свойство log объекта, содержащегося по ссылке в переменной console
    console.log() - это вызов функции, содержащейся в свойстве log объекта, содержащегося по ссылке в переменной console

    Person.prototype.greet - greet это свойство объекта-прототипа, объявленного для конструктора Person.
    Ответ написан
    Комментировать
  • Как отфильтровать значения полученные из ng-repeat?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Хватит пытаться все делать в шаблонах. Вынесите логику хотя бы в контроллер (а лучше в сервис, но я думаю подобного просить уже слишком много).
    Ответ написан
  • Как и когда изучать AJAX?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Не изучайте AJAX, изучайте XMLHttpRequest и HTTP.

    на сколько устарела технология

    Это просто API браузера что бы из JS делать HTTP запросы. Это не технология даже. Просто API, сейчас актуальная версия - XmlHTTPRequest2.

    Просто в интерете не нашел более менее новых книг,

    Почти все "новые" книги учат писать контроллеры (ну тип, как клепать штуки, без объяснения почему так), фундаментальные знания они редко дают.
    Ответ написан
    Комментировать
  • Как лучше создавать геттеры и сеттеры в JS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    сравните
    function Foo(bar) {
        this.bar = bar;
    }
    Object.defineProperties(Foo.prototype, {
       a: {
           value: function () {
               return this.bar;
           }
       },
       b: {
           get: function () {
               return this.bar;
           }
       }
    }
    
    var foo = new Foo('bar');
    
    foo.a() // 'bar';
    foo.b //'bar';


    Но в целом геттеры в 90% случаев это плохо и их следует избегать. В контексте js их единственное оправдание - отсутствие модификаторов доступа и необходимость делать имутабельные объекты (по сути ради readonly свойст).
    Ответ написан
    Комментировать
  • Стоит ли сейчас изучать JQuery?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вопрос в том, какой смысл вы вкладываете в "учить jquery". Селекторы - jquery использует css селекторы + парочку своих псевдоселекторов. Все остальное - старый добрый JS и DOM. Вот их и учите.
    Ответ написан
    Комментировать
  • Разработка мобильный приложений с помощью веб технологий?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    cordova + crosswalk для андроида + ionic в качестве UI фреймворка.

    Всегда ли нужен веб-сервер? И нужен ли вообще?

    Ну если нужно данные на сервере хранить то логично что нужно. Правда есть еще сервисы вроде parse.com как серверо-заменители с плюшками.
    Ответ написан
    Комментировать
  • Можно простыми словами объяснить принцип работы метода Apply в Java Script?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    читается как "Примени вызов функции (которая хранится в этом свойстве) с таким контекстом вызова и такими аргументами"

    Далее гуглить что такое контекст вызова.
    Ответ написан
    Комментировать
  • Как при ng-repeat получить post.id в другом месте кода в angularjs?

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

    <x-single-post post="post" ng-repeat="post in posts"></x-single-post>


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

    Если вы используете angular 1.4 то директива будет выглядеть как-то так:
    function singlePostViewDirective () {
        return {
            templateUrl: 'post.template.html',
            bindToController: {
                data: '=post' 
            },
            controller: function () {
                 var vm = this;
                 vm.addComment = function (comment) {
                     // do stuff
                 }
            },
            controllerAs: 'post'
        }
    }


    ну и в шаблоне будет что-то в духе
    <form ng-submit="post.addComment(commentText)">
    <textarea ng-model="commentText"></textarea>
    <input type="submit" />
    </form>


    Ну можно еще на директивы подробить, тут как вам удобнее. Скажем форму добавления комментария можно в еще одну директиву запихнуть, которая будет только управлять UI и делигировать через колбэки само сохранение на уровень выше... Соль в том что бы разбить все на директивы соблюдая принципы единой ответственности и уменьшая между ними связанность (конечно надо соблюдать баланс, иначе для простой задачи можно нагородить много чего лишнего), тогда будет меньше боли.
    Ответ написан
    3 комментария
  • Почему вылетает ошибка Maximum call stack size exceeded?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    видимо вы вызвали рекурсию.
    Ответ написан
    Комментировать
  • Почему постоянно лезет undefined?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Да, именно так, на момент вызова console.log колбэк еще не отработал. Добро пожаловать в callback hell. Альтернативы:
    - промисы, позволяют уменьшить вложенность колбэков
    - корутины - сложно но можно писать асинхронный код в синхронном стиле, повторюсь это сложно
    - async/await - еще не запилили в js.
    Ответ написан
    9 комментариев
  • Для чего и как применять директивы в AngularJS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    для чего нужны директивы


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

    где их применять


    Везде где только можно, весь UI следует строить на иерархии директив, как если бы вы просто верстали. Я бы даже сказал что использовать только контроллер, как например можно увидеть в примерах для ngRoute/uiRouter и шаблон - это плохо, контроллеры и шаблоны использовать можно, но только для того что бы определить какие в рамках этого роута/стэйта будут использоваться директивы и передать туда параметры. То есть по максимуму все запихивать в директивы. Правда это может быть первое время сложно делать, потому лучше постепенно увеличивать степень дробления UI на директивы. Главная сложность сделать так, что бы директивы были независимы от контекста использования. Ну или явно определить этот контекст (параметр require директивы может определять что директива A может быть использована или должна быть использована только в контексте B). Ну и еще по началу может быть сложно определиться что должно быть в link и что должно быть в контроллере, должен ли вообще у директивы быть link или контроллер.

    ng-inject

    вы про галповский плагин или все же про ng-include? если последнее, как комбинация ng-include + ng-controller, то это тип... для ленивых. При помощи этих двух директив мы можем создать какой-то элемент, присобачить ему поведение и шаблон, да, но оно не будет изолированным, реюзать такое уже не выйдет. Если это вам надо временно, и вам лень - то можно и так, но лучше сделать полноценную директиву, тогда ее можно будет реюзать в рамках проекта и устранить дублирование. Ну и опять же, вариант с ng-include+ng-controller можно покрыть только E2E тестами, что не удобно. Директивы же просто и удобно покрываются юнит тестами, что делает поддержку системы намного проще и дешевле.

    в каком виде правильно и разумно применять директивы

    Посмотрите на polymer, это то чем должны были бы стать директивы а ангуляре (и в angular2 оно почти так), там больше ограничений и более понятно как использовать web-компоненты и как следствие - директивы.
    Ответ написан
    9 комментариев