Реализация логики перезаписи HTML DOM на сервере

Мое приложение выполняет массовую перезапись DOM на стороне клиента во время загрузки. Он просматривает страницу в поисках специальной разметки (например, Markdown) или других шаблонов, заменяя их иногда довольно сложными структурами DOM (используя вызовы DOM, такие как createElement) для стилизации текста, а также для создания диаграмм и графики.

Я принял эту архитектуру, чтобы избежать каких-либо этапов сборки или предварительной обработки. Он отлично работает в десктопном браузере, но заметно тормозит на мобильных устройствах (несколько секунд, даже после неустанной оптимизации). Поэтому я хотел бы перестроить систему для предварительного сканирования страницы и предварительного построения DOM. У меня что-то вроде умственного блока, чтобы понять, как это сделать. Очевидно, я бы предпочел не переписывать весь Javascript на каком-то другом серверном языке. Кроме того, я хотел бы сохранить возможность выполнять сборку во время загрузки, как сейчас, с базовой логикой перезаписи, использующей тот же код.

Наиболее вероятным вариантом является создание этого приложения в качестве узла, хотя я новичок в узле. используя jsdom как для анализа ввода, так и для изменения DOM. Или, поскольку я являюсь поклонником XSLT и заинтригован Saxon-CE, даже несмотря на то, что это будет означать переписывание всего, я также рассматривал возможность реализации логики сканирования/перезаписи в XSLT, которая будет вызываться либо из узла (для предварительной сборки случай — люди используют Saxon из узла?) или браузера (для случая сборки во время загрузки).

Кто-нибудь может прокомментировать этот подход или выбросить альтернативные идеи?


person Community    schedule 02.10.2012    source источник


Ответы (2)


Не уверен, какие конкретные варианты использования вы решаете с помощью массивной перезаписи DOM, и я не уверен, каковы ваши требования к пропускной способности. Тем не менее, одним из альтернативных подходов к маршруту node/jsdom может быть запуск фермы безголовых браузеров Webkit и запуск вашего текущего JavaScript как есть в этом контексте живого рендеринга. Это позволит вам перенести обработку с этих мобильных процессоров на произвольно масштабируемые облачные ресурсы (при условии, что это может быть доступно для вашего проекта/бизнеса) и вообще избежать необходимости переписывать или настраивать ваш текущий рабочий код.

person manzoid    schedule 02.10.2012
comment
Блестящий. Я немного адаптировал это решение для удовлетворения своих потребностей, просто запустив PhantomJS локально и захватив DOM с помощью var dom = page.evaluate(function() {return document.documentElement.outerHTML;}); console.log(dom); - person ; 02.10.2012

Похоже, вы хотите Node. Если вы уже знаете JavaScript, вам будет несложно его освоить.

Я бы порекомендовал такой учебник: http://www.nodebeginner.org/.

Это займет у вас час, чтобы пройти, но дает подробный обзор Node, поскольку вы создаете небольшое, но функциональное приложение вместе с автором.

person Ryan O'Neill    schedule 02.10.2012