Скрипт
Оптимизация запросов
Скорость выполнения запроса сильно зависит от количества, размера таблиц, участвующих в запросе, и от порядка их соединнеия между собой. То есть, в некоторых случаях помогает описанное здесь, а в некоторых, разогнать запрос можно, перенеся таблицу из JOIN в условие WHERE в виде вложенного запроса.
Также можно разложить один тяжелый запрос на несколько, через создание пользовательских таблиц.
На данный момент нельзя сказать однозначно, что повысит скорость выполнения запроса в каждой отдельной ситуации.
Оптимизация скрипта
- Циклы. Если речь идет о проходе циклом по коллекции с целью отбора, то лучше отказаться от цикла в пользу запроса (тем более, раз у нас есть пользовательские таблицы). Запрос с условием отработает значительно быстрее цикла. При этом неважно, что там итерировалось, массив или набор записей.
- Создание контроллера - тоже время! Хоть и тратится оно только при первом открытии. Поскольку никому не известно, отчего зависит время, затрачиваемое на парсинг, можно только интуитивно догадываться что можно как то повлиять на него засчет размера контроллера. Таким образом, перенос функций из локального контроллера в Global - это не только работа над архитектурой, но и уменьшение времени CreateController на первом открытии экрана.
- Большие миксины - тоже нехорошо для производительности, почему - смотри выше.
Можно прогреть контроллер, добавив его в Configuration.xml, например:
<c:WarmupActions> <c:WarmupAction Controller="Order\Order_SKUs.js" Function="WarMupFunction" /> </c:WarmupActions>
Разметка
Итератор
Вызов функций из итератора в разметке - это очень плохо! Делать это следует если вообще уже никак иначе не выполнить задачу (и огрести новую, по разгону производительности, ага). Для примера, на отработку приведенной ниже несложной функции, уходит ~0,0019 с. А если таких итераций хотя бы 50, то это уже плюс 0,1 секунда.
function FormatValue(value) { return String.Format("{0:F2}", value || 0); }
- От количества отображаемых контроллов скорость открытия экрана зависит почти линейно. Сюда же относятся SwipeLayout, даже не смотря на то, что он может быть скрыт на момент вывода. Разметка, которая находится между тегами <s:If> и <s:Else> и не должна выводиться по условию, на время открытия экрана не влияет.
Добавить комментарий