Pull to refresh
9
0
Дмитрий Дедюхин @Demetros

User

Send message
Проблема с производительностью. Я пишу обычно где-то в начале:

var $this = $(this);

и далее по коду использую уже $this.
Кому-то это может показаться экономией на спичках, но я считаю иначе.
Я так понимаю, вы недавно пишете на javascript? Другого объяснения обилию $(this) в вашем коде я не вижу.
Не взлетит, ибо даже эта landing page работает корявенько. Просто сравните, на какое расстояние можно проскроллить влево, и на какое — вправо. Ну и на айпаде страничка не умещается по высоте, хотя могла бы.
Короче, нет в мэйле внимания к мелочам.
В вашем примере StateManager не очень удобно то, что нужно не забывать удалять процессы из него.
Я написал свой велосипед, который пока руки не дошли причесать и выложить на github.

В шаблоне пишем:

<div ng-loaded="loaded">
   view content
</div>


В контроллере (я использую Restangular и ui-router) пишем:

    var users = Restangular.all('user').getList().then(function(data) {
        // do something with response
    });
    var products = Restangular.all('product').getList().then(function(data) {
        // do something with response
    });
    $scope.loaded = loadingService.add(users, products).wait();


Код
angular.module('loadingService', [])
.factory('loadingService', ['$q', '$rootScope', function($q, $rootScope) {
    var waited = [];
    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
        waited = []; // empty array when transition to new state
    });
    return {
        add: function() {
            for(var i in arguments) {
                waited.push(arguments[i]);
            }
            return this;
        },
        wait: function() {
            var ret = $q.defer();
            $q.all(waited)['finally'](function() {
                waited = [];
                ret.resolve(1);
            });
            return ret.promise;
        }
    };
}])
.directive('ngLoaded', ['$compile', function($compile) {
    return {
        link: function(scope, element, attrs) {
            var indicator = angular.element('<div><img src="assets/loader.gif" /> Loading...</div>');
            indicator = $compile(indicator)(scope);
            element.after(indicator);
            scope.$watch(attrs.ngLoaded, function(newValue, oldValue) {
                if(newValue) {
                    element.css({display: 'block'});
                    indicator.css({display: 'none'});
                } else {
                    element.css({display: 'none'});
                    indicator.css({display: 'block'});
                }
            });
        }
    };
}])
;

Думаю, единственный вариант — скрывать инпут после выбора файла(ов) и создавать на его месте клон с пустым value.
В webkit-браузерах после выбора и загрузки файла(ов) имя файла или кол-во оных остаются рядом с кнопкой — считаю это недоработкой :)
У меня Neato XV-21 нормально справляется с длинными и достаточно жесткими (от того — прочными) волосами жены.
Но, конечно, иногда нужно проверять щетку и чистить её от намотанных ниток и волос.
У меня дочка под гул Neato тоже иногда засыпает.
Пылесос отличный, сильно помогает в нелегком деле уборки квартиры. Хотя ведет себя иногда странновато. Может, например, «заблудиться» в ножках сушилки для белья и ездить много раз по одному и тому же месту. Или ни с того ни с сего остановиться и просить освободить дорогу, хотя вокруг ничего нет.
Но в целом, на мой взгляд, достоинства перевешивают недостатки.
У вас всё действительно так правильно, красиво и радужно?
Или всё-таки код уже начал потихоньку обрастать костылями? API справа наверняка потребовало некоторого количества костылей?
Вы бы хоть дали ссылку на демо.
Интересно же посмотреть, как браузер встанет раком при синхронной загрузке кучки скриптов, например jQuery и пары десятков плагинов к нему.
Вы достаточно элегантно решили проблему очередности загрузки скриптов — загружаете скрипты в цикле синхронно.
Было бы интересно узнать, как цивилизованно обрабатывать формы с input type=file в ангуляре.
Интересно было бы узнать, что по вашему не страшно и нравится лично вам.
Полагаю, стоит упомянуть и о том, что в templateUrl может быть id уже существующего шаблона на странице, заданного в виде

<script id="SomeTemplate" type="text/ng-template">
...
</script>

т.е.

templateUrl: 'SomeTemplate'
Почему с директивами неудобно получается? Я сейчас в свободное время изучаю потихоньку ангуляр, и именно директивы кажутся мне очень удобными.
Обязательно пишите еще.
По документации на самом деле быстро вникнуть и проникнуться сложновато (особенно после нескольких лет работы с jQuery и ей подобными).
«Или что» — на реальных скоростях 3G даже несколько мегабайт будут грузиться непозволительно долго. Говоря за себя, я обычно закрываю сайт, который не осилил загрузиться примерно за 5 секунд.
Ну и на крупных городах свет клином не сошёлся, скорость интернета в глубинке часто бывает весьма низкой.
Не забывайте про то, что браузеру нужно не только загрузить JS-код, но и «скомпилировать» его — на это тоже уходит некоторое время при ощутимом количестве кода.
К тому же, говоря про кеш (браузера?) вы вероятно забываете, что есть пользователи, которые зайдут на ваш сайт всего один раз, и не дождавшись загрузки более никогда на него не вернутся. Сейчас, при бурном развитии мобильного интернета, этот сценарий становится всё более вероятным.
А вы знаете другой редактор, который создает одинаковый html-код в разных браузерах?
http://jsfiddle.net/D89xd/16/
Правда воспроизводится исключительно при использовании Blob.slice, так что в вашем случае вероятно неактуально.

Information

Rating
Does not participate
Location
Нижний Новгород, Нижегородская обл., Россия
Date of birth
Registered
Activity