Разбор уценки на лету
Я хочу применить уценку к моим форумам.
Я исследую множество возможных подходов, как бы я это сделал, и вот что я подумал:
Простой подход будет включать pagedown на стороне клиента и php-markdown на сервере.
Мой подход заключается в сохранении чистой разметки в базе данных и при отображении конвертировать в HTML (с pagedown). Поскольку у меня уже есть уровень безопасности для моей серверной части (белый список элементов HTML) и весь необходимый персонал, я не вижу здесь ничего, что можно было бы потерять.
Что я выиграю в этом случае? ну, я должен изменить pagedown, чтобы использовать пользовательские кнопки и шаблоны. Мне было бы сложно поддерживать как php, так и JavaScript.
Мой вопрос: это хороший подход? Чтобы сломать этот вопрос:
- Есть ли какие-либо серьезные издержки на стороне клиента, загружающие около 30 сообщений и конвертирующие его в HTML (производительность)
- Имея идею, что я проверяю белый список элементов, есть ли какая-то проблема безопасности, о которой мне нужно знать? (Безопасность)
4 ответа
Я бы не стал использовать механизмы уценки на стороне клиента. Из нескольких быстрых поисковиков, по его мнению, он сильно загружает процессор. Загрузка 30 постов добавит немного накладных расходов.
Если вы хранили MD в БД, визуализировали в HTML на лету, то использовали некоторое кэширование (memcached или redis), которое могло бы работать довольно хорошо.
Что касается безопасности, то здесь есть хорошее прочтение, потребуется дополнительная дезинфекция, удаление скриптов / ссылок / перенаправлений и т. Д.
дальнейшее чтение
Преобразование уценки со стороны клиента не рекомендуется, как заявляет @Lex. Вместо этого вы можете использовать некоторые онлайн-сервисы, чтобы конвертировать HTML-разметку top для вас.
Взгляните на http://daringfireball.net/projects/markdown/dingus. Вы можете использовать curl или что-то еще, чтобы опубликовать уценку на сайте, а затем отказаться от сайта, чтобы принять участие в html. Вы также можете посмотреть здесь http://parsedown.org/
У вас есть два варианта:
- Strapdown - позволяет создавать документы уценки без обработки на стороне сервера, как вы можете видеть на этой странице, даже без кода, просто используя статические файлы
- markdown-js - позволяет создать документ уценки с обработкой на стороне клиента (javascript)
Вот как я это делаю:
Сохраните код уценки в БД, и при рендеринге я кеширую результат в файл (файл, Memcached или любой другой механизм хранения кеша, который вы хотите). Таким образом, я сохраняю оригинал в базе данных и не трачу ресурсы на компиляцию уценки при каждом посещении страницы, вместо этого я обслуживаю файл кэша до тех пор, пока он не истечет или не будет удален из-за изменения.