Как стать автором
Обновить

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

Время на прочтение4 мин
Количество просмотров1.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


Зачем я это всё понаписал? Да просто так накипело.
Что самое печальное: попытки помощи воспринимаются в штыки и все пока остается так как есть. Одних всё устраивает, другие понимают, что будет дальше в плане доработки, поддержки и т.п., но воз и ныне там.
Теги:
Хабы:
Всего голосов 94: ↑75 и ↓19+56
Комментарии77

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
24 сентября
Astra DevConf 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн