Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генератор кода страницы, часть общей задачи 
:(
    Опции темы
12345c
Дата 4.9.2006, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Практическое продолжение темы, начатой здесь - http://forum.vingrad.ru/index.php?showtopic=108433 ("Сделать парсер-генератор кода страницы ").

Сделан генератор кода страницы на основе шаблонов, работающих по структуре данных. Вариант рабочий, не для образца, потому что мне не нравится ненаглядность исполняемого шаблона, отображённого в тексте программы. Шаблон приходится изображать "вверх ногами" - сначала мелкие детали страницы, потом крупные, а связано с тем, что он исполняемый, в шаблон включены строки исполняемого текста.

Сделать можно не циклом, а рекурсией, но нагляднее не становится.

Задача  скрипта - ужать данные большой-большой структурированной страницы, чтобы удобнее было работать с исходным кодом данных. Хотелось бы в будущем отойти от написания индивидуальных генераторов для страниц, иметь управляемость и расширяемость представленного в нём шаблона.

Не буду приводить код - всё есть на странице http://js2.ru/files/js-man3.htm (55 K, из них кода - 1.5 К).

Самое интересное начинается с заголовка "Клиентские объекты" в коде. Примерно строка - 580. Функция rdCell() обрабатывает подаваемый ей код, но интересен вызов её:

Код
genTbl=function(t){
  var o=d.getElementById(t);var s=o.value;
  if(s.indexOf("\n")<0)s=s.replace(/\r/g,"\n");//for Mac
  a=s.replace(/\r\n/g,"\n").split("\n");
  for(i=0;i<a.length;i++)if(a[i]=='=')a.splice(i,1,'','');
  j=0;
  while(j<a.length){i=-1;
    tabl=a[j].substr(0,5).toLowerCase()=='html:'?a[j].substr(5)
      :'<table class=jsObj@@><tr>'+rdCell(fCell)+'</tr></table>';
    d.write(tabl.replace(/@@/,i==4?'':(i==3?75:(i==2?50:30)))
      .replace(/@br@/,''));j++;
}}
fCell -это строка с кодом функции, которая исполняется нужное число раз, пока не исчерпаются образы ячеек во входном потоке. Так реализован шаблон, который, к сожалению, оказывается не наглядным.

Практические результаты - участок кода, который в HTML занимал около 140К, в кодированном виде занимает около 25 К. Важно, что он сохраняет читабельность. Но далее требуется, чтобы он мог достаточно легко развиваться проектировщиком страницы - не просто добавлять новые элементы списка, которые описаны шаблоном fCell , а изменять структуру их. Поэтому есть желание сделать шаблон наглядным.

Это сообщение отредактировал(а) 12345c - 3.3.2008, 14:10


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
Sardar
Дата 5.9.2006, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



1) 12345c - ты шаман smile
2) вёрстка впаяна в скрипт, следовательно HTML only
3) формат подаваемых данных на прямую зависит от скрипта, меняем скрипт, всё может слететь
4) не все шаманы как ты, следовательно нужно учить smile

Отсюда, повтороюсь, я бы делал на XML + XSLT, как и большинство наверное.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
12345c
Дата 6.9.2006, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Конечно, HTML, на него рассчитано. XML стоит делать до него. Переводить на сервере ХML в такую структуру, генерировать скрипт генерации кода, скомпилировать страницу, если она в созданном виде будет вызываться многократно.
PM WWW   Вверх
Sardar
Дата 7.9.2006, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(12345c @  6.9.2006,  13:57 Найти цитируемый пост)
Переводить на сервере ХML в такую структуру

Посмотри на это, если у тебя ещё останеться желание генерить из XML страницу с особым форматом и скриптами, то приведи хотя бы пример зачем такие сложности если чистый XML можно отправить клиенту (опера вроде как XSLT уже поддерживает, не знаю точно), а форматирование отложить в кешируемые стили. Плюсы компактности на лицо (тем более если передача gzip'ом), плюсы переносимости тоже, хоть XHTML, хоть XSL-FO, хоть что угодно.

Не отговариваю, просто это первый проект который я даже с 12 раза не врубаюсь как применить, когда есть более лучшие альтернативы.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
12345c
Дата 7.9.2006, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Хочу, чтобы на локальном компьютере не в архиве страницы занимали тоже меньше места.

А где прочитать про зипование при передаче? Известно, что в модемной связи по V42+ поток зипуется, а до местного провайдера как? И делается ли сжатие по ADSL и локальным сетям?

Через что этот архив смотреть? (localisation_static) 
XSLT - конечно, хорошая и правильная альтернатива, только XML с тегами иметь придётся. В зипе они уничтожаются, но в открытом коде занимают место. В конце этот алгоритм должен перекликаться по содержанию с XSLT-кодом для XML-представления.
PM WWW   Вверх
Sardar
Дата 8.9.2006, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(12345c @  7.9.2006,  14:27 Найти цитируемый пост)
А где прочитать про зипование при передаче?

Гуглить HTTP заголовок accept-encoding, используеться часто gzip, по моему реже deflate (простой zip). Сжатие на уровне HTTP, а не ниже по слоям.

Цитата(12345c @  7.9.2006,  14:27 Найти цитируемый пост)
Хочу, чтобы на локальном компьютере не в архиве страницы занимали тоже меньше места.

Хорошо спроектированный XML занимает сам по себе немного места, также модно XML ложить в архив (gzip), файл действительно почти ничего не весит тогда.

Цитата(12345c @  7.9.2006,  14:27 Найти цитируемый пост)
В конце этот алгоритм должен перекликаться по содержанию с XSLT-кодом для XML-представления. 

Какой алгоритм? В XML документе оставляем <?xml-stylesheet type="text/xsl" href="путь до твоего .xsl"?>, браузер при открытии сам поднимет стили и трансформирует документ по ним в нечто красивое/читабельное. И никаких заморочек smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0549 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.