Шаблонизатор на основе базы данных

O
На сайте с 29.05.2008
Offline
195
616

Здравствуйте.

Хочу попробовать реализовать шаблонизатор на основе базы данных. Практически, переизобрести Веб. Идея такова.

1. При запросе страницы /index, node.js отдает только head, из которого исполняется init.js (пользовательский скрипт на стороне клиента).

2. init.js запрашивает GET /index?init.

3. node.js проверяет наличие страницы в таблице page.

4. node.js запрашивает записи из таблицы node, где `node`.`page` FK `page`.`uri` = index, а `node`.`parent` = 'body'.

5. node.js что-то достает из базы данных и отдает объекты первого уровня вложения в <body> в таком виде: [header: [class: ['header', 'object`]], main: [class: ['main'], role: 'main', id: 'main']]. Объект кэшируется в ОЗУ и в следующий раз просто возвращается объект node.js.

6. Запрос кешируется на стороне клиента и в следующий раз init.js запросит /index?init уже с заголовком If-Modified-Since.

7. init.js строит DOM из полученных объектов и запрашивает следующий уровень для каждого из. Например, GET /index?header.

8. node.js отдает каждый из блоков, как в пункте 5.

В чем смысл:

1. Сделать HTML более ООП.

2. Кэшировать страницу по элементам, стили по классам (запросы кэшируются, какие-то данные можно кэшировать в indexedDB).

3. Передавать блоки параллельно по одному постоянному подключению, используя HTTP/2.

4. Вместо интервальной проверки изменений в блоках на стороне клиента, посылать новые блоки из сервера используя HTTP/2.

5. Возможность просматривать страницу без подключения к Интернету.

И многое другое.

Вопросы:

1. Как лучше хранить DOM. Как лучше хранить шаблон-выборку из DOM элементов (планирую в indexedDB на стороне клиента)?

2. Будут ли поисковые системы индексировать такие страницы, загружаемые посредством AJAX?

3. Как хранить innerText, ведь посередине него может быть вставлен блок?

4. Дублировать ли блоки для каждой из страниц или сохранять только оригинальны?

5. Насколько для такой задачи подходит mySQL? Можно ли заменить на indexedDB с последующим кэшированием в объекты на стороне сервера?

6. Сможет ли node.js обрабатывать по скажем 100 000 запросов блоков от 1000 клиентов в секунду? Какая конфигурация сервера нужна?

7. Встает вопрос, как же хранить динамические значения. А что если, например, к node.js подключить webkit и полученный из базы блок сразу же вставлять в body. К блокам, в которые нужно вставить динамическое значение добавлять атрибут data-post-action. И отлавливать событие создание DOM блока с определенными data-post-action?

K
На сайте с 03.06.2015
Offline
45
#1

Нормально, вместо одного запроса будет 10, или 20, смотря по обстоятельствам непреодолимой силы. Между тем современные тренды трындят наоборот: зачем мучить сервер запросами на микроскопические куски текста, если можно все сразу отдать.

---------- Добавлено 14.08.2015 в 18:23 ----------

ortegas:
Практически, переизобрести Веб

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

---------- Добавлено 14.08.2015 в 18:27 ----------

Или я что-то не понял?

ortegas:
5. Возможность просматривать страницу без подключения к Интернету.

Вы в LocalStorage что ли хотите кешировать куски хтмля?

MYSQL PHP JS HTML CSS SEO TXT США СССР
KasperCC
На сайте с 11.08.2015
Offline
46
#2

Может..Не надо лезть туда,куда не надо лезть..Это к "Практически, переизобрести Веб"

Wap-Сlick. Здесь МТС по 30 руб! (5.gp/pDuh) Лучший Wapclick тут (su0.ru/P4N3)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий