Как быстро или легкий вес Буфер Протокола?

Я использую babel, и для меня работает следующий синтаксис:

class MyClass {
    static constant1 = 33;
    static constant2 = {
       case1: 1,
       case2: 2,
    };
    // ...
}

MyClass.constant1 === 33
MyClass.constant2.case1 === 1

Пожалуйста, учтите, что вам нужен пресет "stage-0". Чтобы установить его:

npm install --save-dev babel-preset-stage-0

// in .babelrc
{
    "presets": ["stage-0"]
}

Обновление:

в настоящее время используют stage-2

34
задан Hao 24 January 2009 в 19:35
поделиться

2 ответа

Я очень сомневаюсь, что это будет когда-либо иметь прямую поддержку языка или даже поддержку платформы - это - вид вещи, которая обрабатывается отлично со сторонними библиотеками.

Мой собственный порт кода Java является явным - необходимо назвать методы для сериализирования/десериализовывания. (Существуют тупики RPC, которые автоматически сериализируют/десериализуют, но никакая реализация RPC все же.)

проект Marc Gravell согласуется очень приятно с WCF, хотя - насколько я знаю, просто необходимо сказать ему (однажды) использовать буферы протокола для сериализации, и остальное прозрачно.

С точки зрения скорости, необходимо посмотреть страница сравнительного теста Marc Gravell. Мой код имеет тенденцию быть немного быстрее, чем его, но оба очень, намного быстрее, чем другие опции сериализации/десериализации в платформе. Нужно указать, что буферы протокола намного более ограничены также - они не пытаются сериализировать произвольные типы, только поддерживаемые. Мы собираемся попытаться поддерживать больше типов общих данных (десятичное число, DateTime и т.д.) портативным способом (как их собственные буферные сообщения протокола) в будущем.

37
ответ дан Jon Skeet 24 September 2019 в 06:59
поделиться

Некоторая производительность и метрики размера находятся на [1 112] эта страница . У меня нет статистики Jon на там в данный момент, просто потому что страница немного стара (Jon: мы должны зафиксировать это!).

Ре, являющееся прозрачным; protobuf-сеть может сцепиться в WCF по контракту; обратите внимание, что это играет приятно с MTOM по основному-http также. Это не работает с Silverlight, тем не менее, так как Silverlight испытывает недостаток в инжекционной точке. При использовании svcutil также необходимо добавить атрибут к классу (через частичный класс).

Ре BinaryFormatter (дистанционная работа); да, это имеет полный supprt; можно сделать это просто тривиальным ISerializable реализация (т.е. просто звонить Serializer метод с тем же args). Если Вы используете protogen для создания классов, то это может сделать это для Вас: можно включить это в командной строке через аргументы (она не включена по умолчанию, поскольку BinaryFormatter не работает над всеми платформами [CF, и т.д.]).

Примечание, что для очень маленьких объектов (единственные экземпляры, и т.д.) на локальной дистанционной работе (IPC), сырые данные BinaryFormatter производительность на самом деле лучше - но для нетривиальных графиков или удаленных каналов (сетевая дистанционная работа) protobuf-сеть может превзойти его по характеристикам вполне прилично.

я должен также отметить, что буферный формат провода протокола непосредственно не поддерживает наследование; protobuf-сеть может имитировать это (в то время как сдерживающая проводная совместимость), но как с XmlSerializer, необходимо объявить подклассы заранее.

<час>

, Почему там две версии?

радости открытого исходного кода, я предполагаю;-p Jon и я работали над совместными проектами прежде и обсудили слияние этих двух, но факт - то, что они предназначаются для двух различных сценариев:

  • (Jon's) dotnet-protobufs порт существующей версии Java. Это означает, что имеет очень знакомый API для кого-либо уже использование версии Java, и это основано на типичных конструкциях Java (классы разработчика, неизменные классы данных, и т.д.) - с несколькими скручиваниями C#.
  • protobuf-сеть (Marc's) является наземным переопределением после того же двоичного формата (действительно, критическое требование - то, что можно обменяться данными между различными форматами), но использование типичных идиом.NET:
    • изменяемые классы данных (никакие разработчики)
    • специфические особенности участника сериализации выражаются в атрибутах (сопоставимый с XmlSerializer, DataContractSerializer, и т.д.)

, Если Вы работаете над Java и клиентами.NET, Jon является, вероятно, хорошим выбором для знакомого API с обеих сторон. Если Вы - чистая.NET, protobuf-сеть имеет преимущества - знакомый API стиля.NET, но также и:

  • Вы не , вынудил быть контрактом сначала (хотя Вы можете, и генератор кода предоставляется)
  • , можно ли снова использовать существующие объекты (на самом деле, [DataContract] и [XmlType], классы могут часто использоваться без каких-либо изменений вообще)
  • , это имеет полную поддержку наследования (которого это достигает на проводе путем спуфинга инкапсуляции) (возможно уникальный для буферной реализации протокола? обратите внимание, что подклассы должны быть объявлены заранее)
  • , это старается изо всех сил включать и использовать базовые инструменты.NET (BinaryFormatter, XmlSerializer, WCF, DataContractSerializer) - разрешение его работать непосредственно механизмом дистанционной работы. Это, по-видимому, было бы вполне большим разделением от основной соединительной линии Java для порта Jon.

Ре, объединяющее их; я думаю, что мы оба были бы открыты для него, но кажется маловероятным, что Вы хотели бы оба набора функций, так как они предназначаются для таких различных требований.

37
ответ дан 4 revs, 2 users 98% 24 September 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: