From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dmitry Gutov Newsgroups: gmane.emacs.bugs Subject: bug#20154: 25.0.50; json-encode-string is too slow for large strings Date: Fri, 20 Mar 2015 17:20:25 +0200 Message-ID: <550C3AB9.7020403@yandex.ru> References: <86twxf68zk.fsf@yandex.ru> <83384zwxdx.fsf@gnu.org> <550C3218.4000903@yandex.ru> <831tkjww0y.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1426864901 1711 80.91.229.3 (20 Mar 2015 15:21:41 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 20 Mar 2015 15:21:41 +0000 (UTC) Cc: 20154@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri Mar 20 16:21:32 2015 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1YYyjq-0000GC-Mr for geb-bug-gnu-emacs@m.gmane.org; Fri, 20 Mar 2015 16:21:30 +0100 Original-Received: from localhost ([::1]:44360 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YYyjq-0004w5-1I for geb-bug-gnu-emacs@m.gmane.org; Fri, 20 Mar 2015 11:21:30 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:53333) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YYyjS-0004DC-Rq for bug-gnu-emacs@gnu.org; Fri, 20 Mar 2015 11:21:08 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YYyjO-0002LV-Km for bug-gnu-emacs@gnu.org; Fri, 20 Mar 2015 11:21:06 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:41258) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YYyjO-0002LO-I2 for bug-gnu-emacs@gnu.org; Fri, 20 Mar 2015 11:21:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1YYyjO-00009Q-2V for bug-gnu-emacs@gnu.org; Fri, 20 Mar 2015 11:21:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 20 Mar 2015 15:21:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 20154 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 20154-submit@debbugs.gnu.org id=B20154.1426864837536 (code B ref 20154); Fri, 20 Mar 2015 15:21:02 +0000 Original-Received: (at 20154) by debbugs.gnu.org; 20 Mar 2015 15:20:37 +0000 Original-Received: from localhost ([127.0.0.1]:59267 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YYyiy-00008a-Tv for submit@debbugs.gnu.org; Fri, 20 Mar 2015 11:20:37 -0400 Original-Received: from mail-we0-f181.google.com ([74.125.82.181]:34911) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YYyiw-00008M-If for 20154@debbugs.gnu.org; Fri, 20 Mar 2015 11:20:35 -0400 Original-Received: by webcq43 with SMTP id cq43so84757348web.2 for <20154@debbugs.gnu.org>; Fri, 20 Mar 2015 08:20:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=E3ln7TD5kQRyJHAIDGHJwlJrKsdyh0zWWtIJocg7IHs=; b=WyJ6Z/TRTnAdF6taVQLEqdYjOJt2nOviv7FWWzBqj6/90fBUAnn0XDd3LMLJEjWTSb AN87fuNnuklOEhq574NVBJrK5py9cvJQiEAAz70dwrApu7lBjk+g8SLryYQP7qQChh/n ZcgsbOBjeavmP3cg1aE+ewpz8t51UDnUHnGpB/tktif9jIVE2KSWcCv8wScjx3oToh42 8e13zi7kIbeuLpXHBU+ADG6b1LzeXPMUWbNlebbr6e8F3kh/epz5a34hSK4Gn+JK3bpt FW1EnOeGuRCkH9F+KPBXn8QM7Y6pJ103Fq5uhzAQipAQjOSjZtyQVnuCmwnXTlsNYCEB HVDw== X-Received: by 10.180.80.7 with SMTP id n7mr19558890wix.60.1426864829006; Fri, 20 Mar 2015 08:20:29 -0700 (PDT) Original-Received: from [192.168.1.3] ([82.102.93.54]) by mx.google.com with ESMTPSA id n1sm3440156wib.11.2015.03.20.08.20.27 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 20 Mar 2015 08:20:28 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:36.0) Gecko/20100101 Thunderbird/36.0 In-Reply-To: <831tkjww0y.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:100703 Archived-At: On 03/20/2015 05:03 PM, Eli Zaretskii wrote: > Yes, I could. What's your point, though? That if asking the question takes the same time as doing the profiling yourself, the latter would be more efficient. I don't really mind, just puzzled. > json-encode-char and mapconcat take most of the time, so it seems. So it does. But here's an alternative implementation I tried: (defun json-encode-big-string (str) (with-temp-buffer (insert str) (goto-char (point-min)) (while (re-search-forward "[\"\\/\b\f\b\r\t]\\|[^ -~]" nil t) (replace-match (json-encode-char (char-after (match-beginning 0))) t t)) (format "\"%s\"" (buffer-string)))) It takes 0.15s here, which is still too long. Here's its profile. CPU: - command-execute 1245 95% - call-interactively 1245 95% - funcall-interactively 1184 90% - eval-last-sexp 1140 87% - elisp--eval-last-sexp 1140 87% - eval 1140 87% - length 1140 87% - json-encode-big-string 1140 87% - let 1140 87% - save-current-buffer 1140 87% - unwind-protect 1136 87% - progn 1136 87% - while 980 75% - replace-match 332 25% - json-encode-char 212 16% char-after 4 0% format 4 0% + execute-extended-command 37 2% + previous-line 7 0% + byte-code 61 4% + ... 57 4% Memory: - command-execute 76,018,070 100% - call-interactively 76,018,070 100% - funcall-interactively 76,005,728 99% - eval-last-sexp 69,257,352 91% - elisp--eval-last-sexp 69,257,352 91% - eval 69,242,772 91% - length 69,242,772 91% - json-encode-big-string 69,242,772 91% - let 69,242,772 91% - save-current-buffer 69,234,412 91% - unwind-protect 69,040,810 90% - progn 69,033,546 90% - while 55,201,778 72% - replace-match 17,829,052 23% json-encode-char 10,471,476 13% format 2,640,256 3% generate-new-buffer 8,360 0% elisp--eval-last-sexp-print-value 12,532 0% + elisp--preceding-sexp 2,048 0% - execute-extended-command 6,748,360 8% - command-execute 6,685,480 8% - call-interactively 6,685,480 8% - funcall-interactively 6,685,464 8% + profiler-report 6,681,851 8% + profiler-start 3,613 0% + sit-for 3,320 0% + previous-line 16 0% + byte-code 12,342 0% ... 0 0%