Н, 3, Елманова. Oil Builder 3.0, архитектура "клиент/сервер" и Internet
фильтрация результатов обычного запроса в клиентском приложении либо последовательное выполнение нескольких запросов с созданием временных таблиц на сервере,
7.4     Оптимизация клиентского приложения
Методы оптимизации клиентского приложения мало чем отличаются от методов оптимизации обычных приложений C++Bui'lder. Как правило, оптимизация заключается в повышении быстродействия приложения и в снижении объема используемых ресурсов операционной системы.
Снижение количества потребляемых ресурсов возможно разными способами. 'Основной принцип их экономии - не использовать ресурсы впустую. Именно поэтому рекомендуется в приложениях, содержащих большое количество форм, создавать их динамически и уничтожать, как только они становятся ненужными (что отличается от установок менеджера проектов по умолчанию, которые предполагают автоматическое создание всех форм сразу же). Однако при этом следует помнить, что модуль данных, содержащий компоненты доступа к данным, используемые интерфейсными элементами динамически создаваемой формы, должен быть создан до создания самой формы, дабы избежать исключительной ситуации, связанной с обращением к несуществующему объекту.
Избегать лишних связей с сервером следует не только из-за лишней перегрузки сети и сервера, но и из-за того, что они поглощают некоторое количество ресурсов рабочей станции и замедляют работу приложения.
Еще одним способом экономии ресурсов клиентского приложения является использование более экономичных интерфейсных элементов в случаях, где это возможно (например, TDBText или TLabel вместо TDBEdit, TLabel вместо TDBMemo при отображении полей, редактирование которых не предполагается, TDBGrid вместо TDBControlGrid и т. д.).
Еще один прием, повышающий^бь1стррдействие клиентского приложения, заключаетБя~Т^о^раще?Гии числа~опе'раций7 связанных с выводом данных из таблиц на экран, например при "пролистывании". большого количества строк в компонентах типа TDBCjrid или TDBCtrlGrid в процессе навигации по набору данных или какой-либо их обработки. В этом случае рекомендуется на время отключать связь интерфейсных элементов с компонен-_ том TDataSoiiFce, установив значение его свойства Enabled равным false (пример использования этого приема будет приведен ниже).
154
Оптимизация приложений C++Builder в архитектуре "клиент/серее"
7.5     О навигационных методах и "клипперном" стиле программирования
Говоря об оптимизации клиент-серверных информационных систем, хотелось бы отдельно остановиться на одной очень распространенной ошибке совершаемой программистами, имеющими большой опыт работы с настольными СУБД и средствами разработки, базирующимися на xBase-языках, такими, как Clipper, dBase, FoxPro и др. При использовании средств разработки такого рода какое-либо изменение данных в таолице согласно каким-либо правилам осуществляется обычно путем создания цикла типа:
USE HOLDINGS
GO TOP
DO WHILE !EOF()
PUR_PRICE=PUR_PRICE+10
SKIP
ENDDO
CLOSE
В приведенном фрагменте xBase-кода PUR_PRICE - имя поля таблицы HOLDINGS, подверженного изменению.
При переходе к архитектуре "клиент/сервер" и средствам разраоотки, поддерживающим SQL, поначалу возникает естественное желание продолжать писать подобный код, используя циклы и навигацию по таблице. -Зто не так страшно в случае применения Cf+Builder с настольными СУЬД -локальный SQL/способный быть, альтернативой в этом случае, в конечном итоге также инициирует перебор записей таблицы. Вообще говоря та *е самое происходит и при выполнении запроса типа UPDATE HULUHNUU SET PUR_PRICE=PUR_PRICE+10 на сервере баз данных, но подооныи цикл является внутренним процессом сервера, в котором не задействованы ни клиент ни сеть. Однако при использовании "клипперного стиля программирования библиотека ВОЕ вовсе не обязана догадываться, что имел в виду программист, написавший подобный цикл, и генерирует вовсе не такие запросы!	«„„,,.,
Рассмотрим простой пример. Создадим — к™™ R таблицы HOLDINGS DBF из входящей в комплект поставки С++ВшИег базы данных DBDEMOS на каком-либо сервере баз данных, например Personal Oracle (воспользовавшись, например, утилитой Data Migration Wizard из комплекта поставки Borland C++Builder). Затем создадим новое приложение, состоящее из одной формы, включающей компоненты 1 иьопа, TTable, TDataSource, TQuery, TDBNavigator и три кнопки (рис. 7.3).
155