mirror of
git://git.psyc.eu/libpsyc
synced 2024-08-15 03:19:02 +00:00
....
This commit is contained in:
parent
3023e2436c
commit
76ea6ea52e
3 changed files with 23 additions and 24 deletions
|
@ -1,7 +1,7 @@
|
||||||
#+TITLE: libpsyc Performance Benchmarks
|
#+TITLE: libpsyc Performance Benchmarks
|
||||||
|
|
||||||
In this document we present the results of performance benchmarks
|
In this document we present the results of performance benchmarks
|
||||||
of libpsyc compared with libjson-glib and libxml2.
|
of libpsyc compared to json-c, libjson-glib, rapidxml and libxml2.
|
||||||
|
|
||||||
* PSYC, JSON, XML Syntax Benchmarks
|
* PSYC, JSON, XML Syntax Benchmarks
|
||||||
First we look at the mere performance of the PSYC syntax
|
First we look at the mere performance of the PSYC syntax
|
||||||
|
@ -19,7 +19,7 @@ In JSON this could look like this:
|
||||||
|
|
||||||
#+INCLUDE: packets/user_profile.json src js
|
#+INCLUDE: packets/user_profile.json src js
|
||||||
|
|
||||||
Here's a way to model this in PSYC:
|
Here's a way to model this in PSYC (verbose mode):
|
||||||
|
|
||||||
#+INCLUDE: packets/user_profile.psyc src psyc
|
#+INCLUDE: packets/user_profile.psyc src psyc
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ Here's a way to model this in PSYC:
|
||||||
This message contains some characters which are
|
This message contains some characters which are
|
||||||
impractical to encode in JSON. We should probably
|
impractical to encode in JSON. We should probably
|
||||||
put a lot more inside to actually see an impact
|
put a lot more inside to actually see an impact
|
||||||
on performance.
|
on performance. *TODO*
|
||||||
|
|
||||||
#+INCLUDE: packets/json-unfriendly.xml src xml
|
#+INCLUDE: packets/json-unfriendly.xml src xml
|
||||||
#+INCLUDE: packets/json-unfriendly.json src js
|
#+INCLUDE: packets/json-unfriendly.json src js
|
||||||
|
@ -36,7 +36,7 @@ on performance.
|
||||||
** A message with XML-unfriendly characters
|
** A message with XML-unfriendly characters
|
||||||
Same test with characters which aren't practical
|
Same test with characters which aren't practical
|
||||||
in the XML syntax, yet we should put more of
|
in the XML syntax, yet we should put more of
|
||||||
them inside.
|
them inside. *TODO*
|
||||||
|
|
||||||
#+INCLUDE: packets/xml-unfriendly.xml src xml
|
#+INCLUDE: packets/xml-unfriendly.xml src xml
|
||||||
#+INCLUDE: packets/xml-unfriendly.json src js
|
#+INCLUDE: packets/xml-unfriendly.json src js
|
||||||
|
@ -65,8 +65,8 @@ for a photograph, 7000000 for a piece of music,
|
||||||
* PSYC vs XMPP Protocol Benchmarks
|
* PSYC vs XMPP Protocol Benchmarks
|
||||||
|
|
||||||
These tests use typical messages from the XMPP ("stanzas" in
|
These tests use typical messages from the XMPP ("stanzas" in
|
||||||
Jabber lingo) and compare them with equivalent JSON encodings,
|
Jabber lingo) and compare them with equivalent JSON encodings
|
||||||
verbose and compact PSYC formats.
|
and PSYC formats.
|
||||||
|
|
||||||
** A presence packet
|
** A presence packet
|
||||||
Since presence packets are by far the dominant messaging content
|
Since presence packets are by far the dominant messaging content
|
||||||
|
@ -79,13 +79,15 @@ And here's the same information in a JSON rendition:
|
||||||
|
|
||||||
#+INCLUDE: packets/presence.json src js
|
#+INCLUDE: packets/presence.json src js
|
||||||
|
|
||||||
Here's the equivalent PSYC packet in verbose form
|
Here's the equivalent PSYC packet in verbose mode
|
||||||
(since it is a multicast, the single recipients do not
|
(since it is a multicast, the single recipients do not
|
||||||
need to be mentioned):
|
need to be mentioned):
|
||||||
|
|
||||||
#+INCLUDE: packets/presence.psyc src psyc
|
#+INCLUDE: packets/presence.psyc src psyc
|
||||||
|
|
||||||
And the same in compact form:
|
And this is the same message in PSYC's compact form, but since compact mode
|
||||||
|
hasn't been implemented nor deployed yet, we will not include it
|
||||||
|
in the benchmarks:
|
||||||
|
|
||||||
#+BEGIN_SRC psyc
|
#+BEGIN_SRC psyc
|
||||||
:c psyc://example.com/~juliet
|
:c psyc://example.com/~juliet
|
||||||
|
@ -180,7 +182,7 @@ PSYC quickly figures out where the data starts and ends and passes such
|
||||||
information back to the application while the other formats are forced to
|
information back to the application while the other formats are forced to
|
||||||
generate a copy of the data in order to process possibly embedded special
|
generate a copy of the data in order to process possibly embedded special
|
||||||
character sequences. PSYC essentially operates like a binary data protocol
|
character sequences. PSYC essentially operates like a binary data protocol
|
||||||
even though it is actually still text-based.
|
even though it is actually text-based.
|
||||||
|
|
||||||
* Criticism
|
* Criticism
|
||||||
|
|
||||||
|
@ -188,22 +190,23 @@ Are we comparing apples and oranges? Yes and no, depends on what you
|
||||||
need. XML is a syntax best suited for complex structured data in
|
need. XML is a syntax best suited for complex structured data in
|
||||||
well-defined formats - especially good for text mark-up. JSON is a syntax
|
well-defined formats - especially good for text mark-up. JSON is a syntax
|
||||||
intended to hold arbitrarily structured data suitable for immediate
|
intended to hold arbitrarily structured data suitable for immediate
|
||||||
inclusion in javascript source codes. The PSYC syntax is an evolved
|
inclusion in Javascript source codes. The PSYC syntax is an evolved
|
||||||
derivate of RFC 822, the syntax used by HTTP and E-Mail, and is therefore
|
derivate of RFC 822, the syntax used by HTTP and E-Mail. It is currently
|
||||||
limited in the kind and depth of data structures that can be represented
|
limited in the kind and depth of data structures that can be represented
|
||||||
with it, but in exchange it is highly performant at doing just that.
|
with it, but it is highly efficient in exchange.
|
||||||
In fact we are looking into suitable syntax extensions to represent
|
|
||||||
|
In fact we are currently looking into suitable syntax extensions to represent
|
||||||
generic structures and semantic signatures, but for now PSYC only
|
generic structures and semantic signatures, but for now PSYC only
|
||||||
provides for simple typed values and lists of typed values.
|
provides for simple typed values and lists of typed values.
|
||||||
|
|
||||||
* Ease of implementation
|
* Ease of Implementation
|
||||||
|
|
||||||
Another aspect is the availability of these formats for spontaneous
|
Another aspect is the availability of these formats for spontaneous
|
||||||
use. You could generate and parse JSON yourself but you have to be
|
use. You could generate and parse JSON yourself but you have to be
|
||||||
careful about escaping. XML can be rendered manually if you know your
|
careful about escaping. XML can be rendered manually if you know your
|
||||||
data will not break the syntax, but you can't really parse it without
|
data will not break the syntax, but you shouldn't dare to parse it without
|
||||||
a bullet proof parser. PSYC is easy to render and parse yourself for
|
a bullet proof parser. PSYC is easy to render and parse yourself for
|
||||||
simple tasks, as long as your body does not contain "\n|\n" and your
|
simple tasks, as long as the body does not contain "\n|\n" and your
|
||||||
variables do not contain newlines.
|
variables do not contain newlines.
|
||||||
|
|
||||||
* Caveats
|
* Caveats
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
:_source psyc://example.com/~juliet
|
:_source psyc://example.com/~juliet
|
||||||
:_target psyc://example.net/~romeo
|
:_target xmpp:romeo@example.net
|
||||||
|
|
||||||
_message
|
_message
|
||||||
Art thou not Romeo, and a Montague?
|
Art thou not Romeo, and a Montague?
|
||||||
|
|
|
@ -1,8 +1,4 @@
|
||||||
<message
|
<message from='juliet@example.com/balcony' to='romeo@example.net'
|
||||||
from='juliet@example.com/balcony'
|
id='ktx72v49' type='chat'>
|
||||||
id='ktx72v49'
|
<body>Art thou not Romeo, and a Montague?</body>
|
||||||
to='romeo@example.net'
|
|
||||||
type='chat'
|
|
||||||
xml:lang='en'>
|
|
||||||
<body>Art thou not Romeo, and a Montague?</body>
|
|
||||||
</message>
|
</message>
|
||||||
|
|
Loading…
Reference in a new issue