Итак, все теперь понятно нам в Интернете: серверы принимают на входы и выдают с выходов данные, которые по двум слоям стека протоколов – Internet и Transport – передаются на клиентские устройства. Клиентские устройства из полученных данных строят видимые и доступные человеку интерфейсы (UI, User Interface). Пользователи воспринимают передачу данных по четырем уровням стека протоколов через два разнонаправленных межсетевых экрана как прозрачную, бесшовную и естественную, и формируют свой пользовательский опыт (UX, User eXperience), сосредотачиваясь на содержании и смысле передаваемых данных и, как правило, не отвлекаясь на эффекты самого процесса передачи.
Пользовательские интерфейсы теперь, как правило, по умолчанию графические, так что собственно термин GUI, Graphic User Interface теперь применяется только в контексте работы технических специалистов как противоположность текстовому интерфейсу командной строки. Они существуют и широко применяются в эксплуатации серверов, в том числе доступных в Интернете. Это мы, возможно, рассмотрим в подробностях позже, сейчас же нам важно не отвлекаться от специфики пользовательских интерфейсов.
Все браузеры – клиенты, но не все клиенты – браузеры. Браузеры всеядны и стремятся быть пригодными для работы с любыми сайтами в Интернете. Небраузерные клиенты, как правило, специально настраиваются для взаимодействия с определенными серверами. Широко представлены и известны клиентские (как правило, мобильные) приложения, содержащие встроенный браузер, ограниченный настройками и так же специально сконфигурированный для определенных целевых серверов. Такие браузеры лишаются всеядности и используются в составе специфического клиентского приложения как наборы готовых реализаций базовых функций построения пользовательских интерфейсов. Для большинства проектов создание собственной реализации этих базовых функций нецелесообразно, поэтому приложения, технически представляющие собой браузеры одного сайта, очень распространены.
Клиентские приложения, не содержащие встроенных функций браузера и обращающиеся прямо к средствам построения пользовательских интерфейсов операционной системы целевого пользовательского устройства, гораздо более сложны и дороги в разработке и поддержке. За счет тягот выпуска отдельной версии клиентского приложения для каждой платформы развивается наивысшая достижимая на пользовательском устройстве скорость обработки больших объемов данных, как правило, связанных с графикой и видео. Формирование позитивного или хотя бы адекватного пользовательского опыта, насколько возможно свободного от лагов как передачи, так и обработки данных на устройстве, бесконечно чувствительно к скорости прохождения этих процессов.
Понятностью слова «лаг», также представляющего собой кальку с английского, мы тоже обязаны нашему близкому знакомству с Интернетом, передача данных в котором быстра, бесшовна и прозрачна, но не всегда, а только как правило. Так мы и подошли к достаточному раскрытию темы клиентских приложений. Чтобы построить пользовательский интерфейс, нам осталось только получить его описание в виде данных, передаваемых с сервера.
На сервере мы можем использовать абсолютно любой язык программирования по нашему выбору. Задачи упаковки данных в понятный браузерам комплект HTML–CSS-JS решены на массе современных сколько-нибудь зрелых языков программирования. Передавать чистые данные для всех прочих клиентов в формате JSON, JavaScript Object Notation, и некоторых других, не исключая прямых двоичных (binary), и того проще.
Здесь самое большое значение имеет выбор между интерпретируемыми и компилируемыми языками программирования. Для интерпретируемых на фактических железных серверах запускаются виртуальные машины с готовыми наборами реализаций базовых функций. Это дает некоторое ускорение разработки и делает ее удобнее и проще. Компилируемые системы более сложно и трудоемко собираются для каждой операционной системы, фактически установленной на каждый железный сервер. Это дает выигрыш в скорости исполнения кода за счет прямого доступа к системным ресурсам, представляя уже примерно понятные сложности в разработке и развертывании.
С точки зрения эрудированности в информационной архитектуре здесь нам важно отметить аналогию между встроенными браузерами на уровне клиентских приложений и виртуальными машинами на уровне серверных. Этот общий принцип нам обязательно пригодится.