💌 A beautiful, fast and fully open source mail client for Mac, Windows and Linux.
Go to file
Evan Morikawa 652eaeff2a 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
apm feat(logging): Developer bar, verbose logging to logstash, Electron 0.26.0 2015-05-19 17:02:46 -07:00
arclib fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
build updater(*): Send current platform in update check, publish to S3 in /darwin/ folder 2015-06-30 11:03:24 -07:00
docs-atom fix(asar): Support ASAR, and running of specs in prod builds 2015-05-21 14:41:30 -07:00
docs-templates Move guides from Edgehill repo to Redwood and only generate docs from classes 2015-06-02 16:24:56 -07:00
dot-nylas feat(update): autoupdater adds an updateLevel param 2015-06-11 12:23:31 -07:00
exports feat(quoted-text): New quoted text engine 2015-07-08 09:51:33 -07:00
internal_packages fix(composer): performance improvement in composer 2015-07-16 10:41:04 -04:00
keymaps Add (s) hotkey for starring in both thread-list and message-list views 2015-06-26 14:06:31 -07:00
menus fix(getting-started): New menu item, sample package for devs 2015-07-06 14:23:51 -04:00
resources fix(asar): Support ASAR, and running of specs in prod builds 2015-05-21 14:41:30 -07:00
script Separate notifications if less than five 2015-07-15 13:18:10 -07:00
spec feat(offline-mode, undo-redo): Tasks handle network errors better and retry, undo/redo based on tasks 2015-07-07 13:38:53 -04:00
spec-nylas fix(file-uploads): Smattering of bug fixes related to uploading & canceling uploads 2015-07-15 16:52:43 -07:00
src fix(composer): performance improvement in composer 2015-07-16 10:41:04 -04:00
static 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
vendor fix(windows): Minor changes to support windows 2015-06-26 10:50:19 -07:00
.arcconfig Separate notifications if less than five 2015-07-15 13:18:10 -07:00
.arclint Separate notifications if less than five 2015-07-15 13:18:10 -07:00
.gitattributes fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
.gitignore add(specs): Empty folders and node_modules in spec fixture to fix specs 2015-06-03 10:23:54 -07:00
.gitmodules fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
.node-version fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
.npmrc fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
.pairs fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
.python-version fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
atom.sh refactor(code): replace all instances of atom-shell and AtomShell and atomShell 2015-05-20 10:20:10 -07:00
coffeelint.json feat(docs): New docs tasks and React 0.13.2 2015-04-24 11:33:10 -07:00
CONTRIBUTING.md fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
Dockerfile fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
LICENSE.md fix(drafts): Various improvements and fixes to drafts, draft state management 2015-02-03 16:24:31 -08:00
package.json bump(version): 0.1.10 2015-07-15 20:08:19 -07:00
README.md fix(readme): Rip out Atom readme, replace with our own minimal one 2015-04-30 16:24:09 -07:00

Nylas Mail is a hackable platform for your personal data, built on Electron and the Nylas Platform APIs.

Building Nylas Mail

Extending Nylas Mail

It's easy to extend Nylas Mail using your favorite web technologies. Check out the Nylas Package API to get started, and the API reference for information about specific classes.