Почему буферы протокола не являются хорошим способом моделирования текстового документа с разметкой? - PullRequest
0 голосов
/ 02 мая 2019

Обзор протокола от Google гласит:

Буферы протокола не всегда являются лучшим решением, чем XML - например, буферы протокола не будут хорошим способом для моделирования текстового документа с разметкой (например, HTML), поскольку вы не можете легко чередовать структуру с текстом .

Я не уверен, что понимаю, кто-то может дать мне хороший пример / объяснение по этому поводу?

1 Ответ

1 голос
/ 04 мая 2019

Представьте себе следующий фрагмент HTML:

<p>Hello! <strong>This text is strong (bold).</strong> <em>This is
emphasized (italic).</em> And <a href="https://example.com">here is
a link</a>.</p>

Если вы создали разумное представление расширенного текста в Protobuf, а затем записали это в текстовом формате Protobuf, это может выглядеть примерно так:

{
  p: {
    children: { text: "Hello! " }
    children: {
      strong: {
        children: { text: "This text is strong (bold)." }
      }
    }
    children: { text: " " }
    children: {
      em: {
        children: { text: "This is emphasized (italic)." }
      }
    }
    children: { text: " And " }
    children: {
      a: {
        href: "https://example.com"
        children: { text: "here is a link" }
      }
    }
    children: { text: "." }
  }
}

Как видите, представление Protobuf выглядит очень сложным. Основной текст больше не читается, так как структура доминирует.

Теперь, с точки зрения фактической структуры данных, представление Protobuf на самом деле не сильно отличается от того, что будет создавать парсер HTML / XML. В коде с ним может быть не сложнее работать. И двоичная сериализация Protobuf может быть разумной. Вы можете даже сэкономить несколько байтов по сравнению с представлением XML (хотя, вероятно, не так много, так как большая часть пространства будет по-прежнему занята основным текстом).

Если вы писали WYSIWYG-редактор форматированного текста, в котором пользователи никогда не видят базовое представление, то использование Protobuf для представления текста, подобного описанному выше, может иметь большой смысл.

Текст, который вы цитируете (который я написал, кстати!), Пытается сказать, что если у вас есть сценарий использования, когда человек пишет текст с разметкой, но должен сделать это в текстовом редакторе, то Protobuf не очень хорошее решение HTML или XML работают намного лучше для разметки текста.

OTOH, если у вас есть авторские высокоструктурированные данные в простом текстовом формате, то текстовый формат Protobuf может работать довольно хорошо! Например, многие люди пишут конфигурационные файлы таким образом - и многие и многие используют для этого JSON, что очень похоже. Между тем, XML оказывается очень громоздким и болезненным для этих случаев использования.

С учетом всего сказанного, когда люди вводят данные, возможно, имеет смысл использовать действительно оптимизированный для человека формат. Для текста с разметкой используйте Markdown. Для структурированных данных, таких как файлы конфигурации, YAML довольно хорош. Но обратите внимание, что Markdown и YAML не работают хорошо как формат обмена между двумя компьютерами.

...