[Конкурс] Опережая время
Новая тема Написать ответ
# Пт Июн 03, 2011 12:45 pmKAFLAN Зарег.: 24.10.2010 ; Сообщ.: 24Ответить с цитатой
Для человека очень важно периодически доказывать себе и окружающим, состоятельность своих идей. Это и стало нашей проблемой. После одного очень сложного проекта по автоматизации мы (молодая команда разработчиков из 4-ех иногда 5-ти человек), решили что больше не будем пользователь порочной парадигмой разработки веб-сайтов на технологии WebForms (ASP .NET), использование которой привело к созданию десятков форм и сотен контролов частично дублирующих код друг друга (возможности группировать куски кода и выносить их в общие контролы использовалась по максимуму). Любые модификации проекта требовали просмотра и правки большого количества кода, удержания в памяти различного рода трюков и хаков примененных для изменения порядка загрузки тех или иных контролов. Возможно отчасти негативный эффект был получен из-за плохого знания паттеронов разработки под WebForms или отсутствия у команды архитектурных навыков.

Проанализировав проблемы с которыми мы столкнулись было принято решение разработать свою системы рендеринга и свою парадигму разработки веб-сайтов. Стоит оговорится что на тот момент паттерн MVC для платформы майкрософт не существовал вовсе или существовал в зародочном состоянии и как серьезная альтернатива WebForms не рассматривался. Так вот разрабатываемая нами технология в итоге чем то смутно MVC напоминала, у нас был модули описывающие логику работы атомарного кусочка сайта (виджеты), были шаблоны виджетов, и были шаблоны страниц, в которых были размечены посадочные места для виджетов. Всё было здорово, в админке регистрировались новые виджеты и сайт собирался полностью контент менеджером, который расставлял виджеты по страницам и настраивал для них источники данных. По сравнению с WinForms это было сильным шагом в сторону автоматизации создания веб-сайтов. Проблема в архитектуре была только одна, зато какая! Проблема возникла благодаря нашей сильной любви к JavaScript'у. Мы решили что вычислительные мощности пользовательских компьютеров позволяют рендерить сайт непосрественно на стороне клиента и дейсвительно это давало большие преймущества:
1) нет необходимости выполнять раздрадающую пользователей операцию - перезагрузку страницы,
2) все библиотеки ресурсы, шаблоны страниц, шаблоны виджетов, клиентская логика виджетов - кешировались и использовались повторно на следующих страницах.
В итоге такие виджеты как курсы валют, время, погода, поиск, баннеры, переключение языков, сквозные менюшки, сквозной статический текст и т.п. загружались и рендерились только один раз при первом заходе, дальше с сервера запрашивались только данные для рендеринга (шаблон, входные данные, клиентская логика) тех виджетов которых еще нету в кеше. Для шаблонирования на стороне клиента пришлось разработать свой язык разметки похожий на ASP.NET, который принимает на вход шаблон и JSON объект, а на выходе дает готовый HTML.

НО, как всегда есть ряд НО. На тот момент (2008-ой год) для каждого браузера приходилось писать свой хак что бы перехватывать нажатие на кнопки навигации "Вперед", "Назад". Даже отловив нажатие кнопок нужно учитывать тот момент что мы грузим новую страницу ассинхронно плюс используем setTimeout, для расспаралеливания процесса рендеринга в тех браузерах в которых это поддерживается, это означает что если пользователь нажмет "Назад" два раза мы запустим параллельно два процесса загрузки страницы и остановить предыдущий процесс как оказалось не так уж и просто. При малейшей ошибке в синтаксисе мы получаем не работающий сайт (обнаружение ошибок в яваскрипте до сих пор решает различными браузерами по разному и не всегда корректно). И конечно же IE 6, на тот момент у него было еще порядка 10-20% рынка и отказывать от него было никак нельзя, а это тормознутое нечто интерпретировало яваскрипт крайне медленно и на ровном месте генерило memory leak'и. Счетчики, системы открутки баннеров отказывались нормально учитывать переходы в урлах с #, кроме того на тот момент они все как сговорившись использовали в своей логике document.write, эта функция отлично работает если запускать ее из кода страницы, но вот если страница уже отрендерилась и вы запускаете ее из асинхронно подгружаемого скрипта, она просто перетирает текущий документ, а учитывая что у нас все грузится асинхронно такая логика убивала всю идею. К счастью хак был найден достаточно быстро ( document.write = function (e) { // в 'e' лежит то что чужой скрипт пытается выплюнуть на страницу } ), а вот что бы лайвинтернет, на который раньше ориентировались многие рекламодатели стал показываеть урлы сайта в статистики нужно было как то избавиться от рештки в урле, в итоге было найдено решение - грузит счетчик лайвинтернета в фрейме и передавать туда все необходимые данные. Часть проблемы заключалось еще в том что мы рассчитывали на 10-15 виджетов на странице, а заказчик решил собирать портал у которых виджетов было до полусотни. Но даже преодолев все эти сложности мы столкнулись с тем с чем и должны были столкнутся - полным не понимаем со стороны поисковиков. Ес-но для контентных сайтов это не приемлемо и нужно было что то делать, но что? Сделать упрощенный дубль сайта на веб-формс? Не вариант на сайте было уже разработано под сотню шаблонов инфоблоков и страниц на нашем языке разметки которые ес-но не имеет полной совместимости с асп-нетом, переписать всё это просто не реально.

Была идея собирать отрендеренные страницы от самих клиентов, скалидровать на сервере и отдавать ботам их, но тут есть понятные проблемы: 1) персонализация (там будет фигурировать данные пользователя если он залогинен), 2) возможность навредить порталу подсунув в текст страницы произвольную информацию.

В итоге мы решили для тех клиентов у которых отключен яваскрипт (а это в первую очередь поисковые боты) сделать собственный рендерер который на сервере от интерпретируют всю ту тонную яваскрипта которая в традиционном режиме исполняется на клиенте. Тут и начались наши мытарства, все существующие интерпретаторы JavaScript, на C# на тот момент были крайне тормознутыми. По счастью в тот момент на свете появился браузер с открытым исходным кодом Google Chrome, который содержал в своем составе очень быструю виртуальную машину яваскрипта - V8. Вытащив ее из браузера и разработав мостик между ASP.NET'ом (C#) и V8 (C++) мы уже было обрадовались и открыли шампанское. Но не тут то было, сайт крешился когда на него заходило несколько ботов допустим яндексовый и гугловый одновременно. Во-первых эту закономерность было достаточно сложно выявить, а во-вторых не было идей откуда могла взяться проблема в обслуживании двух ботов одновременно. Оказалось, что так как хроме работает по моделе одна вкладка - один процесс, V8 однопоточная виртуальная машина, т.е. в ее код был не расчитан на выполнение в многопоточной среде в этом просто небыло никакой необходимости. Искать C++ девелопера который бы смог сделать код V8 потокобезопасным не было времени, пришлось вернуться к варианту использования майкрософсткой библиотеки интерпретации яваскрипта и придумать хитрую систему кеширования обеспечивающую приемлемую производительность серверной версии рендерера.

...

Самое интересное что по прошествии трех лет (код проекта, да и сам сайт не модифицировался гарантированно), время догнало технологию и сейчас уже проблем с работой сайтов на таком движке практически не наблюдается (см. проект и то как его видит гугл), но на подвиги больше не тянет Smile
# Ср Июн 15, 2011 8:52 amm_Stasuk Зарег.: 23.12.2007 ; Сообщ.: 5967Ответить с цитатой
проект интересный, сразу видно что делал не один человек и делалось все с головой.

А вот саму статье еле-еле прочитал Shocked 40% слов не понял Smile
# Ср Июн 15, 2011 12:30 pmKAFLAN Зарег.: 24.10.2010 ; Сообщ.: 24Ответить с цитатой
Цитата:

проект интересный, сразу видно что делал не один человек и делалось все с головой.


Спасибо. Общий штат (разработчики + редакция) 40 человек.
Цитата:

А вот саму статье еле-еле прочитал 40% слов не понял


Да, не умею я находить баланс между глубоким погружением в предметную область и необходимостью раскрыть суть проблематики не специалистам.
# Ср Июн 15, 2011 7:38 pmiwfyb Зарег.: 14.03.2008 ; Сообщ.: 2862Ответить с цитатой
у меня одного вместо проекта - картинка какая-то и не дает кликать никуда?
# Ср Июн 15, 2011 7:40 pmNatud Зарег.: 26.10.2010 ; Сообщ.: 1786Ответить с цитатой
iwfyb, у меня их сайт открывается.
# Ср Июн 15, 2011 8:54 pmm_Stasuk Зарег.: 23.12.2007 ; Сообщ.: 5967Ответить с цитатой
сайт открывается но грузиццо долго
# Вт Июн 21, 2011 6:00 pmTREVERS Зарег.: 20.06.2011 ; Сообщ.: 9819Ответить с цитатой
Персонализация - это словно по теме поведенческих факторов Smile
# Чт Июн 23, 2011 8:22 pmKAFLAN Зарег.: 24.10.2010 ; Сообщ.: 24Ответить с цитатой
TREVERS писал(а):
Персонализация - это словно по теме поведенческих факторов Smile



Посмотрев остальные статья, я понял - не смотря на то что конкурс для вебмастеров, в основном народ повествует о различных способах заработка. И SEO лидирует в этом перечне, поэтому решил поделиться своим опытом в этой области.
# Чт Июн 30, 2011 7:15 amTREVERS Зарег.: 20.06.2011 ; Сообщ.: 9819Ответить с цитатой
Открыл почти машину времени, ты наверняка и заглянул в будущее на 11 июля - ПОБЕДЫ Drinks or Beer
# Чт Июн 30, 2011 4:06 pmKAFLAN Зарег.: 24.10.2010 ; Сообщ.: 24Ответить с цитатой
TREVERS - спасибо, Вам так же удачи.
# Пн Июл 04, 2011 3:00 pmzinik123 Зарег.: 07.05.2011 ; Сообщ.: 7Ответить с цитатой
Прочитав статью, понял, что в качестве веб-дизайнера я только в самом начале пути, поскольку даже не слышал слова WebForms.
Зато заметил кучу отсутствующих запятых и несколько опечаток, хорошо бы их поправить:
разработать свою системУ рендеринга...
Стоит оговоритЬся что...
писать свой хак, ЧТОБЫ перехватывать... и т.д.
# Вт Июл 05, 2011 12:52 pmKAFLAN Зарег.: 24.10.2010 ; Сообщ.: 24Ответить с цитатой
zinik123 писал(а):
Прочитав статью, понял, что в качестве веб-дизайнера я только в самом начале пути, поскольку даже не слышал слова WebForms.
Зато заметил кучу отсутствующих запятых и несколько опечаток, хорошо бы их поправить:
разработать свою системУ рендеринга...
Стоит оговоритЬся что...
писать свой хак, ЧТОБЫ перехватывать... и т.д.



zinik123 спасибо за отзыв. На счет ошибок - каюсь не выверил, а сразу запостил, желая поправить в последствии... Но к сожалению форум так настроен (или это конкретно для этого раздела справедливо?) что спустя определенное время после публикации править текст топика уже не возможно.

А вы именно веб-дизайнер или веб-мастер в более широком смысле?
# Вт Июл 05, 2011 3:38 pmzinik123 Зарег.: 07.05.2011 ; Сообщ.: 7Ответить с цитатой
KAFLAN, в широком смысле я пока ученик. Лет 10 назад начинал делать сайты, но перешел на другую работу. Сейчас там кризис, и я решил вернуться в Инет. Пока сделал сайт на DLE, думаю набираться знаний, в том числе и на этом форуме.
# Чт Июл 07, 2011 12:29 pmaleksandrvk Зарег.: 12.02.2011 ; Сообщ.: 3Ответить с цитатой
Статья на "зрелище и хлеб для народа", не тянет. Узко направленная статья на то, "какие мы были умные три года назад". Специалистам статья не нужна, они уже ушли вперед. Для новичков - бесплодна.
Новая тема Написать ответ    ГЛАВНАЯ ~ ПОЛЕЗНЫЕ СТАТЬИ
 
Любое использование материалов, размещенных на ArmadaBoard.com, без разрешения владельцев ArmadaBoard.com запрещено.