Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #28, МАРТ 2003 г.

ASP.NET ИЛИ ВСЕ-ТАКИ ЕСТЬ? - Что ждать от M$?

Pony (pony@xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-024-1


Шубись, народ! В середине 2003 года Micro$oft собирается презентовать миру новую серверную ось - Windows.NET. Эта оса слеплена на ядре WindowsXP. Но только WindowsXP чего-то уже год как глючит на наших компах, а в серверной операционке продолжается отлов багов... Ну, да не суть. Ведь с дот нетом на горизонте замаячили кое-какие интересные фичи для веб-строительства. Что же даст web-кодеру ASP.NET?

Во-первых, поддержку разных языков: VisualBasic.NET и C# (читается как си-шарп). И если VisualBasic.NET просто новая версия (пусть и существенно переколбашенная) задолбавшего всех глюкозавра VB, то C# - совершенно новый язык. И кодить на нем можно не только web-приложения, но и обычные проги для Windows (правда, с небольшими оговорками). По синтаксису и возможностям C# очень близок к C++, который так любят квел программеры.

Во-вторых, ASP.NET даст нам web-формы с новыми возможностями проверки кода на сервере.

В-третьих, у нас будет новая модель доступа к данным - ADO.NET. Полная интеграция с XML и возможность создания web-сервисов. Ну а теперь обо всем по порядку.

НОВЫЕ ЯЗЫКИ

Сначала глянем, что там случилось со старым добрым Васиком, попрыгаем на недостатках VB Scripting Edition по сравнению с другими (старыми или новыми) языками. Первая и самая большая лажа - отсутствие поддержки типов переменных. Все переменные имеют один тип - Variant. Для ламаботов - это гуд: не надо следить за типом переменной, в одну и ту же переменную можно запихивать разные данные. А уж если не использовать команду option explicit, то вообще не жизнь, а сказка: переменные не надо объявлять - они создаются при первом упоминании.

Но расплата за бакланизм суровая: При работе с SQL серваком лезут непонятные ошибки - это ты пытаешься в поле int засунуть строковую переменную. Сервант тормозит, как ржавый якорь, - это под все переменные бухается одинаковое количество места, и под логическую (0 или 1) и под строковую. Ограниченные возможности самого языка: например, поддержка регулярных выражений осуществляется с помощью COM объекта. А теперь, юмор от M$, в VBScript есть поддержка классов (ООП, елки-палки!), но нет поддержки наследования :). И, наконец, самая большая лажа: asp-код и html-код свалены в один файл. Если хочешь более или менее структурировать свой сайт, то приходится извращаться. Например, на xakep.ru заюзали сложную систему инклудов (около 30 файлов и 4 уровня вложенности).

Еще один недостаток, общий для всех скриптовых языков: все они интерпретируемые, то есть код считывается, интерпретируется и выполняется построчно. И так происходит каждый раз, когда юзер лезет на пагу. Естественно, происходит неоправданный жор ресурсов на выполнение кода.

Новые языки от M$ C# и VB.NET пашут более грамотно. И все благодаря .NET Framework. Как же будет работать код в этой среде? При компиляции кода в .NET Framework код, написанный на языке программирования, колбасится в MSIL (Microsoft Intermediate Language) - промежуточный псевдокод. Он содержит набор инструкций, не зависимых от конкретного процессора. То есть, можно сказать, что MSIL - это переносимый ассемблер. А исполняется он в CLR (Common Runtime Language) - независящая от языка среда исполнения. CLR транслирует промежуточный код в исполняемый непосредственно при запуске приложения - JIT (just in time компиляция). В общем, не грузись. Главное, что при открытии паги, написанной на ASP.NET, в первый раз происходит компиляция кода. Причем, чтобы сэкономить время, компилируется только та часть кода, которая будет непосредственно заюзана в генерации страницы. Откомпиленный код валяется в кэше и при необходимости может быть оттуда повторно вызван. Но можно откомпилировать код и в принудительном порядке. В любом случае, такой подход обставит в производительности и с классическими asp-приложениями (выполняется уже откомпилированный код), и с CGI-приложениями (не надо тратить ресурсы на создание процесса).

Содержание  Вперед на стр. 028-024-2