Pull to refresh

Феерические архитектурные подходы или Javascript наше всё

Reading time4 min
Views1.6K
Моё кунфу сильнее, сказал Вася и продолжил дописывать замечательный сайт.


Жил был один замечетальный разработчик, для простоты назовём его Вася. У Васи было всё хорошо, он был начальником IT отдела и писал большой портал, на который начальство возлагало большие надежды.

Вася заложил замечательную архитектуру в свой портал.

Панель администратора, это же для удобства пользователей. Написана она была на WinForms. Пускай не все пользователи подозревали, что в этой панели придется местами редактировать Java Script руками, но это ничего, пережить можно. Все шуршит все работает, база данных резво наполняется деревом из кусков текста в вперемешку с яваскриптом, все довольны. Клиентская же сторона, дело другое. Таки придется делать, чтобы ее можно было смотреть через броузер. Вася понимал, что в высоко нагруженных системах запросов очень много, а статическая страничка грузится очень быстро. Поэтому отдавать пользователю будем именно статическую страничку, не важно, что она одна, зато быстрая. Он не хотел обычный сайт, ведь «через классический подход к разработке невозможно создать быстрый сайт, он будет всегда заваливать по производительности железо» (С). Поэтому он пошел другим путём, перенесение логики на сторону клиента наше всё, он создал кусок кода на JS весом в пару сотен килобайт, в функции которого входит подгрузка через хендлеры с сервера тех кусков кода на яваскрипте, которые лежат в базе с контентом, обработка на нажатия пунктов меню и т.п. Т.к. яваскрипт работает на стороне клиента, то по большому-то счету пофигу, что там писать, поэтому вся генерация html DOM происходит на яваскрипте, не совсем всего правда, а того, что находится внутри body. Зато можно не беспокоиться о серверной оптимизации кода, оптимизированных sql запросах и т.п., мы же переносим нагрузку на клиента.

Так же в процессе разработки возникают нетривиальные задачи, типа получение курса валют, погоды и т.п. Эти задачи решаются легко и быстро, создается новый хэндлер который страница запрашивает каждую минуту, хэгдлер в свою очередь запрашивает домашнюю страницу центробанка из которой километровыми регулярками вытаскиваем курсы и обрамив данные в JS, что бы они сами себя могли сразу прописать на странице отправляем обратно. Т.к. модульность это круто, то у погоды свой хендлер и свой вызов каждую минуту. Локализация на нужный язык сделана правильно в базе, но правда только 30%, остальную часть мы для удобства равномерно размазываем по JavaScript и Code-Behind, это всё замечательно реализуется с помощью switch.


Избранные куски кода:

Генерация разметки html страницы: (и так страниц 5-6 кода примерно)
document.body.style.margin = "0px";
document.title = sTitle;
document.body.style.backgroundColor = sColor0;
document.body.style.backgroundImage = "url(" + sImgUrl0 + ")";
document.body.style.backgroundRepeat = "repeat-x";
tableMain = document.body.appendChild(document.createElement("table"));
tableMain.style.fontFamily = "serif";
tableMain.style.fontSize = "10.5pt";
tableMain.style.fontWeight = "bold";
tableMain.id = "tableMain";
tableMain.style.width = "100%";
tableMain.style.borderCollapse = "collapse";
tableMain.cellPadding = "0px";


Данные в базе:
⌠var var oCell; //рабочая ячейка. var divAny; ⌡var ⌠ini oCell = document.getElementById("cellInfo"); ⌡ini ⌠one ₢₢₢InfoClear(); ⌡one // 0 ₢₢₢A2Add(oCell,"∃∃∃"); oCell.appendChild(document.createTextNode("\u00A0\u00A0\u00A0")); // 1 ₢₢₢A2Add(oCell,"∃∃∃"); oCell.appendChild(document.createTextNode("\u00A0\u00A0\u00A0")); // 2 ₢₢₢A2Add(oCell,"∃∃∃","1_2_76_22"); oCell.appendChild(document.createTextNode("\u00A0\u00A0\u00A0")); // 3 ₢₢₢A2Add(oCell,"∃∃∃"); ₢₢₢BrAdd(oCell); ₢₢₢BrAdd(oCell); // 4 ₢₢₢TextAddDivBlack(oCell,"∃∃∃",1); ₢₢₢BrAdd(oCell); divAny=₢₢₢div6Add(oCell); // 5 ₢₢₢TextAdd(divAny,"∃∃∃"); ₢₢₢TextAdd(divAny,"www.bolshoybiznes.ru"); // 6 ₢₢₢TextAdd(divAny,"∃∃∃"); // 7 ₢₢₢TextAddBrDivGray(oCell,"∃∃∃"); // 8 ₢₢₢TextAddDivGray(oCell,"∃∃∃"); // 9 ₢₢₢TextAddBrDivBlack(oCell,"∃∃∃"); // 10 ₢₢₢TextAddBrDivBlack(oCell,"∃∃∃"); // 11 ₢₢₢TextAddBrDivBlack(oCell,"∃∃∃"); // 12 ₢₢₢TextAddBrDivBlack(oCell,"∃∃∃"); // 13 ₢₢₢TextAddBrDivBlack(oCell,"∃∃∃"); ₢₢₢BrAdd(oCell); // 13+4=17 divAny=₢₢₢divList6Add(oCell,["∃∃∃","∃∃∃","∃∃∃","∃∃∃"]);


Получение курсов валют:
sAnswer = System.Text.Encoding.UTF8.GetString(oWebClient.DownloadData("http://cbr.ru/"))
tDate1 = oRegExInDate1.Match(oRegExDate1.Match(sAnswer).Value).Value
tDate2 = oRegExInDate2.Match(oRegExDate2.Match(sAnswer).Value).Value
dD1 = oRegExInD1.Match(oRegExD1.Match(sAnswer).Value).Value
dD2 = oRegExInD2.Match(oRegExD2.Match(sAnswer).Value).Value
dE1 = oRegExInE1.Match(oRegExE1.Match(sAnswer).Value).Value
dE2 = oRegExInE2.Match(oRegExE2.Match(sAnswer).Value).Value


Зачем я это всё понаписал? Да просто так накипело.
Что самое печальное: попытки помощи воспринимаются в штыки и все пока остается так как есть. Одних всё устраивает, другие понимают, что будет дальше в плане доработки, поддержки и т.п., но воз и ныне там.
Tags:
Hubs:
+56
Comments77

Articles

Change theme settings