Mailspring/internal_packages/composer
Evan Morikawa 3f6257c009 fix(composer): performance improvement in composer
Summary:
The issue was that on every key stroke the whole composer, participants
and all, were getting re-rendered. According to React.perf, the
`TokenizingTextField`s were taking a very long time to render and never
changing. This was fixed by adding a simple `shouldComponentUpdate` check.

The composer also has several regions that only change when the `props`
do. These are now cached. The cache reset when the `props` do.

After all of that, rendering the whole composer still takes 20-40ms. If
you're tying in the composer very quickly, text entry can approach that
render time. This starts to stack multiple React rendering passes up and
bogs the whole system down.

Luckily, we can simply render the composer less frequently. Now, after
changes are persisted to the `DraftStoreProxy`, we simply debounce the
proxy `trigger`. The users don't see this because the native
`contenteditable` field will update immediately. When the debounced proxy
trigger fires, it will transparently update the view to the latest state.

Test Plan: edgehill --test

Reviewers: bengotow

Reviewed By: bengotow

Subscribers: mg

Differential Revision: https://phab.nylas.com/D1749
2015-07-16 10:41:04 -04:00
..
keymaps fix(keymap): add ctrl-enter to send email 2015-06-12 17:47:59 -07:00
lib fix(composer): performance improvement in composer 2015-07-16 10:41:04 -04:00
spec fix(file-uploads): Smattering of bug fixes related to uploading & canceling uploads 2015-07-15 16:52:43 -07:00
stylesheets fix(drag-n-drop): Remove react-dnd, display dropzone, allow tokens to be dragged out of app as plaintext 2015-07-15 20:06:11 -07:00
.bowerrc fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
.gitignore fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
bower.json refactor(utils): switch to regular underscore 2015-05-19 16:06:59 -07:00
build.js fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
CHANGELOG.md fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
end.frag fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
package.json refactor(utils): switch to regular underscore 2015-05-19 16:06:59 -07:00
README.md fix(drafts): Rename files inbox-composer =>composer 2015-02-03 17:16:25 -08:00
start.frag fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00

composer package