slow rendering of some HTML mail threads in emacs/notmuch due to shr.

John Steele Scott toojays at toojays.net
Fri Apr 19 19:59:51 PDT 2013


I've been enjoying using notmuch in emacs to handle my email, but some threads take aaaages to render. I'm talking three minutes for a thread with 15 messages. I'm not sure what it is in particular about this thread. Some combination of Outlook generated HTML and much repeated top-posting perhaps. I have observed similar slowness for threads of HTML mails produced by the ReviewBoard code review system.

For this particular Outlook thread, I used elp-instrument package to instrument shr before showing the thread. The most time was spent in these functions:

shr-descend                          11783       196.09731454  0.0166423928
shr-generic                          11681       190.86248305  0.0163395670
shr-tag-blockquote                   81          57.140909005  0.7054433210
shr-tag-div                          348         48.511533571  0.1394009585
shr-insert-document                  14          27.808360994  1.9863114995
shr-tag-body                         14          27.158463401  1.9398902429
shr-tag-p                            4121        23.766379281  0.0057671388
shr-insert                           8962        21.705253155  0.0024219206
shr-colorize-region                  1075        2.6348254729  0.0024510004
shr-put-color                        2135        2.4779991750  0.0011606553
shr-indent                           13246       1.5816357290  0.0001194047
shr-expand-newlines                  1075        1.4488115139  0.0013477316
shr-find-fill-point                  5281        0.9872837309  0.0001869501
shr-tag-br                           4162        0.9527550159  0.0002289175
shr-transform-dom                    11123       0.6487086020  5.832...e-05
shr-remove-trailing-whitespace       14          0.5503726889  0.0393123349
shr-ensure-paragraph                 8412        0.5039738979  5.991...e-05
shr-buffer-width                     1075        0.4900505680  0.0004558609
shr-tag-b                            381         0.17374644    0.0004560274
shr-fontize-cont                     381         0.172155226   0.0004518509
shr-tag-table                        8           0.154814786   0.0193518482

If I change mm-text-html-renderer to gnus-w3m instead of shr, notmuch-show renders this thread in the region of 3-7s, which still feels quite slow, but is an immense improvement. Setting it to lynx gives rendering times in the 2-3s ballpark, but it doesn't do bold/italic formatting, and some characters such are being rendered as escape sequences (e.g. ‘ shows up as \342\200\230). So I'll probably stick with gnus-w3m to get (barely) tolerable performance with decent rendering.

Just putting this out there to maybe help the next person who gets annoyed by this slowness.

Cheers,

John



More information about the notmuch mailing list