Re[2]: ISAPI Ext. Как разумно формировать HTTP контент (VC++
От: creasysee  
Дата: 07.12.07 16:38
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Вообще-то именно по этой причине генераторы, основанные на шаблонной разметке, вытеснили императивные генераторы. PHP, JSP, ASP[.NET] и так далее позволяют гораздо лучше разделять разметку и логику.

S>Поэтому вопрос номер 1: вам точно нужен ISAPI?

Да. Очень критична скорость обработки и ответа сервера при взаимодействии с существующими библиотеками на VC++. Нужно именно на C++ и именно ISAPI Ext.
Поэтому для ускорения думаю сделать следующее:
1. Пропарсить исходные HTML страницы из внешних файлов и разделить на блоки, от начала страницы до первого параметра замены (типа {{var1}}), от текущего параметра до следующего.
2. Каждый фрагмент положить в <map>, индексируя именем параметра. Каждый <map> будет создан для свой страницы.
3. Сделать это все в конструкторе ISAPI. Отожрет может несколько метров, но терпимо.

Тогда работа функции будет выглядеть примерно следующим образом:
void CmyisapiExtension::Show(CHttpServerContext* pCtxt, LPCTSTR sParam1, long lParam2) {
    // Вычисление данных ... var1, var2, ..., var10
        StartContent(pCtxt);
    *pCtxt << m_Map_Show.find("var1")->second + var1;
        *pCtxt << m_Map_Show.find("var2")->second + var2;
        ...
    *pCtxt << m_Map_Show.find("var10")->second + var10;
        *pCtxt << m_Map_Show.find("end")->second + var10;
    EndContent(pCtxt);
}

Недостатки:
1. Писать парсер, хоть и простой.
2. Проблема с повторами имен параметров в HTML. Можно как-то обойти, если пошевелить мозгами.
Достоинства:
1. Быстро.

Пытался использовать CStencil из ATL сервера — громоздко.
Может есть более удобные способы?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.