Каковы недостатки делегирования синтаксического анализа Markdown на стороне клиента?

Я планирую включить Markdown в следующий проект. В прошлом я просто использовал предварительно упакованный анализатор Markdown на стороне сервера, повторно очищал вывод HTML (ненужный шаг?) и отправлял его клиенту.

Я заинтересован в разгрузке хотя бы этой части рендеринга представления клиенту. Раньше я с большим успехом использовал парсеры Javascript Markdown на стороне клиента в приложениях Rails. Я бы делегировал объекту body следить за вставками DOM класса markdown-parseme и т.п., а затем анализировать его и заменять исходный текст результатом.

Но это первый раз, когда я рассматриваю его для производства в дикой природе. Какие проблемы и проблемы с безопасностью возникают, когда клиент обрабатывает рендеринг Markdown? Существуют ли какие-либо конкретные библиотеки, учитывающие эти проблемы?

РЕДАКТИРОВАТЬ: очевидное беспокойство, которое приходит на ум, это "а как насчет тех, у кого нет Javascript". В наших силах обнаружить браузеры, в которых не включен Javascript, и реализовать механизм, который позволит клиентам (возможно, вручную) помечать, что у них нет JS, и переносить синтаксический анализ на серверную сторону. Я бы очень хотел выяснить, есть ли серьезные проблемы с разгрузкой синтаксического анализа Markdown клиенту, помимо этого обычного вопроса совместимости. Рендеринг страницы приличного размера без кэширования вывода значительно увеличивает время отклика и, следовательно, нагрузку на сервер, и было бы неплохо, если бы мы могли быть уверены в переносе этой задачи с сервера для 95% пользователей. .


person Steven    schedule 24.01.2011    source источник
comment
Почему переход к клиенту? Просто чтобы избавить себя от вызова AJAX?   -  person sdleihssirhc    schedule 25.01.2011
comment
Очевидная проблема заключается в обязательном включении JavaScript.   -  person R. Martinho Fernandes    schedule 25.01.2011
comment
Для многих веб-приложений отсутствие JavaScript означает, что вы либо вообще не используете приложение, либо используете совершенно другое приложение.   -  person Pointy    schedule 25.01.2011
comment
Я думаю, что если вы используете решение Markdown, которое запускается в клиенте, пока люди вводят контент, то большое преимущество выполнения рендеринга в клиенте также заключается в том, что вы в значительной степени гарантируете совместимость между редактированием -время и время просмотра.   -  person Pointy    schedule 25.01.2011
comment
@Стивен: СУФ? Мой Google Fu подводит меня.   -  person Steven    schedule 25.01.2011
comment
переполнение стека, суперпользователь, сбой сервера -- SO, SU, SF -- SOUF.   -  person Stephen    schedule 25.01.2011
comment
@Stephen: я думаю, что SOFU более распространен, основываясь только на результатах поиска: encrypted.google. com/search?q=sofu+markdown   -  person Hello71    schedule 26.01.2011
comment
@Hello71 Я подумал, что мой выглядел забавно. Благодарю. ;)   -  person Stephen    schedule 26.01.2011
comment
Вопрос, который я задаю: во что клиент будет анализировать уценку? (хотел превратить это в ответ, но в любом случае я не мог привести хороший аргумент)   -  person Hello71    schedule 26.01.2011


Ответы (3)


В настоящее время большинство людей используют javascript, поэтому это не должно быть проблемой. Библиотека showdown отлично подходит для рендеринга на стороне клиента.

person Gevious    schedule 14.06.2013

Предположение, что клиент способен анализировать синтаксис Markdown, может быть неверным (по крайней мере, для некоторых людей и для поисковых систем). Если вы предоставляете этим группам версию, проанализированную сервером, вы дублируете код. На сервере обычно есть более мощные инструменты для предотвращения XSS и тому подобного (потому что именно это и делают серверы: генерируют HTML из пользовательского контента безопасным способом).

person Oswald    schedule 24.01.2011

markdown-js еще не закончен, но это Библиотека JavaScript для подмножества уценки, которая использует AST, а не различные этапы преобразования HTML. Он должен создавать разумный HTML с самого начала. Я думаю, что этот подход, если он реализован правильно, сделает уценку рендеринга на стороне клиента практичной.

Он намеренно не поддерживает встроенный HTML.

person Community    schedule 27.06.2011