TaskMuncher Performance
by John Vincent
Posted on November 4, 2018
Let's discuss TaskMuncher performance after the upgrade to Webpack 4, Babel 7 and Material-UI 3
TaskMuncher V2 Performance
For extensive discussions regarding TaskMuncher, please see TaskMuncher Overview
For discussion regarding TaskMuncher V2 development work, see Update TaskMuncher to Webpack v4, Babel v7, Material-UI v3
Also helpful is Optimizing TaskMuncher
TaskMuncher V2 Testing
Chrome, initial load
- Home page = 1 sec
- Login < 0.25 sec
- Calendar < 0.1 sec
Chrome, subsequent invocations are instantaneous as files are retrieved from browser cache.
Mobile, initial load
- Home page = 1-2 secs
- Login = 1-2 secs
- Calendar = 1 sec
Mobile, subsequent invocations are instantaneous.
TaskMuncher V2 Validation
TaskMuncher V1 Website Validation
Lighthouse
TaskMuncher V2
94: Performance
62: Progressive Web App
92: Accessibility
100: Best Practices
100: SEO
TaskMuncher V1
21: Performance
35: Progressive Web App
92: Accessibility
100: Best Practices
100: SEO
There is clearly a huge improvement in the performance of TaskMuncher V2.
TaskMuncher V1
TaskMuncher V1 was based on webpack 3. The production build yielded
main.bundle.css 568 bytes 0 [emitted] main
./index.html 3.64 kB [emitted]
bundle.js 16.1 MB 0 [emitted] [big] main
From a browser, the home page www.taskmuncher.com
showed these files being retrieved
main.bundle.css 568 bytes
download size 557 bytes
bundle.js 16.1 MB
download size 3.8MB
The files downloaded are much smaller than the files built by webpack. This is due to Nginx gzipping the files prior to download. For details, see Configure HTTPS Nginx
Problems
bundle.js
is huge (3.8MB). Requires code splitting.- not practical over a mobile phone network. In effect, TaskMuncher V1 was not a practical mobile application.
bundle.js
contains application and vendor code.- vendor code is huge and will change infrequently.
- application code changes frequently and will require a complete download.
- browsers may not get the latest version
bundle.js
. Requires cache busting.
The solution to these problems is to use code splitting and cache busting from webpack 4.
TaskMuncher V2
TaskMuncher V2 was based on webpack 4. The production build yielded
index.html 4.34 KiB [emitted]
assets/icons.svg 35 KiB [emitted]
1.517e739f69feee06f636.css 575 bytes 1 [emitted] main
main.aaaecfc7d23a48393dab.bundle.js 46.8 KiB 1 [emitted] main
2.f116dd20719ffd3e2155.bundle.js 106 KiB 2 [emitted]
3.d09078d544e366ed7cca.bundle.js 226 KiB 3 [emitted]
4.1b29a07a15585ced160e.bundle.js 26.2 KiB 4 [emitted]
vendor.348028e469699b4c4e1b.bundle.js 315 KiB 5 [emitted] [big] vendor
6.a6bdfe9669738b9b5d7f.bundle.js 762 KiB 6 [emitted] [big]
7.ed6c0809ef4814f13341.bundle.js 257 KiB 7 [emitted] [big]
manifest.87a618c1f83c717e6bdd.bundle.js 4.4 KiB 8 [emitted] manifest
0.66b1ba767846fb68f215.bundle.js.map 450 bytes 0 [emitted]
1.517e739f69feee06f636.css.map 832 bytes 1 [emitted] main
main.aaaecfc7d23a48393dab.bundle.js.map 154 bytes 1 [emitted] main
2.f116dd20719ffd3e2155.bundle.js.map 163 bytes 2 [emitted]
3.d09078d544e366ed7cca.bundle.js.map 153 bytes 3 [emitted]
4.1b29a07a15585ced160e.bundle.js.map 159 bytes 4 [emitted]
vendor.348028e469699b4c4e1b.bundle.js.map 630 bytes 5 [emitted] vendor
6.a6bdfe9669738b9b5d7f.bundle.js.map 442 bytes 6 [emitted]
7.ed6c0809ef4814f13341.bundle.js.map 154 bytes 7 [emitted]
manifest.87a618c1f83c717e6bdd.bundle.js.map 139 bytes 8 [emitted] manifest
0.66b1ba767846fb68f215.bundle.js 430 KiB 0 [emitted] [big]
images/john-vincent.jpg 22.7 KiB [emitted]
images/taskmuncher.png 71.2 KiB [emitted]
images/home.jpg 112 KiB [emitted]
sitemap.xml 1.03 KiB [emitted]
google9104b904281bf3a3.html 53 bytes [emitted]
robots.txt 63 bytes [emitted]
android-chrome-192x192.png 3.19 KiB [emitted]
android-chrome-512x512.png 7.69 KiB [emitted]
apple-touch-icon.png 3.11 KiB [emitted]
browserconfig.xml 246 bytes [emitted]
favicon-16x16.png 866 bytes [emitted]
favicon-32x32.png 1.25 KiB [emitted]
favicon.ico 14.7 KiB [emitted]
mstile-144x144.png 3.19 KiB [emitted]
mstile-150x150.png 3.21 KiB [emitted]
mstile-310x150.png 3.34 KiB [emitted]
mstile-310x310.png 5.63 KiB [emitted]
mstile-70x70.png 2.45 KiB [emitted]
safari-pinned-tab.svg 3.13 KiB [emitted]
site.webmanifest 505 bytes [emitted]
Entrypoint main [big] = manifest.87a618c1f83c717e6bdd.bundle.js manifest.87a618c1f83c717e6bdd.bundle.js.map vendor.348028e469699b4c4e1b.bundle.js vendor.348028e469699b4c4e1b.bundle.js.map 1.517e739f69feee06f636.css main.aaaecfc7d23a48393dab.bundle.js 1.517e739f69feee06f636.css.map main.aaaecfc7d23a48393dab.bundle.js.map
WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).
This can impact web performance.
Assets:
0.66b1ba767846fb68f215.bundle.js (430 KiB)
vendor.348028e469699b4c4e1b.bundle.js (315 KiB)
6.a6bdfe9669738b9b5d7f.bundle.js (762 KiB)
7.ed6c0809ef4814f13341.bundle.js (257 KiB)
WARNING in entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance.
Entrypoints:
main (367 KiB)
manifest.87a618c1f83c717e6bdd.bundle.js
vendor.348028e469699b4c4e1b.bundle.js
1.517e739f69feee06f636.css
main.aaaecfc7d23a48393dab.bundle.js
TaskMuncher V2 Testing
From a browser, the home page www.taskmuncher.com
showed these files being retrieved
1.517e739f69feee06f636.css 575 bytes
download size=485B
main.aaaecfc7d23a48393dab.bundle.js 46.8 KiB
download size=7.9kb
vendor.348028e469699b4c4e1b.bundle.js 315 KiB
download size=78.7kb
manifest.87a618c1f83c717e6bdd.bundle.js 4.4 KiB
download size=1.8kb
0.66b1ba767846fb68f215.bundle.js 430 KiB
download size=84.7kb
2.f116dd20719ffd3e2155.bundle.js 106 KiB
download size=18.3kb
which is a vast improvement from TaskMuncher V1.
From a browser, the member section showed these files being retrieved
6.a6bdfe9669738b9b5d7f.bundle.js 762 KiB
download size=184kb
3.d09078d544e366ed7cca.bundle.js 226 KiB
download size=30.5kb
From a browser, the calendar section showed these files being retrieved
7.ed6c0809ef4814f13341.bundle.js 257Kib
download size=51.7kb
4.1b29a07a15585ced160e.bundle.js 26.2 KiB
download size=5.4kb
Note the files downloaded are much smaller than the files built by webpack. This is due to Nginx gzipping the files prior to download. For details, see Configure HTTPS Nginx
This is clearly vastly superior to TaskMuncher V1.
TaskMuncher V2 Caching
Verified that bundles are retrieved from cache.
Altered HomeMain.jsx
. Verify build and caching.
index.html 4.34 KiB [emitted]
1.517e739f69feee06f636.css 575 bytes 1 [emitted] main
main.aaaecfc7d23a48393dab.bundle.js 46.8 KiB 1 [emitted] main
2.fdcb27244d44b2f4774e.bundle.js 106 KiB 2 [emitted]
3.d09078d544e366ed7cca.bundle.js 226 KiB 3 [emitted]
4.1b29a07a15585ced160e.bundle.js 26.2 KiB 4 [emitted]
vendor.348028e469699b4c4e1b.bundle.js 315 KiB 5 [emitted] [big] vendor
6.a6bdfe9669738b9b5d7f.bundle.js 762 KiB 6 [emitted] [big]
7.ed6c0809ef4814f13341.bundle.js 257 KiB 7 [emitted] [big]
manifest.9f2630ebad2f2d63e667.bundle.js 4.4 KiB 8 [emitted] manifest
0.66b1ba767846fb68f215.bundle.js 430 KiB 0 [emitted] [big]
Entrypoint main [big] = manifest.9f2630ebad2f2d63e667.bundle.js manifest.9f2630ebad2f2d63e667.bundle.js.map vendor.348028e469699b4c4e1b.bundle.js vendor.348028e469699b4c4e1b.bundle.js.map 1.517e739f69feee06f636.css main.aaaecfc7d23a48393dab.bundle.js 1.517e739f69feee06f636.css.map main.aaaecfc7d23a48393dab.bundle.js.map
WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).
This can impact web performance.
Assets:
0.66b1ba767846fb68f215.bundle.js (430 KiB)
vendor.348028e469699b4c4e1b.bundle.js (315 KiB)
6.a6bdfe9669738b9b5d7f.bundle.js (762 KiB)
7.ed6c0809ef4814f13341.bundle.js (257 KiB)
WARNING in entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance.
Entrypoints:
main (367 KiB)
manifest.9f2630ebad2f2d63e667.bundle.js
vendor.348028e469699b4c4e1b.bundle.js
1.517e739f69feee06f636.css
main.aaaecfc7d23a48393dab.bundle.js
manifest has changed from manifest.87a618c1f83c717e6bdd.bundle.js
to manifest.9f2630ebad2f2d63e667.bundle.js
2 has changed from 2.f116dd20719ffd3e2155.bundle.js
to 2.fdcb27244d44b2f4774e.bundle.js
Tested in the browser. Both of these files are retrieved from the server. The remainder are retrieved from browser cache.
Changed routes/index.jsx
This component is used throughout the application.
index.html 4.34 KiB [emitted]
1.517e739f69feee06f636.css 575 bytes 1 [emitted] main
main.2a40244bff43ecd10b7f.bundle.js 46.5 KiB 1 [emitted] main
2.f116dd20719ffd3e2155.bundle.js 106 KiB 2 [emitted]
3.d09078d544e366ed7cca.bundle.js 226 KiB 3 [emitted]
4.1b29a07a15585ced160e.bundle.js 26.2 KiB 4 [emitted]
vendor.348028e469699b4c4e1b.bundle.js 315 KiB 5 [emitted] [big] vendor
6.a6bdfe9669738b9b5d7f.bundle.js 762 KiB 6 [emitted] [big]
7.ed6c0809ef4814f13341.bundle.js 257 KiB 7 [emitted] [big]
manifest.87a618c1f83c717e6bdd.bundle.js 4.4 KiB 8 [emitted] manifest
0.66b1ba767846fb68f215.bundle.js 430 KiB 0 [emitted] [big]
Entrypoint main [big] = manifest.87a618c1f83c717e6bdd.bundle.js manifest.87a618c1f83c717e6bdd.bundle.js.map vendor.348028e469699b4c4e1b.bundle.js vendor.348028e469699b4c4e1b.bundle.js.map 1.517e739f69feee06f636.css main.2a40244bff43ecd10b7f.bundle.js 1.517e739f69feee06f636.css.map main.2a40244bff43ecd10b7f.bundle.js.map
WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).
This can impact web performance.
Assets:
0.66b1ba767846fb68f215.bundle.js (430 KiB)
vendor.348028e469699b4c4e1b.bundle.js (315 KiB)
6.a6bdfe9669738b9b5d7f.bundle.js (762 KiB)
7.ed6c0809ef4814f13341.bundle.js (257 KiB)
WARNING in entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance.
Entrypoints:
main (367 KiB)
manifest.87a618c1f83c717e6bdd.bundle.js
vendor.348028e469699b4c4e1b.bundle.js
1.517e739f69feee06f636.css
main.2a40244bff43ecd10b7f.bundle.js
Files main and manifest changed.
Tested in the browser. Both of these files are retrieved from the server. The remainder were retrieved from browser cache.
React
- Basic React
- Basic React Patterns
- Basic React Redux
- Basic React Redux App
- Basic React Testing with Jest and Enzyme
- Building and deploying MyTunes to johnvincent.io
- Building and deploying React Github Helper App to johnvincent.io
- Deploy React App to Heroku using Travis Continuous Integration
- Deploy TaskMuncher React App to AWS
- First time deploy TaskMuncher React App to Digital Ocean
- Gatsby and Client Only Components
- Gatsby Getting Started
- Gatsby React Icons
- Mac Visual Studio Code
- Material-UI
- Material-UI Pickers
- Material-UI Styling
- Optimizing TaskMuncher with Webpack 4
- Overview of React Gomoku
- Overview of React Hangman
- Overview of React Lights Out
- Overview of React Yahtzee
- React Material-UI
- React Production Issues
- React PropTypes
- React/Redux Node/Express Ecosystem
- Redux Dev Tools
- Responsive Material-UI
- Styling Material-UI components using Styled-Components
- TaskMuncher Performance
- Transforming Html with Webpack
- Update TaskMuncher for Lighthouse Findings
- Update TaskMuncher to be a Progressive Web App
- Update TaskMuncher to use React BrowserRouter
- Update TaskMuncher to Webpack v4, Babel v7, Material-UI v3
- Upgrading Babel and ESLint to use React Advanced Language Features
- Webpack Bundle Analyzer
Taskmuncher
- Backup TaskMuncher from Digital Ocean
- Configure HTTP Nginx
- Configure HTTPS Nginx
- Configuring Google Domains
- Configuring Meta Tags
- Create Site Map
- Create SSL Certificates
- Create Ubuntu Droplet at Digital Ocean
- Deploy TaskMuncher React App to AWS
- Facebook Application Id
- First time deploy TaskMuncher React App to Digital Ocean
- Google Analytics for TaskMuncher
- Google Authentication
- Google Gmail Configuration
- Google Webmaster Tools
- Install Ubuntu Mongo
- Install Ubuntu Nginx
- Mailgun
- Maintaining Ubuntu Droplet
- Material-UI Showcase
- Optimizing TaskMuncher with Webpack 4
- React Production Issues
- TaskMuncher Images and Favicons
- TaskMuncher Overview
- TaskMuncher Performance
- TaskMuncher Website Validation
- Update SSL Certificates
- Update TaskMuncher for Lighthouse Findings
- Update TaskMuncher to be a Progressive Web App
- Update TaskMuncher to use React BrowserRouter
- Update TaskMuncher to Webpack v4, Babel v7, Material-UI v3