Summary:
This diff is designed to dramatically speed up new window load time for
all window types and reduce memory consumption of our hot windows.
Before this diff, windows loaded in ~3 seconds. They now boot in a couple
hundred milliseconds without requiring to keep hot windows around for
each and every type of popout window we want to load quickly.
One of the largest bottlenecks was the `require`ing and initializing of
everything in `NylasExports`.
I changed `NylasExports` to be entirely lazily-loaded. Drafts and tasks
now register their constructors with a `StoreRegistry` and the
`TaskRegistry`. This lets us explicitly choose a time to activate these
stores in the window initalization instead of whenever nylas-exports
happens to be required first.
Before, NylasExports was required first when components were first
rendering. This made initial render extremely slow and made the proposed
time picker popout slow.
By moving require into the very initial window boot, we can create a new
scheme of hot windows that are "half loaded". All of the expensive
require-ing and store initialization is done. All we need to do is
activate the packages for just the one window.
This means that the hot window scheme needs to fundamentally change from
have fully pre-loaded windows, to having half-loaded empty hot windows
that can get their window props overridden again.
This led to a major refactor of the WindowManager to support this new
window scheme.
Along the way the API of WindowManager was significantly simplifed.
Instead of a bunch of special-cased windows, there are now consistent
interfaces to get and `ensure` windows are created and displayed. This
DRYed up a lot of repeated logic around showing or creating core windows.
This also allowed the consolidation of the core window configurations into
one place for much easier reasoning about what's getting booted up.
When a hot window goes "live" and gets populated, we simply change the
`windowType`. This now re-triggers the loading of all of the packages for
the window. All of the loading time is now just for the packages that
window requires since core Nylas is there thanks to the hot window
mechanism.
Unfortunately loading all of the packages for the composer was still
unnaceptably slow. The major issue was that all of the composer plugins
were taking a long time to process and initialize. The solution was to
have the main composer load first, then trigger another window load
settings change to change the `windowType` that loads in all of the
plugins.
Another major bottleneck was the `RetinaImg` name lookup on disk. This
requires traversing the entire static folder synchronously on boot. This
is now done once when the main window loads and saved in a cache in the
browser process. Any secondary windows simply ask the backend for this
cache and save the filesystem access time.
The Paper Doc below is the current set of manual tests I'm doing to make
sure no window interactions (there are a lot of them!) regressed.
Test Plan: https://paper.dropbox.com/doc/Window-Refactor-UYsgvjgdXgVlTw8nXTr9h
Reviewers: juan, bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D2916
commit 64938016f6ffbf366a220e7abd9af6f7a4cb478b
Author: Ben Gotow <bengotow@gmail.com>
Date: Sun Oct 4 16:42:38 2015 -0700
Don't allow people to double click the token check button, make requests take at least 400msec
commit e548f3ee449c676a813c5630f1624963872ed6e6
Merge: 3350b91 e4b4933
Author: Ben Gotow <bengotow@gmail.com>
Date: Sun Oct 4 16:39:56 2015 -0700
Merge branch 'token-auth' of github.com:nylas/N1 into token-auth
# Conflicts:
# internal_packages/onboarding/lib/token-auth-page.cjsx
commit 3350b917449c29299fa078d59a4a5a9339fdf29b
Author: Ben Gotow <bengotow@gmail.com>
Date: Sun Oct 4 16:38:52 2015 -0700
Improve a few error states, adding "checking" state when checking token
commit e4b49334cbf59145d9bdd955d35636f16a7c4924
Author: EthanBlackburn <ethan@nylas.com>
Date: Sun Oct 4 16:21:39 2015 -0700
Correct retry behavior
commit 11cd9a75b2a1ca0f4347160df93815743909ccea
Author: EthanBlackburn <ethan@nylas.com>
Date: Sat Oct 3 18:06:55 2015 -0700
Removed old auth token variable
commit afe451cd70de528def3443d8b373fd24f4aa5cde
Author: EthanBlackburn <ethan@nylas.com>
Date: Sat Oct 3 16:08:12 2015 -0700
Added token auth page
Summary:
Now with more CSS
Also fixed flow for when you're just adding an account
Fixes T3805
Test Plan: manual :(
Reviewers: drew, bengotow
Reviewed By: bengotow
Maniphest Tasks: T3805
Differential Revision: https://phab.nylas.com/D2071
Summary:
Better error handling in the account settings page and a loading spinner
Add Account... replaces "Link External Account", and it works
Clean dead code from onboarding pages, remove base class component
Always show the account switcher
rm dead EdgehillAPI code, AccountStore now manages accounts and credentials in config, not in database
Fix specs
Test Plan: Run tests
Reviewers: dillon, evan
Reviewed By: evan
Projects: #edgehill
Differential Revision: https://phab.nylas.com/D2059
Summary:
Remove logout menu item and buttons, turn Link External Account to Add Account
Onboarding window starts hidden, is shown when react component is mounted and sized
Use get/setBounds to animate position and size at the same time smoothly
Fix specs, change 401 notice
Delay bouncing to Gmail to show users the Gmail screen momentarily
Make the animated resizing code defer so it doesn't run in a hard loop, and other animations can run at the same time
Bring back crossfade between screens, remove left/right shift on welcome screens
Test Plan: Run tests
Reviewers: drew, evan
Reviewed By: evan
Maniphest Tasks: T3529
Differential Revision: https://phab.nylas.com/D2054
Summary:
Depends on D2049
This change replaces the onboarding flow to include new graphics, copy, and
support for the new Nylas auth flow. New account choosing UI presents a list
of account types, rather than guessing based on an entered email. Pages before
and after introduce the user to different features of the client.
Known issue: Polling for gmail account connection works, but continues even if
you leave the page.
Test Plan: Manual testing.
Reviewers: evan
Reviewed By: evan
Differential Revision: https://phab.nylas.com/D2050
Summary:
Add spinner and refactor container view to be router
add `NylasStore` as a global importable. specs for APIEnv
login page fixes
add old fixes to container view
finish extracting pages
fix onboarding flow
Test Plan: edgehill --test
Reviewers: bengotow
Reviewed By: bengotow
Differential Revision: https://phab.nylas.com/D1652