Subject: bug#20154: 25.0.50; json-encode-string is too slow for large strings

From: Eli Zaretskii <[email-masked]>
Date: Sun, 22 Mar 2015 18:50:05 +0200

> Date: Sun, 22 Mar 2015 16:52:03 +0200
> From: Dmitry Gutov <[email-masked]>
> CC: [email-masked]
> 
> (defun json-encode-string-3 (string)
>    "Return a JSON representation of STRING."
>    ;; Reimplement the meat of `replace-regexp-in-string', for
>    ;; performance (bug#20154).
>    (let ((l (length string))
>          (start 0)
>          (res (list "\"")))
>      ;; Skip over ASCIIish printable characters.
>      (while (string-match "[\"\\/\b\f\n\r\t]\\|[^ -~]" string start)
>        (let* ((mb (match-beginning 0))
>               (c (aref string mb))
>               (special (rassoc c json-special-chars)))

Did you try a 'cond' with specific characters instead of calling
rassoc every time?  The list in json-special-chars is not long, is it?