Subject: Re: bug#46761: 28.0.50; Speed up json.el encoding

From: Dmitry Gutov <[email-masked]>
Date: Sat, 27 Feb 2021 20:51:05 +0200

On 25.02.2021 03:33, Basil L. Contovounesios wrote:
> Severity: wishlist
> Tags: patch
> 
> The attached patch speeds up json-encode by inserting into a buffer
> rather than concatenating strings.  It does so backward compatibly by
> creating a new json--print-* namespace that mirrors the existing
> json-encode-* namespace, cleaning it up a bit and reducing code
> duplication in the process.
> 
> Using my usual benchmark from bug#40693#89:
> 
>    canada.json
>    old (1.412693239 96 0.736882091)
>    new (1.154423962 32 0.248241551)
> 
>    citm_catalog.json
>    old (0.676292855 68 0.5285956769999993)
>    new (0.306573098 12 0.0965493740000003)
> 
>    twitter.json
>    old (0.353447016 40 0.28536439900000055)
>    new (0.142140227  8 0.05943713899999992)
> 
> Note that one of the unit tests depends on the patch to map.el in
> bug#46754 in order to pass.

Looking good.

I'm guessing there is an approximate size where structures smaller than 
that size will get slower to encode because of this change (creating a 
temp buffer and switching to it are not entirely free), but I can't 
think of a use case where this would matter.