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к элементов


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