Здравствуйте, 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 сервера — громоздко.
Может есть более удобные способы?