Skip to content

Why? #1

@nelsonic

Description

@nelsonic

The Delta format https://quilljs.com/docs/delta is quite verbose:

const delta = new Delta([
  { insert: 'Gandalf', attributes: { bold: true } },
  { insert: ' the ' },
  { insert: 'Grey', attributes: { color: '#ccc' } }
]);

image

From the Developer perspective, having a verbose format makes perfect sense because it's easy to understand at a glance what is going on. Given that computers are more than fast enough to process this verbose format, it won't affect the performance of any app using the Delta format.

Where we feel there is scope for improvement is in:
a) data transmission i.e. saving bandwidth for people who don't have a lot of it
b) saving complete history of changes so that they can be replayed

We can minify this to:

const delta = new Delta([
  { i: 'Gandalf', a: { b: true } },
  { i: ' the ' },
  { i: 'Grey', a: { c: '#ccc' } }
]);

image

(157 - 117 / 157) = 25% bandwidth saving.
It might not feel like much of a saving in this trivial example, but if you scale it up to entire documents and thousands (millions?) of concurrent people using a collaborative editor,
a 25% saving on a $10k/month bandwidth bill is $30k/year! Saving bandwidth is the right thing to do for the World! Obviously this is micro-bandwidth saving is meaningless in a world where Google Stadia is server-rendering and streaming 4K games in realtime ... 🤦 But we can only try to set a good example to follow.

Todo

  • List all the keywords in the Delta format e.g: insert, retain, text, attributes, etc.
  • Define short versions for all the keywords e.g: i, r, t, a
    • Make the minified keywords as short as possible (that's the whole point of this project!)
    • wherever there is a keyword that starts with the same character, give priority to the keyword that appears most frequently in the format.
      e.g: insert is used more often than import so insert > i and import > im
  • Create a function for converting the minified version back to the "full fat" version of Delta before passing it to a consuming library.
  • Publish NPM Package: https://www.npmjs.com/package/deltamin so we can use it!
    image

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or enhancement of existing functionalitygood first issueGood for newcomershelp wantedIf you can help make progress with this issue, please comment!

    Type

    No type

    Projects

    Status

    ✅ Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions