Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   стоит ли использовать максины для оптимизации (https://javascript.ru/forum/offtopic/57555-stoit-li-ispolzovat-maksiny-dlya-optimizacii.html)

cyber 09.08.2015 00:18

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

2. Я думаю использовать миксины и отслеживать изменения, тогда элементы буду фильроватся при изменение массива, стоит ли использовать такой подход или меня жду большие грабли?
( что то такое https://github.com/yyx990803/vue/blo...erver/array.js )

3. Реализовать свой класс, который имеет основные методы типо push, splice, insert ( index, val ), change вызывается что бы проверить на изменения базовый массив и отфильровать элементы.

Что скажиете по этому поводу, а то я топчусь на месте не хочу выстрелить в ногу ?

поправьте кто-то название темы на "стоит ли использовать миксины для оптимизации"

l-liava-l 09.08.2015 00:57

Цитата:

стоит ли использовать максины

cyber 09.08.2015 01:04

l-liava-l,
Цитата:

Сообщение от cyber
поправьте кто-то название темы на "стоит ли использовать миксины для оптимизации"


javaQest 09.08.2015 01:22

Цитата:

Сообщение от cyber
отслеживать изменения, тогда элементы буду фильроватся при изменение массива, стоит ли использовать такой подход или меня жду большие грабли?

Это стандартный подход в таких ситуациях, только не совсем понятно, причем тут миксины. При грамотном подходе никаких граблей тут нет.

javaQest 09.08.2015 01:29

Цитата:

Сообщение от cyber
Реализовать свой класс, который имеет основные методы типо push, splice, insert ( index, val ), change вызывается что бы проверить на изменения базовый массив и отфильровать элементы.

Так и нужно делать, это не противоречит второму пункту, только фильтр должен вызываться при каждом изменении, то есть, внутри push slice и т.д. (если нужна проверка, конечно)

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

l-liava-l 09.08.2015 01:42

Цитата:

у меня есть массив, который должен фильтроватся, если брать стандартный подход ангуляра, то это при каждом дайджесте нужно проверять массив на изменения, но если массив большой то явно будет что то медленное.
На самом деле нет, если у массива до 2000 элементов то я бы даже не заморачивался. (если ты канеш не ng-repeat-ом выводишь)

Цитата:

3. Реализовать свой класс, который имеет основные методы типо push, splice, insert ( index, val ), change вызывается что бы проверить на изменения базовый массив и отфильровать элементы.
А если изменишь важный для фильтрации параметр в одном из элементов массива то такой подход не отработает.

Если прям уж хоочется фильтровать по флагу то напиши фильтр-обертку над $filter и пусть он не массив сверят а флаг который ты ему скормишь

cyber 09.08.2015 02:10

Цитата:

Сообщение от l-liava-l
А если изменишь важный для фильтрации параметр в одном из элементов массива то такой подход не отработает.

Хм, ты прав

cyber 09.08.2015 02:14

Цитата:

Сообщение от javaQest
Так и нужно делать, это не противоречит второму пункту, только фильтр должен вызываться при каждом изменении, то есть, внутри push slice и т.д. (если нужна проверка, конечно)

Я имел ввиду, что не выстрелю ли я себе в ногу при таком подходе, это понятно что нужно совмещать

cyber 09.08.2015 02:19

Цитата:

Сообщение от l-liava-l
Если прям уж хоочется фильтровать по флагу то напиши фильтр-обертку над $filter и пусть он не массив сверят а флаг который ты ему скормишь

мне нужно что то типо есть массив фильтров, мы проходимся по базовому массиву и каждый элемент прогоняем через фильтры все что прошло через фильтры попадает в view
var keys = Object.keys( this.filters );
                this._viewList = [];

                this.sourceList.forEach( function ( item ) {

                    if( keys.every( function ( i ) {
                        return this.sourceList [ keys [ i ] ] ();
                    }, this ) ) {
                        this._viewList.push ( item );
                    }

                }, this );

cyber 09.08.2015 02:54

l-liava-l
Цитата:

Сообщение от l-liava-l
На самом деле нет, если у массива до 2000 элементов то я бы даже не заморачивался. (если ты канеш не ng-repeat-ом выводишь)

им и вывожу, поэтому хочу отдавать ему отфильтрованный массив который просто нужно отрисовать и в массиве может быть больше 2к элементов

l-liava-l 09.08.2015 03:24

Цитата:

им и вывожу, поэтому хочу отдавать ему отфильтрованный массив который просто нужно отрисовать и в массиве может быть больше 2к элементов
Отрисовать 1 раз? Тогда можно с no-bind и не париться.

ng-repeat="item in ::array | filter:{id: 100}"

Если много то делай ng-repeat="item in array track by $index" а сам массив фильтруй когда нужно сервисом $filter из контроллера.

https://docs.angularjs.org/api/ng/filter/filter

Так точно не скажешь, тут играться нужно, а я не совсем понимаю задачу

nerv_ 09.08.2015 10:31

Цитата:

Сообщение от cyber
у меня есть массив, который должен фильтроватся, если брать стандартный подход ангуляра, то это при каждом дайджесте нужно проверять массив на изменения

так и будет, потому что
Цитата:

Сообщение от cyber
им и вывожу

---
Цитата:

Сообщение от l-liava-l
а я не совсем понимаю задачу

я тебе расскажу:
1. у него есть модуль
Цитата:

Сообщение от cyber
пишу модуль для ангуляра

2. и он должен работать быстро :D

В следствии чего товарищ начинает заниматься акробатикой.

Открою секрет, как писать супер-быстрые модули: самый быстрый модуль - не содержащий кода (пустой) :)

cyber 09.08.2015 12:39

Цитата:

Сообщение от l-liava-l
Отрисовать 1 раз? Тогда можно с no-bind и не париться.

не один раз, я знаю про :: и track by $index
Цитата:

Сообщение от l-liava-l
а я не совсем понимаю задачу

Есть входной массив, его нужно отфильтровать и отфильрованные данные вывести через ng-repeat, входной массив могут изменять и значить данные на странице нужно изменить, если новые данные проходят фильтры

cyber 12.08.2015 00:09

Кстати я походу, выстрелил себе в ногу)

cyber 12.08.2015 00:26

Ангуляр делают копию объекта и при каждом $digest сравнивает копию с текущим объектом, в любом случаю даже если объект не изменился?
И при каждом дайджесте он будет проходится всеми фильтрами по исходному массиву?
Я прав?

cyber 12.08.2015 00:40

я смотрю фильтры в ангуляре это боль и лучше самом фильтровать и кормить ему результат


Часовой пояс GMT +3, время: 06:06.