• Что быстрее: php + jQuery .html() vs. AngularJS $scope?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    быстрее конечно же вставить сформированный html прямо в нужный блок. Это же логично. С другой стороны ngRepeat начинает подтормаживать только на количестве элементов ~10К, но тут сам браузер начинает тупить только от количества dom элементов. Но вот по скорости разработки и дешивизне поддержки реализовать все на angular будет правильнее.

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

    советую почитать эту статью, а так же при реализации скрола на ангуларе использовать ngScroller
    Ответ написан
  • Yii, EAV, производительность?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    вы используете вот эту штуку? Просто выкиньте и перепишите с inner/left join-нами для выборок.
    Ответ написан
    5 комментариев
  • EmberJS и WebSocket

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    используйте deferred объекты. Сделайте функцию аля getProfile(), которая будет возвращать обещание что-то сделать. А между делом - отправьте данные в сокет, подпишитесь на прием данных, обработайте их и выполните данное обещание (deferred.resolve(data)).

    Будет выглядеть как-то так:
    getProfile().then(function(profile) {
    }, function (error) {
    });
    
    function getProfile(id) {
        var deferred = $.Deferred();
        
        someCodeThatSendRequest({
            route: 'getProfile',
            id: id
        }, function (response) {
            // preprocess response
            deferred.resolve(response);
        })
    
        return deferred.promise();
    }


    Но по хорошему это тупняк. WebSocket тут явно ненужны. Тут нужна нормальная rest-api. Сокеты нужны для доставки данных о перемещении персонажей, их состоянии... все то что должно передаваться в реалтайме. профили же - это просто ресурсы. их можно один раз загрузить и держать в кэше... ну и т.д.
    Ответ написан
  • Кастомный css для определенной категории записей wordpress?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    переопределять весь css только для двух категорий - как-то не разумно. Лучше уж селекторами. В wp есть возможность задать для body класс в зависимости от того где вы находитесь.
    Ответ написан
    Комментировать
  • Как заставить PhpStorm 7.0 сохранять документы в UTF-8 без BOM?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) а в других файлах есть ?> в конце? Сомневаюсь что именно это является причиной, но все же... Да и просто это плохая практика.

    2) по умолчанию шторм должен создавать файлы без bom. вообще все это настраивается. помниться в 5-ой версии если вы открываете файл в utf8 с bom то была кнопочка позволяющая убрать это дело.

    вообще странно, обычно жалуются что шторм наоборот убирает bom.
    Ответ написан
    3 комментария
  • Простейший модуль + контроллер на Angularjs, или что не так с этим кодом?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    проблема в том что директика ng-app отрабатывает раньше, причем значительно, чем отрабатывает onLoad.

    http://jsfiddle.net/cqL5A/1/

    для web я обычно использую require.js и просто вызываю вручную boostrap, когда все модули загрузятся. А до этого можно показывать красивый прелоадер и т.д.
    Ответ написан
  • Какую CMS использовать для лёгкого сайта-визитки?

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

    Для визиток мне нравится piecrust. Контент оформляется как вариант в markdown и потом просто по шаблонам генерится статическая версия сайта. Все работает очень быстро, достаточно гибко.

    Есть так же bolt. Тоже штука довольно интересная, простая, уже не просто на файлах а на sqlite/mysql с админкой. контент так же вроде бы через markdown.

    Есть еще pico cms. Тоже забавная мини-cms на файлах.
    Ответ написан
    3 комментария
  • Какую выбрать версию Symfony2 для разработки?

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    при правке кода используйте другую точку входа (app_dev.php).
    чистка кэша производится из консоли:
    app/console cache:clear
    для продакшена нужно указать окружение добавив параметр --env=prod. ПО умолчанию все консольные команды запускаются в dev окружении.
    Итоговая команда будет
    app/console cache:clear -e=prod.

    Еще один маленький бонус - вы можете писать названия команд не до конца. Например
    app/console cach/cl - главное что бы написанного хватало что бы выбрать нужную команду.
    Ответ написан
    5 комментариев
  • Насколько конкурентоспособны приложения под Android, созданные с помощью HTML/CSS/JS?

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

    Есть правда вариант использовать steroids.js, для таких вот вещей оно подходит хорошо, и по сути никаких проблем не будет в плане "ui тормозит".

    Другой вопрос что для одной платформы толку мало.

    Игры же - это другое. Тут применять html5+js уже неоправданно. Ни капельки не дешевле, да и лучше уж взять нормальный кросплатформенный движок и не париться.
    Ответ написан
    Комментировать
  • Задача для верстальщиков. Выравнивание по вертикали

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    padding-top считается по ширине (если задан в относительных еденицах) так же как padding-left по высоте. Это к слову единственный способ сделать резиновые примитивы (квадраты, круги, прямоугольники).
    Ответ написан
  • Почему появляется ошибка при использовании функции preg_replace_callback()?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) функция приватна
    2) почитайте про колбэки, они задаются для статических функций так: ['Compressor', 'minifyJS']
    3) вы не думаете что preg_replace_callback передаст для minifyJS не строку а массив?
    4) используйте лучше уж анонимные функции сто бы обойти 2 и 3 пункт.

    $result = preg_replace_callback($regexp, function ($matches) {
        // за вот это место не ручаюсь, тут уж сами
        return str_replace($matches[2]. Compressor::minifyJS($matches[2]), $matches[0]);
    }, $text)


    ну и опять же поскольку этот статический метод приватный - ничего не выйдет.
    Ответ написан
  • Из-за чего проблема с последовательностью событий в js?

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

    http://jsbin.com/OBaMoqe/1 - в комментариях пометил основную суть, но повторюсь

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

    js - асинхронный язык. Вся соль языка в том, что все тяжелые вычисления можно и нужно проводить паралельно.
    Ответ написан
    2 комментария
  • Comet(Long polling) - php + jquery?

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

    По сути просто вместо того что бы опрашивать сервер раз в секунду, создается соединение, живущее только до получения данных. После получения данных соединение закрывается. После закрытия соединения (не важно пришли данные или произошла ошибка/разрыв по таймаут) так же создается новое. На практике таймаут выставляют секунд в 20-30 что бы избежать возможных проблем.
    Ответ написан
    5 комментариев
  • Какой есть способ проверки полного вхождения одного массива в другой на JavaScript без использования двойного цикла?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Обычно делаю такие проверки через пересечения массивов (или же вам привели функцию diff). Без вложенных циклов никак не выйдет, ибо по сути и indexOf и array.filter это циклы. Разве что вы можете прервать выполнение цикла как только найдется элемент, не попадающий в другой массив.
    function isSame(a, b) {
        if (a.length > b.length) {
             b = [a, a = b][0]; //swap
        }
    
        for(var i = 0, length = a.length;i<length;i++) {
             if (-1 === b.indexOf(a[i])) {
                  return false;
             }
        }
        
        return true;
    }


    что-то типа такого. Но мне больше нравится вариант с diff.
    Ответ написан
    Комментировать
  • На чём зарабатывают владельцы jquery.com?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://jquery.org/donate/ - подозреваю что исключительно на этом + энтузиазм. Опять же энтузиазм не на пустом месте - библиотеку то используют. Скажем, если я в библиотеке, которую использую, хочу какую-то фичу/нашел баг, я сообщаю об этом в трекере. Если же я пофиксил или добавил фичу - мне не жалко выложить ее в виде pull-запроса.
    Ответ написан
    Комментировать
  • Пример Javascript запроса ("PUT") к API Яндекс.Диска?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Если вы хотите через ajax отправить файл, у вас не выйдет это сделать просто сеарилизовав форму (что и происходит по вашему коду).

    // обработчик вешается на файловый инпут
    document.getElementById('upload').addEventListener('change', function(e) {
                var file = this.files[0];
                var xhr = new XMLHttpRequest();
                xhr.file = file; // not necessary if you create scopes like this
                xhr.addEventListener('progress', function(e) {
                    var done = e.position || e.loaded, total = e.totalSize || e.total;
                    console.log('xhr progress: ' + (Math.floor(done/total*1000)/10) + '%');
                }, false);
                if ( xhr.upload ) {
                    xhr.upload.onprogress = function(e) {
                        var done = e.position || e.loaded, total = e.totalSize || e.total;
                        console.log('xhr.upload progress: ' + done + ' / ' + total + ' = ' + (Math.floor(done/total*1000)/10) + '%');
                    };
                }
                xhr.onreadystatechange = function(e) {
                    if ( 4 == this.readyState ) {
                        console.log(['xhr upload complete', e]);
                    }
                };
                xhr.open('put', url, true);
                xhr.setRequestHeader("Content-Type","multipart/form-data");
                xhr.send(file);
            }, false);
    Ответ написан
    2 комментария
  • Стоит ли выгружать старые элементы при бесконечном скролле?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)

    Разработчики linkedIn как-то публиковали описание подходов по оптимизации бесконечных скролов, которые они у себя применяли:
    http://engineering.linkedin.com/linkedin-ipad-5-techniques-smooth-infinite-scrolling-html5

    а фэйсбук не самый хороший пример оптимизации фронтэнда.

    p.s. по поводу ангуляра и делигированных событий, у меня в некоторых частях проекта используется всплытие ивентов вместо непосредственной привязки к элементу. Делается это у меня через 2 директивы (fsDelegate, и далее всякие обработчики ивентов аля fsTap и т.д). Причем fsDelegate вешает обработчики на элемент списка, fsTap регистрируется у fsDelegate (если конечно оно там будет, связь между ними через контроллер fsDelegate и параметр require: '^?fsDelegate'). Опять же при отлове события определяется какой именно элемент отработал, берется его скоуп и выполняется выражение заключенное в fsTap.

    Ответ написан
    1 комментарий
  • В чём преимущество асинхронных серверов перед PHP/nginx?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)

    Все сервера предназначенные для больших нагрузок являются асинхронными. То есть обработка новых входящих соединений происходит раньше, чем закончат работу текущие соединения.
    Преимущество готовых асинхронных серверов в том, что они готовы. Вы можете точно так же написать асинхронный сервер на php (socket + select), но это не настолько эффективно как в python и тем более в node.js, где этот функционал идет из коробки.

    Стандартный кейс применения node.js/Python twisted и любых других реализаций - обработка либо сырых tcp-соединений (например push уведомления) или же keep-alive для тех же целей. При обработке же коротких http запросов профит уже не так велик. Во всяком случае между php и python. node.js будет пошустрее, но и памяти он будет кушать чуточку больше.

    Ответ написан
    1 комментарий