Странно, но факт для ДанныеФормыКоллекция перебор элементов быстрее метода НайтиСтроки
для ДанныеФормыКоллекция
вот такая функция (на клиенте):
быстрее чем (на клиенте):
в коллекции несколько сотен элементов.
Стоит ли переносить эту команду явно на сервер, если ДанныеФормыКоллекция представление ТЧ документа?
вот такая функция (на клиенте):
Функция НайтиСтрокиДанныеФормыКоллекции(_Коллекция,Знач _Владелец) Экспорт
М = Новый Массив();
Для каждого Стр из _Коллекция Цикл
Если Стр.Владелец = _Владелец и Стр.Удалено=Ложь тогда
М.Добавить(Стр);
КонецЕсли;
КонецЦикла;
Возврат М;
КонецФункции
Показатьбыстрее чем (на клиенте):
Возврат Движения.НайтиСтроки(Новый Структура("Владелец,Удалено",_Владелец,Ложь));
в коллекции несколько сотен элементов.
Стоит ли переносить эту команду явно на сервер, если ДанныеФормыКоллекция представление ТЧ документа?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Я бы исходил из такой логики: если в документах чаще всего много строк, то я бы перенес код обработки строк табличной части явно на сервер.
Если же строк, как правило, не много, тогда оставил бы на клиенте.
Это связано с тем, что в момент открытия формы на клиент передаются не все данные табличной части с сервера.
Если попробуете мышкой прокручивать табличную часть, то внизу (если включено отображение показателей производительности) увидите, что по мере прокрутки табличной части то и дело происходят вызовы сервера.
Т.е. происходит досчитывание данных с сервера.
Это такой механизм оптимизации. Зачем при открытии формы тащить все 1000 строк табличной части на клиента? Не так часто пользователи просматривают всю таблицу. При необходимости данные просто дочитываются в процессе работы пользователя (в процессе прокрутки).
В данном случае своим кодом вы буквально просматриваете всю табличную часть.
Для интереса посмотрите, сколько вызовов сервера происходит при выполнении Вашего кода. Предполагаю, что при первом (после открытия формы) выполнении производится около 10-20 вызовов. При повторном выполнении - ни одного (т.к. все данные уже прочитаны, уже все есть на клиенте).
Возможно, лучше сделать один явный вызов сервера, где обработать все строки.
Теоретически )
Стоит ли переносить эту команду явно на сервер, если ДанныеФормыКоллекция представление ТЧ документа?
Я бы исходил из такой логики: если в документах чаще всего много строк, то я бы перенес код обработки строк табличной части явно на сервер.
Если же строк, как правило, не много, тогда оставил бы на клиенте.
Это связано с тем, что в момент открытия формы на клиент передаются не все данные табличной части с сервера.
Если попробуете мышкой прокручивать табличную часть, то внизу (если включено отображение показателей производительности) увидите, что по мере прокрутки табличной части то и дело происходят вызовы сервера.
Т.е. происходит досчитывание данных с сервера.
Это такой механизм оптимизации. Зачем при открытии формы тащить все 1000 строк табличной части на клиента? Не так часто пользователи просматривают всю таблицу. При необходимости данные просто дочитываются в процессе работы пользователя (в процессе прокрутки).
В данном случае своим кодом вы буквально просматриваете всю табличную часть.
Для интереса посмотрите, сколько вызовов сервера происходит при выполнении Вашего кода. Предполагаю, что при первом (после открытия формы) выполнении производится около 10-20 вызовов. При повторном выполнении - ни одного (т.к. все данные уже прочитаны, уже все есть на клиенте).
Возможно, лучше сделать один явный вызов сервера, где обработать все строки.
Теоретически )
Не стоит. На сервере много других чудесных типов данных.
Поиск по индексированной таблице будет в сотни раз быстрее обоих описанных методов. И вообще нагрузка на клиента в виде отбора строк не очень целесообразна. В частности для мобильных приложений, веб-доступа тонкого клиента, веб-клиента это явно не лучши
Поиск по индексированной таблице будет в сотни раз быстрее обоих описанных методов. И вообще нагрузка на клиента в виде отбора строк не очень целесообразна. В частности для мобильных приложений, веб-доступа тонкого клиента, веб-клиента это явно не лучши
Интересная информация. Пожалуй из-за того, что НайтиСтроки() "долго запрягает".
Издержки на создание структуры с параметрами, их интерпретация и т.п. Не думаю, что индексация сильно поможет: время построения индекса ТЗ до 100 строк не оправдает разовый поиск.
Пожалуй, при большом размере ТЗ (1-3 тыс) Найти обгонит простой перебор.
Издержки на создание структуры с параметрами, их интерпретация и т.п. Не думаю, что индексация сильно поможет: время построения индекса ТЗ до 100 строк не оправдает разовый поиск.
Пожалуй, при большом размере ТЗ (1-3 тыс) Найти обгонит простой перебор.
ДанныеФормыКоллекция (FormDataCollection)
НайтиСтроки (FindRows)
Синтаксис:
НайтиСтроки(<ПараметрыОтбора>)
Параметры:
<ПараметрыОтбора> (обязательный)
Тип: Структура.
Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры - искомое значение.
Возвращаемое значение:
Тип: Массив.
Массив строк коллекции, соответствующих условиям поиска.
Замечание! Массив хранит ссылки на строки коллекции, то есть при изменении строки в коллекции, значение в массиве тоже будет измененным.
Описание:
Осуществляет поиск строк таблицы значений, отвечающих заданным условиям поиска.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Вызов метода выполняет обращение к серверу.
Такие дела.
НайтиСтроки (FindRows)
Синтаксис:
НайтиСтроки(<ПараметрыОтбора>)
Параметры:
<ПараметрыОтбора> (обязательный)
Тип: Структура.
Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры - искомое значение.
Возвращаемое значение:
Тип: Массив.
Массив строк коллекции, соответствующих условиям поиска.
Замечание! Массив хранит ссылки на строки коллекции, то есть при изменении строки в коллекции, значение в массиве тоже будет измененным.
Описание:
Осуществляет поиск строк таблицы значений, отвечающих заданным условиям поиска.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Вызов метода выполняет обращение к серверу.
Такие дела.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот