Как хранить комментарии Markdown

Я хочу использовать Markdown для системы комментариев на моем сайте, но я наткнулся на следующую проблему: что я должен хранить в базе данных - исходный комментарий в Markdown, проанализированный комментарий в HTML или оба?

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

Какой был бы лучший вариант? Кроме того, как Qaru справляется с этим?

Ответы

Ответ 1

Сохраните оба. Это противоречит правилам нормализации базы данных, но я думаю, что это стоит того, чтобы оптимизировать скорость в этом случае - синтаксический анализ большого количества текста - очень медленная операция.

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

Ответ 2

Сохраните исходную уценку и проанализируйте ее во время выполнения. Есть несколько проблем с хранением преобразованной версии в базе данных.

  • Если пользователь хочет отредактировать свой комментарий, вам нужно обратное преобразование проанализировано в исходную уценку
  • Пробел в базе данных (всегда придерживайтесь правила, если вам не нужно его хранить, не делайте этого)
  • Изменения, внесенные в парсер разметки, должны выполняться для каждого комментария в базе данных, а не просто отображаться во время выполнения.

Ответ 3

Просто выведите Markdown в HTML во время выполнения.

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

Просто взгляните на рендеринга JavaScript реального времени, который использует SO. Это быстро.

Изменить: Извините, я должен был быть более ясным. Я имел в виду просто рендеринг в PHP. Вы сбережете себе много головной боли - и у вас, вероятно, есть более важные вещи, о которых можно беспокоиться.