CINXE.COM
Performance – Flutter – Medium
<!DOCTYPE html><html xmlns:cc="http://creativecommons.org/ns#"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# medium-com: http://ogp.me/ns/fb/medium-com#"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=contain"><title>Performance – Flutter – Medium</title><link rel="canonical" href="https://medium.com/flutter/tagged/performance"><link id="feedLink" rel="alternate" type="application/rss+xml" title="RSS" href="https://medium.com/feed/flutter/tagged/performance"><meta name="robots" content="index,follow"><meta name="title" content="Performance – Flutter – Medium"><meta name="referrer" content="unsafe-url"><meta name="description" content="Read writing about Performance in Flutter. Flutter is Google's UI framework for crafting high-quality native interfaces on iOS, Android, web, and desktop. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source. Learn more at https://flutter.dev."><meta name="theme-color" content="#000000"><meta property="og:title" content="Performance – Flutter – Medium"><meta property="twitter:title" content="Performance – Flutter – Medium"><meta property="og:url" content="https://medium.com/flutter/tagged/performance"><meta property="fb:app_id" content="542599432471018"><meta property="og:description" content="Read writing about Performance in Flutter. Flutter is Google's UI framework for crafting high-quality native interfaces on iOS, Android, web, and desktop. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source. Learn more at https://flutter.dev."><meta name="twitter:description" content="Read writing about Performance in Flutter. Flutter is Google's UI framework for crafting high-quality native interfaces on iOS, Android, web, and desktop. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source. Learn more at https://flutter.dev."><meta name="twitter:image:src" content=""><meta property="og:type" content="medium-com:collection"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content="@Medium"><meta property="og:site_name" content="Medium"><meta name="twitter:app:name:iphone" content="Medium"><meta name="twitter:app:id:iphone" content="828256236"><meta name="twitter:app:url:iphone" content="medium://flutter/tagged/performance"><meta property="al:ios:app_name" content="Medium"><meta property="al:ios:app_store_id" content="828256236"><meta property="al:android:package" content="com.medium.reader"><meta property="al:android:app_name" content="Medium"><meta property="al:ios:url" content="medium://flutter/tagged/performance"><meta property="al:android:url" content="medium://flutter/tagged/performance"><meta property="al:web:url" content="https://medium.com/flutter/tagged/performance"><link rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml" /><link rel="alternate" href="android-app://com.medium.reader/https/medium.com/flutter/tagged/performance" /><link rel="stylesheet" href="https://cdn-static-1.medium.com/_/fp/css/main-branding-base.ouwh4uMviI3QQWIjxRhkHA.12.css"><script>!function(n,e){var t,o,i,c=[],f={passive:!0,capture:!0},r=new Date,a="pointerup",u="pointercancel";function p(n,c){t||(t=c,o=n,i=new Date,w(e),s())}function s(){o>=0&&o<i-r&&(c.forEach(function(n){n(o,t)}),c=[])}function l(t){if(t.cancelable){var o=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,o){function i(){p(t,o),r()}function c(){r()}function r(){e(a,i,f),e(u,c,f)}n(a,i,f),n(u,c,f)}(o,t):p(o,t)}}function w(n){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(e){n(e,l,f)})}w(n),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(n){c.push(n),s()}}(addEventListener,removeEventListener);</script><script>document.domain = document.domain;</script><script>if (window.top !== window.self) window.location = 'about:blank';var OB_startTime = new Date().getTime(); var OB_loadErrors = []; function _onerror(e) { OB_loadErrors.push(e) }; if (document.addEventListener) document.addEventListener("error", _onerror, true); else if (document.attachEvent) document.attachEvent("onerror", _onerror); function _asyncScript(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("script"); s.type = "text/javascript"; s.async = true; s.src = u; f.parentNode.insertBefore(s, f);}function _asyncStyles(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("link"); s.rel = "stylesheet"; s.href = u; f.parentNode.insertBefore(s, f); return s}(new Image()).src = "/_/stat?event=pixel.load&origin=" + encodeURIComponent(location.origin);</script><script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date; ga("create", "G-7JY7T788PK", "auto", {"allowLinker": true, "legacyCookieDomain": window.location.hostname});ga("send", "pageview");</script><script async src="https://www.google-analytics.com/analytics.js"></script><script>(function () {var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; document.write("<style>section.section-image--fullBleed.is-backgrounded {padding-top: " + Math.round(1.1 * height) + "px;}section.section-image--fullScreen.is-backgrounded, section.section-image--coverFade.is-backgrounded {min-height: " + height + "px; padding-top: " + Math.round(0.5 * height) + "px;}.u-height100vh {height: " + height + "px !important;}.u-height110vh {height: " + Math.round(1.1 * height) + "px !important;}.u-minHeight100vh {min-height: " + height + "px !important;}.u-maxHeight100vh {max-height: " + height + "px !important;}section.section-image--coverFade {height: " + height + "px;}.section-aspectRatioViewportPlaceholder, .section-aspectRatioViewportCropPlaceholder {max-height: " + height + "px;}.section-aspectRatioViewportBottomSpacer, .section-aspectRatioViewportBottomPlaceholder {max-height: " + Math.round(0.5 * height) + "px;}.zoomable:before {top: " + (-1 * height) + "px; left: " + (-1 * width) + "px; padding: " + height + "px " + width + "px;}</style>");})()</script><!--[if lt IE 9]><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js"></script><![endif]--><link rel="icon" href="https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19" class="js-favicon"><link rel="apple-touch-icon" sizes="152x152" href="https://cdn-images-1.medium.com/fit/c/304/304/1*5-aoK8IBmXve5whBQM90GA.png"><link rel="apple-touch-icon" sizes="120x120" href="https://cdn-images-1.medium.com/fit/c/240/240/1*5-aoK8IBmXve5whBQM90GA.png"><link rel="apple-touch-icon" sizes="76x76" href="https://cdn-images-1.medium.com/fit/c/152/152/1*5-aoK8IBmXve5whBQM90GA.png"><link rel="apple-touch-icon" sizes="60x60" href="https://cdn-images-1.medium.com/fit/c/120/120/1*5-aoK8IBmXve5whBQM90GA.png"><link rel="mask-icon" href="https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg" color="#171717"></head><body itemscope class=" browser-ie os-windows v-unbound v-glyph v-glyph--m2-unbound-source-serif-pro is-noJs"><script>document.body.className = document.body.className.replace(/(^|\s)is-noJs(\s|$)/, "$1is-js$2")</script><div class="site-main" id="container"><div class="butterBar butterBar--error"></div><div class="surface"><div id="prerendered" class="screenContent"><div class="metabar u-clearfix u-boxShadow4px12pxBlackLighter u-textColorTransparentWhiteDarker js-metabar"><div class="branch-journeys-top"></div><div class="js-metabarMiddle metabar-inner u-marginAuto u-maxWidth1032 u-flexCenter u-justifyContentSpaceBetween u-height65 u-xs-height56 u-paddingHorizontal20"><div class="metabar-block u-flex1 u-flexCenter"><div class="js-metabarLogoLeft"><a href="https://medium.com/" data-log-event="home" class="siteNav-logo u-fillBlack u-flex0 u-flexCenter u-paddingTop0"><span class="svgIcon svgIcon--wordmarkMedium svgIcon--120x26px u-flex"><svg class="svgIcon-use" width="120" height="26" ><path d="M29.57 1.404l.036-.008V1.12h-7.27l-6.75 15.979-6.75-15.98H1.003v.278l.035.008c1.327.302 2 .752 2 2.374v18.993c0 1.623-.676 2.073-2.003 2.374L1 25.153v.279h5.315v-.278l-.035-.008c-1.327-.302-2-.751-2-2.374V4.88l8.67 20.552h.492l8.924-21.125V23.24c-.114 1.282-.782 1.677-1.983 1.95l-.036.009v.275h9.259V25.2l-.036-.008c-1.203-.274-1.886-.67-2-1.95l-.006-19.464h.006c0-1.622.674-2.072 2-2.374zm4.23 12.582c.15-3.412 1.367-5.875 3.41-5.918.629.01 1.157.219 1.568.62.872.852 1.282 2.634 1.219 5.298h-6.198zm-.092.962h10.85v-.046c-.03-2.61-.78-4.64-2.228-6.033-1.25-1.204-3.103-1.867-5.048-1.867h-.043c-1.01 0-2.248.246-3.13.693a7.316 7.316 0 00-2.623 2.086c-1.185 1.479-1.903 3.477-2.078 5.724a13.717 13.717 0 00-.04.755c-.004.195-.005.39-.001.587.117 5.087 2.846 9.153 7.692 9.153 4.254 0 6.73-3.132 7.348-7.336l-.312-.11c-1.085 2.259-3.034 3.628-5.252 3.461-3.028-.228-5.347-3.32-5.137-7.066m23.122 6.893c-.356.85-1.099 1.319-2.094 1.319-.995 0-1.905-.689-2.552-1.939-.694-1.342-1.06-3.24-1.06-5.487 0-4.678 1.445-7.704 3.68-7.704.937 0 1.674.468 2.026 1.284v12.527zm7.198 3.335c-1.327-.316-2-.787-2-2.492V0l-8.062 2.392v.293l.05-.004c1.111-.09 1.866.064 2.304.472.343.32.51.809.51 1.498v3.11C56.033 7.25 55.088 7 53.94 7c-2.326 0-4.453.987-5.986 2.779-1.599 1.867-2.444 4.42-2.444 7.38 0 5.287 2.584 8.84 6.43 8.84 2.25 0 4.06-1.242 4.888-3.336v2.811h7.233v-.29l-.035-.008zM70.94 3.085c0-1.65-1.236-2.896-2.875-2.896-1.632 0-2.908 1.272-2.908 2.896 0 1.624 1.278 2.896 2.908 2.896 1.64 0 2.875-1.245 2.875-2.896zm1.903 22.092c-1.327-.316-2-.787-2-2.492h-.006V7.055l-7.234 2.092v.284l.043.004c1.566.14 1.994.683 1.994 2.525v13.515h7.24v-.29l-.037-.008zm18.536 0c-1.327-.316-2-.787-2-2.492V7.055L82.49 9.078v.285l.04.004c1.28.136 1.65.71 1.65 2.56v9.88c-.426.85-1.227 1.356-2.196 1.39-1.573 0-2.439-1.07-2.439-3.012V7.055l-7.234 2.092v.284l.044.004c1.565.14 1.994.683 1.994 2.525v8.362a9.443 9.443 0 00.15 1.741l.13.57C75.243 24.845 76.848 26 79.362 26c2.129 0 3.996-1.328 4.818-3.405v2.885h7.233v-.291l-.034-.012zm28.102.298v-.291l-.035-.009c-1.44-.334-2.001-.964-2.001-2.248V12.295C117.445 8.98 115.597 7 112.5 7c-2.257 0-4.16 1.314-4.893 3.36-.582-2.168-2.257-3.36-4.734-3.36-2.175 0-3.88 1.156-4.612 3.11V7.056l-7.233 2.006v.286l.043.004c1.547.138 1.994.697 1.994 2.492v13.631h6.75v-.29l-.037-.01c-1.148-.271-1.519-.767-1.519-2.04V10.95c.304-.715.917-1.562 2.127-1.562 1.504 0 2.266 1.05 2.266 3.116v12.972h6.751v-.29l-.035-.01c-1.149-.271-1.52-.767-1.52-2.04V12.294a7.107 7.107 0 00-.095-1.21c.322-.777.97-1.696 2.23-1.696 1.524 0 2.265 1.02 2.265 3.116v12.972h7.233z"/></svg></span><span class="u-textScreenReader">Homepage</span></a></div><div class="u-paddingLeft10 u-sm-show r-paddingRight10"><a href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com/flutter%3F~feature=LoMobileNavBar&~channel=ShowCollectionHome&~stage=m2">Open in app</a></div></div><div class="metabar-block u-flex0 u-flexCenter"><div class="u-flexCenter u-height65 u-xs-height56"><div class="buttonSet buttonSet--wide u-lineHeightInherit"><a class="button button--primary button--chromeless u-accentColor--buttonNormal is-inSiteNavBar u-xs-hide js-signInButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fflutter%2Ftagged%2Fperformance&source=--------------------------nav_reg&operation=login" data-action="sign-in-prompt" data-redirect="https://medium.com/flutter/tagged/performance" data-action-source="--------------------------nav_reg">Sign in</a><a class="button button--primary button--withChrome u-accentColor--buttonNormal is-inSiteNavBar js-signUpButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fflutter%2Ftagged%2Fperformance&source=--------------------------nav_reg&operation=register" data-action="sign-up-prompt" data-redirect="https://medium.com/flutter/tagged/performance" data-action-source="--------------------------nav_reg">Get started</a></div></div></div></div><div class="u-tintBgColor u-tintSpectrum " ><div class="metabar-inner u-marginAuto u-maxWidth1032 u-paddingHorizontal20 js-metabarBottom"><nav role="navigation" class="metabar-block metabar-block--below u-flexCenter u-overflowHidden u-height54"><div class="u-flexCenter u-overflowHidden"><div class="u-marginRight40"><a href="https://medium.com/flutter?source=logo-lo_a396e787ac6e---4da7dfd21a33" class="u-flexCenter js-collectionLogoOrName"><img height="36" width="137" src="https://cdn-images-1.medium.com/letterbox/274/72/50/50/1*KvnfbD1F5CzEsU9wSmRZyA.png?source=logoAvatar-lo_a396e787ac6e---4da7dfd21a33" alt="Flutter" /></a></div><div class="u-overflowHidden u-xs-hide"><ul class="u-textAlignLeft u-noWrap u-overflowX u-height80 u-marginTop40 js-collectionNavItems"><li class="metabar-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0 u-xs-paddingTop10"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/flutter/tagged/announcements">Announcements</a></li><li class="metabar-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0 u-xs-paddingTop10"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/flutter/tagged/performance">Performance</a></li><li class="metabar-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0 u-xs-paddingTop10"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/flutter/tagged/material-design">Material Design</a></li><li class="metabar-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0 u-xs-paddingTop10"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/flutter/tagged/web-development">Web Development</a></li><span class="u-borderLeft1 u-baseColor--borderLight"></span><li class="metabar-navItem js-collectionNavItem is-external u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0 u-xs-paddingTop10"><a class="link link--darkenOnHover u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://flutter.dev/" rel="nofollow noopener" target="_blank">flutter.dev</a></li></ul></div></div></nav></div></div></div><div class="metabar metabar--spacer js-metabarSpacer u-tintBgColor u-height119 u-xs-height110"></div><div class="container u-foreground u-maxWidth1032 u-paddingTop40"><div class="row u-relative"><div class="col u-size12of12"><div class="row"><div class="col u-size4of12 js-aboutCollectionBox"><header class="heading heading--page u-marginTop0 u-xs-marginTop20 u-sm-marginBottom5" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><div class="heading-prefix">Tagged in</div><h1 class="heading-title heading-title--bold u-marginTop0 u-xs-marginTop20 u-sm-marginBottom5">Performance</h1></div></div></header><div class="u-sm-hide"><div class="u-tableCell"><a class="link u-baseColor--link avatar avatar--roundedRectangle" href="https://medium.com/flutter" title="Go to Flutter" aria-label="Go to Flutter"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*5-aoK8IBmXve5whBQM90GA.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Flutter"></a></div><div class="u-tableCell u-verticalAlignMiddle u-textColorNormal u-fontSize16 u-breakWord u-paddingLeft10">Flutter</div><div class="u-fontSize14 u-lineHeightBaseSans u-textColorDark u-paddingTop15 u-paddingBottom15"><div class="u-marginBottom15 u-breakWord">Flutter is Google's UI framework for crafting high-quality native interfaces on iOS, Android, web, and desktop. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source. Learn more at <a rel="nofollow" href="https://flutter.dev">https://flutter.dev</a></div><a class=" link--darken u-accentColor--textDarken link--accent u-accentColor--textNormal" href="https://medium.com/flutter/about">More information</a></div><div class="u-fontSize14 u-lineHeightBaseSans u-textColorDark u-paddingBottom15"><header class="heading heading--allCaps heading--light" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title">Followers</span></div></div></header>57K </div><div class="u-fontSize14 u-lineHeightBaseSans u-marginBottom4 u-paddingBottom15"><header class="heading heading--allCaps heading--light" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title">Elsewhere</span></div></div></header><div class="linkSet"><a class="button button--dark button--chromeless is-touchIconBlackPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--dark button--chromeless" href="https://twitter.com/flutterdev" title="X profile" aria-label="X profile" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--twitter svgIcon--21px"><svg class="svgIcon-use" width="21" height="21" fill="none" ><path d="M11.74 9.478l4.842-5.628h-1.147l-4.204 4.887L7.873 3.85H4l5.078 7.39L4 17.142h1.147l4.44-5.16 3.546 5.16h3.873L11.74 9.478zm-1.571 1.827l-.514-.736L5.56 4.714h1.762l3.304 4.725.514.736 4.295 6.143h-1.763l-3.504-5.013z" fill="#242424"/></svg></span></span></a></div></div><div class="u-fontSize14 u-lineHeightBaseSans u-textColorDark u-paddingBottom15"><header class="heading heading--allCaps heading--light u-marginBottom10" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title u-marginBottom10">More, on Medium</span></div></div></header><ul class="tags tags--postTags tags--light"><li><a class="link u-baseColor--link" href="https://medium.com/tag/performance">Performance</a></li></ul></div></div></div><div class="col u-size8of12 u-sm-size12of12"><div class="u-marginBottom40 u-sm-marginBottom20"><div class="u-height65 u-sm-hide"></div></div><div class="js-tagStream"><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="e949b9dbcf06" data-source="---------0-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@filiph" data-action="show-user-card" data-action-value="696ae61bc6e2" data-action-type="hover" data-user-id="696ae61bc6e2" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*dZx7Dxmr4VXmjc5U8yDf3w.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Filip Hracek"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@filiph?source=---------0-----------------------" data-action="show-user-card" data-action-source="---------0-----------------------" data-action-value="696ae61bc6e2" data-action-type="hover" data-user-id="696ae61bc6e2" dir="auto">Filip Hracek</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flutter?source=---------0-----------------------" data-action="show-collection-card" data-action-source="---------0-----------------------" data-action-value="flutter" data-action-type="hover">Flutter</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flutter/raster-thread-performance-optimization-tips-e949b9dbcf06?source=---------0-----------------------" data-action="open-post" data-action-value="https://medium.com/flutter/raster-thread-performance-optimization-tips-e949b9dbcf06?source=---------0-----------------------" data-action-source="preview-listing" ><time datetime="2021-09-01T00:29:04.565Z">Aug 31, 2021</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="11 min read"></span></div></div></div></div></div><div><a class="" href="https://medium.com/flutter/raster-thread-performance-optimization-tips-e949b9dbcf06?source=---------0-----------------------" data-action-source="---------0-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*16rv_KQNNU3IsAHCfI3G6A.png" data-width="1920" data-height="1080" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*16rv_KQNNU3IsAHCfI3G6A.png"></div></figure><h3 name="6561" id="6561" class="graf graf--h3 graf-after--figure graf--title">Raster thread performance optimization tips</h3><p name="0447" id="0447" class="graf graf--p graf-after--h3 graf--trailing">Recently, I sat down to tweak the performance of FlutterFolio, an app that was built…</p></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/raster-thread-performance-optimization-tips-e949b9dbcf06?source=---------0-----------------------" data-action="open-post" data-action-source="---------0-----------------------" data-action-value="https://medium.com/flutter/raster-thread-performance-optimization-tips-e949b9dbcf06?source=---------0-----------------------" data-post-id="e949b9dbcf06">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="e949b9dbcf06" data-is-flush-left="true" data-source="listing-----e949b9dbcf06---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/e949b9dbcf06" data-action-source="listing-----e949b9dbcf06---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="e949b9dbcf06">1.7K</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/raster-thread-performance-optimization-tips-e949b9dbcf06?source=---------0-----------------------#--responses" data-action-source="---------0-----------------------">8 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="e949b9dbcf06"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="5c597168b6bb" data-source="---------1-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@liyuqian" data-action="show-user-card" data-action-value="9fb96b11de78" data-action-type="hover" data-user-id="9fb96b11de78" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*T1lv65-OBsGrBSs6mvgvqg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Yuqian Li"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@liyuqian?source=---------1-----------------------" data-action="show-user-card" data-action-source="---------1-----------------------" data-action-value="9fb96b11de78" data-action-type="hover" data-user-id="9fb96b11de78" dir="auto">Yuqian Li</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flutter?source=---------1-----------------------" data-action="show-collection-card" data-action-source="---------1-----------------------" data-action-value="flutter" data-action-type="hover">Flutter</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flutter/flutter-performance-updates-in-the-first-half-of-2020-5c597168b6bb?source=---------1-----------------------" data-action="open-post" data-action-value="https://medium.com/flutter/flutter-performance-updates-in-the-first-half-of-2020-5c597168b6bb?source=---------1-----------------------" data-action-source="preview-listing" ><time datetime="2021-02-12T01:32:30.080Z">Feb 11, 2021</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="7 min read"></span></div></div></div></div></div><div><a class="" href="https://medium.com/flutter/flutter-performance-updates-in-the-first-half-of-2020-5c597168b6bb?source=---------1-----------------------" data-action-source="---------1-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*5WEbz38iKKh5EfCj55mGYw.png" data-width="1804" data-height="1384" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*5WEbz38iKKh5EfCj55mGYw.png"></div></figure><h3 name="e267" id="e267" class="graf graf--h3 graf-after--figure graf--trailing graf--title">Flutter performance updates in the first half of 2020</h3></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/flutter-performance-updates-in-the-first-half-of-2020-5c597168b6bb?source=---------1-----------------------" data-action="open-post" data-action-source="---------1-----------------------" data-action-value="https://medium.com/flutter/flutter-performance-updates-in-the-first-half-of-2020-5c597168b6bb?source=---------1-----------------------" data-post-id="5c597168b6bb">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="5c597168b6bb" data-is-flush-left="true" data-source="listing-----5c597168b6bb---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/5c597168b6bb" data-action-source="listing-----5c597168b6bb---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="5c597168b6bb">636</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/flutter-performance-updates-in-the-first-half-of-2020-5c597168b6bb?source=---------1-----------------------#--responses" data-action-source="---------1-----------------------">3 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="5c597168b6bb"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="4c170934f914" data-source="---------2-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@shaza" data-action="show-user-card" data-action-value="4631513e40c0" data-action-type="hover" data-user-id="4631513e40c0" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*LHz-9FgHd3doKgCM." class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Shams Zakhour"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@shaza?source=---------2-----------------------" data-action="show-user-card" data-action-source="---------2-----------------------" data-action-value="4631513e40c0" data-action-type="hover" data-user-id="4631513e40c0" dir="auto">Shams Zakhour</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flutter?source=---------2-----------------------" data-action="show-collection-card" data-action-source="---------2-----------------------" data-action-value="flutter" data-action-type="hover">Flutter</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flutter/flutter-performance-updates-in-2019-4c170934f914?source=---------2-----------------------" data-action="open-post" data-action-value="https://medium.com/flutter/flutter-performance-updates-in-2019-4c170934f914?source=---------2-----------------------" data-action-source="preview-listing" ><time datetime="2020-07-31T00:00:18.490Z">Jul 30, 2020</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span></div></div></div></div></div><div><a class="" href="https://medium.com/flutter/flutter-performance-updates-in-2019-4c170934f914?source=---------2-----------------------" data-action-source="---------2-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*bWXPMmCXDmBWN7rZbxZcyg.png" data-width="1400" data-height="679" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*bWXPMmCXDmBWN7rZbxZcyg.png"></div></figure><h3 name="e5c1" id="e5c1" class="graf graf--h3 graf-after--figure graf--title">Flutter Performance Updates in 2019</h3><p name="9cae" id="9cae" class="graf graf--p graf-after--h3 graf--trailing">By <span class="markup--user markup--p-user" data-action="show-user-card" data-action-type="hover" data-user-id="9fb96b11de78" data-action-value="9fb96b11de78">Yuqian Li</a> and <span class="markup--user markup--p-user" data-action="show-user-card" data-action-type="hover" data-user-id="4631513e40c0" data-action-value="4631513e40c0">Shams Zakhour</a></p></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/flutter-performance-updates-in-2019-4c170934f914?source=---------2-----------------------" data-action="open-post" data-action-source="---------2-----------------------" data-action-value="https://medium.com/flutter/flutter-performance-updates-in-2019-4c170934f914?source=---------2-----------------------" data-post-id="4c170934f914">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="4c170934f914" data-is-flush-left="true" data-source="listing-----4c170934f914---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/4c170934f914" data-action-source="listing-----4c170934f914---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="4c170934f914">329</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="4c170934f914"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="3b2558aa08fa" data-source="---------3-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@guidez" data-action="show-user-card" data-action-value="e3bf847b45be" data-action-type="hover" data-user-id="e3bf847b45be" dir="auto"><img src="https://cdn-images-1.medium.com/proxy/1*dmbNkD5D-u45r44go_cf0g.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Pierre-Louis Guidez"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@guidez?source=---------3-----------------------" data-action="show-user-card" data-action-source="---------3-----------------------" data-action-value="e3bf847b45be" data-action-type="hover" data-user-id="e3bf847b45be" dir="auto">Pierre-Louis Guidez</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flutter?source=---------3-----------------------" data-action="show-collection-card" data-action-source="---------3-----------------------" data-action-value="flutter" data-action-type="hover">Flutter</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flutter/building-performant-flutter-widgets-3b2558aa08fa?source=---------3-----------------------" data-action="open-post" data-action-value="https://medium.com/flutter/building-performant-flutter-widgets-3b2558aa08fa?source=---------3-----------------------" data-action-source="preview-listing" ><time datetime="2020-07-23T11:54:41.168Z">Jul 23, 2020</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="7 min read"></span></div></div></div></div></div><div><a class="" href="https://medium.com/flutter/building-performant-flutter-widgets-3b2558aa08fa?source=---------3-----------------------" data-action-source="---------3-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="0*GWFHSeCrjUgPdkJ-" data-width="960" data-height="557" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/0*GWFHSeCrjUgPdkJ-"></div></figure><h3 name="1a2d" id="1a2d" class="graf graf--h3 graf-after--figure graf--title">Building performant Flutter widgets</h3><p name="dde6" id="dde6" class="graf graf--p graf-after--h3 graf--trailing"><em class="markup--em markup--p-em">This article is part of a series developed after the Flutter Material team worked on making the</em>…</p></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/building-performant-flutter-widgets-3b2558aa08fa?source=---------3-----------------------" data-action="open-post" data-action-source="---------3-----------------------" data-action-value="https://medium.com/flutter/building-performant-flutter-widgets-3b2558aa08fa?source=---------3-----------------------" data-post-id="3b2558aa08fa">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="3b2558aa08fa" data-is-flush-left="true" data-source="listing-----3b2558aa08fa---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/3b2558aa08fa" data-action-source="listing-----3b2558aa08fa---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="3b2558aa08fa">1.5K</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/building-performant-flutter-widgets-3b2558aa08fa?source=---------3-----------------------#--responses" data-action-source="---------3-----------------------">2 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="3b2558aa08fa"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="a4f1fc8faac9" data-source="---------4-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@jayoung.lee" data-action="show-user-card" data-action-value="50dd805ce3b8" data-action-type="hover" data-user-id="50dd805ce3b8" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*09ekgauj46kjGlHoi94FwA.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of JaYoung Lee"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@jayoung.lee?source=---------4-----------------------" data-action="show-user-card" data-action-source="---------4-----------------------" data-action-value="50dd805ce3b8" data-action-type="hover" data-user-id="50dd805ce3b8" dir="auto">JaYoung Lee</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flutter?source=---------4-----------------------" data-action="show-collection-card" data-action-source="---------4-----------------------" data-action-value="flutter" data-action-type="hover">Flutter</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flutter/what-we-learned-from-the-flutter-q2-2020-survey-a4f1fc8faac9?source=---------4-----------------------" data-action="open-post" data-action-value="https://medium.com/flutter/what-we-learned-from-the-flutter-q2-2020-survey-a4f1fc8faac9?source=---------4-----------------------" data-action-source="preview-listing" ><time datetime="2020-07-22T15:01:01.630Z">Jul 22, 2020</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="7 min read"></span></div></div></div></div></div><div><a class="" href="https://medium.com/flutter/what-we-learned-from-the-flutter-q2-2020-survey-a4f1fc8faac9?source=---------4-----------------------" data-action-source="---------4-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*BJJb_evaKM8qgJV5VCn95Q.png" data-width="2100" data-height="1200" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*BJJb_evaKM8qgJV5VCn95Q.png"></div></figure><h3 name="1ec4" id="1ec4" class="graf graf--h3 graf-after--figure graf--title">What we learned from the Flutter Q2 2020 survey</h3><h4 name="5d96" id="5d96" class="graf graf--h4 graf-after--h3 graf--trailing graf--subtitle"><em class="markup--em markup--h4-em">With a focus on code samples, app performance, and</em>…</h4></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/what-we-learned-from-the-flutter-q2-2020-survey-a4f1fc8faac9?source=---------4-----------------------" data-action="open-post" data-action-source="---------4-----------------------" data-action-value="https://medium.com/flutter/what-we-learned-from-the-flutter-q2-2020-survey-a4f1fc8faac9?source=---------4-----------------------" data-post-id="a4f1fc8faac9">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="a4f1fc8faac9" data-is-flush-left="true" data-source="listing-----a4f1fc8faac9---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/a4f1fc8faac9" data-action-source="listing-----a4f1fc8faac9---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="a4f1fc8faac9">767</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/what-we-learned-from-the-flutter-q2-2020-survey-a4f1fc8faac9?source=---------4-----------------------#--responses" data-action-source="---------4-----------------------">1 response</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="a4f1fc8faac9"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="6b3601087a2b" data-source="---------5-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@perclasson" data-action="show-user-card" data-action-value="4cad326de3d7" data-action-type="hover" data-user-id="4cad326de3d7" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/2*d-UpSVU0saEV2On5JBvYaQ.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Per Classon"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@perclasson?source=---------5-----------------------" data-action="show-user-card" data-action-source="---------5-----------------------" data-action-value="4cad326de3d7" data-action-type="hover" data-user-id="4cad326de3d7" dir="auto">Per Classon</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flutter?source=---------5-----------------------" data-action="show-collection-card" data-action-source="---------5-----------------------" data-action-value="flutter" data-action-type="hover">Flutter</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flutter/improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b?source=---------5-----------------------" data-action="open-post" data-action-value="https://medium.com/flutter/improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b?source=---------5-----------------------" data-action-source="preview-listing" ><time datetime="2020-05-26T16:45:57.087Z">May 26, 2020</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span></div></div></div></div></div><div><a class="" href="https://medium.com/flutter/improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b?source=---------5-----------------------" data-action-source="---------5-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*Pp2MNotBJdSHDcW3Fhz19A.gif" data-width="500" data-height="575" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*Pp2MNotBJdSHDcW3Fhz19A.gif"></div></figure><h3 name="38de" id="38de" class="graf graf--h3 graf-after--figure graf--trailing graf--title">Improving perceived performance with image placeholders, precaching, and disabled navigation transitions</h3></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b?source=---------5-----------------------" data-action="open-post" data-action-source="---------5-----------------------" data-action-value="https://medium.com/flutter/improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b?source=---------5-----------------------" data-post-id="6b3601087a2b">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="6b3601087a2b" data-is-flush-left="true" data-source="listing-----6b3601087a2b---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/6b3601087a2b" data-action-source="listing-----6b3601087a2b---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="6b3601087a2b">826</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b?source=---------5-----------------------#--responses" data-action-source="---------5-----------------------">3 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="6b3601087a2b"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="535fbe3cd674" data-source="---------6-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@perclasson" data-action="show-user-card" data-action-value="4cad326de3d7" data-action-type="hover" data-user-id="4cad326de3d7" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/2*d-UpSVU0saEV2On5JBvYaQ.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Per Classon"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@perclasson?source=---------6-----------------------" data-action="show-user-card" data-action-source="---------6-----------------------" data-action-value="4cad326de3d7" data-action-type="hover" data-user-id="4cad326de3d7" dir="auto">Per Classon</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flutter?source=---------6-----------------------" data-action="show-collection-card" data-action-source="---------6-----------------------" data-action-value="flutter" data-action-type="hover">Flutter</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flutter/optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674?source=---------6-----------------------" data-action="open-post" data-action-value="https://medium.com/flutter/optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674?source=---------6-----------------------" data-action-source="preview-listing" ><time datetime="2020-05-19T13:57:49.784Z">May 19, 2020</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span></div></div></div></div></div><div><a class="" href="https://medium.com/flutter/optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674?source=---------6-----------------------" data-action-source="---------6-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="0*Z8CmvWbWVXUb9Wy4" data-width="1374" data-height="532" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/0*Z8CmvWbWVXUb9Wy4"></div></figure><h3 name="a3e7" id="a3e7" class="graf graf--h3 graf-after--figure graf--trailing graf--title">Optimizing performance in Flutter web apps with tree shaking and deferred loading</h3></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674?source=---------6-----------------------" data-action="open-post" data-action-source="---------6-----------------------" data-action-value="https://medium.com/flutter/optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674?source=---------6-----------------------" data-post-id="535fbe3cd674">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="535fbe3cd674" data-is-flush-left="true" data-source="listing-----535fbe3cd674---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/535fbe3cd674" data-action-source="listing-----535fbe3cd674---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="535fbe3cd674">1.5K</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674?source=---------6-----------------------#--responses" data-action-source="---------6-----------------------">8 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="535fbe3cd674"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="df7669bb7df7" data-source="---------7-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@filiph" data-action="show-user-card" data-action-value="696ae61bc6e2" data-action-type="hover" data-user-id="696ae61bc6e2" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*dZx7Dxmr4VXmjc5U8yDf3w.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Filip Hracek"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@filiph?source=---------7-----------------------" data-action="show-user-card" data-action-source="---------7-----------------------" data-action-value="696ae61bc6e2" data-action-type="hover" data-user-id="696ae61bc6e2" dir="auto">Filip Hracek</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/flutter?source=---------7-----------------------" data-action="show-collection-card" data-action-source="---------7-----------------------" data-action-value="flutter" data-action-type="hover">Flutter</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/flutter/performance-testing-of-flutter-apps-df7669bb7df7?source=---------7-----------------------" data-action="open-post" data-action-value="https://medium.com/flutter/performance-testing-of-flutter-apps-df7669bb7df7?source=---------7-----------------------" data-action-source="preview-listing" ><time datetime="2019-05-09T01:26:02.232Z">May 8, 2019</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="7 min read"></span></div></div></div></div></div><div><a class="" href="https://medium.com/flutter/performance-testing-of-flutter-apps-df7669bb7df7?source=---------7-----------------------" data-action-source="---------7-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*MxtHyEfdBlANwu7ZRyX2mw.png" data-width="742" data-height="421" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*MxtHyEfdBlANwu7ZRyX2mw.png"></div></figure><h3 name="a3ef" id="a3ef" class="graf graf--h3 graf-after--figure graf--title">Performance testing of Flutter apps</h3><p name="c131" id="c131" class="graf graf--p graf-after--h3 graf--trailing">The Flutter framework does a good job being fast by default, but does that mean you don’t need to…</p></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/performance-testing-of-flutter-apps-df7669bb7df7?source=---------7-----------------------" data-action="open-post" data-action-source="---------7-----------------------" data-action-value="https://medium.com/flutter/performance-testing-of-flutter-apps-df7669bb7df7?source=---------7-----------------------" data-post-id="df7669bb7df7">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="df7669bb7df7" data-is-flush-left="true" data-source="listing-----df7669bb7df7---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/df7669bb7df7" data-action-source="listing-----df7669bb7df7---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="df7669bb7df7">2.5K</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/flutter/performance-testing-of-flutter-apps-df7669bb7df7?source=---------7-----------------------#--responses" data-action-source="---------7-----------------------">7 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="df7669bb7df7"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div></div></div></div></div></div></div><style class="js-collectionStyle"> .u-accentColor--borderLight {border-color: #498BD1 !important;} .u-accentColor--borderNormal {border-color: #498BD1 !important;} .u-accentColor--borderDark {border-color: #4477AF !important;} .u-accentColor--iconLight .svgIcon,.u-accentColor--iconLight.svgIcon {fill: #498BD1 !important;} .u-accentColor--iconNormal .svgIcon,.u-accentColor--iconNormal.svgIcon {fill: #498BD1 !important;} .u-accentColor--iconDark .svgIcon,.u-accentColor--iconDark.svgIcon {fill: #4477AF !important;} .u-accentColor--textNormal {color: #4477AF !important;} .u-accentColor--hoverTextNormal:hover {color: #4477AF !important;} .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #416D9E !important;} .u-accentColor--textDark {color: #416D9E !important;} .u-accentColor--backgroundLight {background-color: #498BD1 !important;} .u-accentColor--backgroundNormal {background-color: #498BD1 !important;} .u-accentColor--backgroundDark {background-color: #4477AF !important;} .u-accentColor--buttonDark {border-color: #4477AF !important; color: #416D9E !important;} .u-accentColor--buttonDark:hover {border-color: #416D9E !important;} .u-accentColor--buttonDark .icon:before,.u-accentColor--buttonDark .svgIcon{color: #4477AF !important; fill: #4477AF !important;} .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #498BD1 !important; color: #4477AF !important;} .u-accentColor--buttonNormal:hover {border-color: #4477AF !important;} .u-accentColor--buttonNormal .icon:before,.u-accentColor--buttonNormal .svgIcon{color: #498BD1 !important; fill: #498BD1 !important;} .u-accentColor--buttonNormal.button--filled .icon:before,.u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonDark.button--filled,.u-accentColor--buttonDark.button--withChrome.is-active,.u-accentColor--fillWhenActive.is-active {background-color: #4477AF !important; border-color: #4477AF !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #498BD1 !important; border-color: #498BD1 !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .postArticle.is-withAccentColors .markup--user,.postArticle.is-withAccentColors .markup--query {color: #4477AF !important;}.u-tintBgColor {background-color: rgba(1, 87, 155, 1) !important;}.u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(1, 87, 155, 1) 0%, rgba(1, 87, 155, 0) 100%) !important;}.u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(1, 87, 155, 0) 0%, rgba(1, 87, 155, 1) 100%) !important;} .u-tintSpectrum .u-baseColor--borderLight {border-color: #92B4DC !important;} .u-tintSpectrum .u-baseColor--borderNormal {border-color: #BCD3F1 !important;} .u-tintSpectrum .u-baseColor--borderDark {border-color: #E3F2FF !important;} .u-tintSpectrum .u-baseColor--iconLight .svgIcon,.u-tintSpectrum .u-baseColor--iconLight.svgIcon {fill: #92B4DC !important;} .u-tintSpectrum .u-baseColor--iconNormal .svgIcon,.u-tintSpectrum .u-baseColor--iconNormal.svgIcon {fill: #BCD3F1 !important;} .u-tintSpectrum .u-baseColor--iconDark .svgIcon,.u-tintSpectrum .u-baseColor--iconDark.svgIcon {fill: #E3F2FF !important;} .u-tintSpectrum .u-baseColor--textNormal {color: #BCD3F1 !important;} .u-tintSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: #F7FFFF !important;} .u-tintSpectrum .u-baseColor--textDark {color: #F7FFFF !important;} .u-tintSpectrum .u-baseColor--textDarker {color: #F7FFFF !important;} .u-tintSpectrum .u-baseColor--backgroundLight {background-color: #92B4DC !important;} .u-tintSpectrum .u-baseColor--backgroundNormal {background-color: #BCD3F1 !important;} .u-tintSpectrum .u-baseColor--backgroundDark {background-color: #E3F2FF !important;} .u-tintSpectrum .u-baseColor--buttonLight {border-color: #92B4DC !important; color: #92B4DC !important;} .u-tintSpectrum .u-baseColor--buttonLight:hover {border-color: #92B4DC !important;} .u-tintSpectrum .u-baseColor--buttonLight .icon:before,.u-tintSpectrum .u-baseColor--buttonLight .svgIcon {color: #92B4DC !important; fill: #92B4DC !important;} .u-tintSpectrum .u-baseColor--buttonDark {border-color: #E3F2FF !important; color: #F7FFFF !important;} .u-tintSpectrum .u-baseColor--buttonDark:hover {border-color: #F7FFFF !important;} .u-tintSpectrum .u-baseColor--buttonDark .icon:before,.u-tintSpectrum .u-baseColor--buttonDark .svgIcon {color: #E3F2FF !important; fill: #E3F2FF !important;} .u-tintSpectrum .u-baseColor--buttonNormal {border-color: #BCD3F1 !important; color: #BCD3F1 !important;} .u-tintSpectrum .u-baseColor--buttonNormal:hover {border-color: #E3F2FF !important;} .u-tintSpectrum .u-baseColor--buttonNormal .icon:before,.u-tintSpectrum .u-baseColor--buttonNormal .svgIcon {color: #BCD3F1 !important; fill: #BCD3F1 !important;} .u-tintSpectrum .u-baseColor--buttonDark.button--filled,.u-tintSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: #E3F2FF !important; border-color: #E3F2FF !important; color: rgba(1, 87, 155, 1) !important; fill: rgba(1, 87, 155, 1) !important;} .u-tintSpectrum .u-baseColor--buttonNormal.button--filled,.u-tintSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: #BCD3F1 !important; border-color: #BCD3F1 !important; color: rgba(1, 87, 155, 1) !important; fill: rgba(1, 87, 155, 1) !important;} .u-tintSpectrum .u-baseColor--link {color: #BCD3F1 !important;} .u-tintSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: #F7FFFF !important;} .u-tintSpectrum .u-baseColor--link.link--darken:hover,.u-tintSpectrum .u-baseColor--link.link--darken:focus,.u-tintSpectrum .u-baseColor--link.link--darken:active {color: #F7FFFF !important;} .u-tintSpectrum .u-baseColor--link.link--dark {color: #F7FFFF !important;} .u-tintSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-tintSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-tintSpectrum .u-baseColor--link.link--dark.link--darken:active {color: #F7FFFF !important;} .u-tintSpectrum .u-baseColor--link.link--darker {color: #F7FFFF !important;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: #92B4DC;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: #92B4DC;} .u-tintSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: #92B4DC;} .u-tintSpectrum .ui-h1,.u-tintSpectrum .ui-h2,.u-tintSpectrum .ui-h3,.u-tintSpectrum .ui-h4,.u-tintSpectrum .ui-brand1,.u-tintSpectrum .ui-brand2,.u-tintSpectrum .ui-captionStrong {color: #F7FFFF !important; fill: #F7FFFF !important;} .u-tintSpectrum .ui-body,.u-tintSpectrum .ui-caps {color: #F7FFFF !important; fill: #F7FFFF !important;} .u-tintSpectrum .ui-summary,.u-tintSpectrum .ui-caption {color: #92B4DC !important; fill: #92B4DC !important;} .u-tintSpectrum .u-accentColor--borderLight {border-color: #92B4DC !important;} .u-tintSpectrum .u-accentColor--borderNormal {border-color: #BCD3F1 !important;} .u-tintSpectrum .u-accentColor--borderDark {border-color: #E3F2FF !important;} .u-tintSpectrum .u-accentColor--iconLight .svgIcon,.u-tintSpectrum .u-accentColor--iconLight.svgIcon {fill: #92B4DC !important;} .u-tintSpectrum .u-accentColor--iconNormal .svgIcon,.u-tintSpectrum .u-accentColor--iconNormal.svgIcon {fill: #BCD3F1 !important;} .u-tintSpectrum .u-accentColor--iconDark .svgIcon,.u-tintSpectrum .u-accentColor--iconDark.svgIcon {fill: #E3F2FF !important;} .u-tintSpectrum .u-accentColor--textNormal {color: #BCD3F1 !important;} .u-tintSpectrum .u-accentColor--hoverTextNormal:hover {color: #BCD3F1 !important;} .u-tintSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #F7FFFF !important;} .u-tintSpectrum .u-accentColor--textDark {color: #F7FFFF !important;} .u-tintSpectrum .u-accentColor--backgroundLight {background-color: #92B4DC !important;} .u-tintSpectrum .u-accentColor--backgroundNormal {background-color: #BCD3F1 !important;} .u-tintSpectrum .u-accentColor--backgroundDark {background-color: #E3F2FF !important;} .u-tintSpectrum .u-accentColor--buttonDark {border-color: #E3F2FF !important; color: #F7FFFF !important;} .u-tintSpectrum .u-accentColor--buttonDark:hover {border-color: #F7FFFF !important;} .u-tintSpectrum .u-accentColor--buttonDark .icon:before,.u-tintSpectrum .u-accentColor--buttonDark .svgIcon{color: #E3F2FF !important; fill: #E3F2FF !important;} .u-tintSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #BCD3F1 !important; color: #BCD3F1 !important;} .u-tintSpectrum .u-accentColor--buttonNormal:hover {border-color: #E3F2FF !important;} .u-tintSpectrum .u-accentColor--buttonNormal .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal .svgIcon{color: #BCD3F1 !important; fill: #BCD3F1 !important;} .u-tintSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(1, 87, 155, 1) !important; fill: rgba(1, 87, 155, 1) !important;} .u-tintSpectrum .u-accentColor--buttonDark.button--filled,.u-tintSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-tintSpectrum .u-accentColor--fillWhenActive.is-active {background-color: #E3F2FF !important; border-color: #E3F2FF !important; color: rgba(1, 87, 155, 1) !important; fill: rgba(1, 87, 155, 1) !important;} .u-tintSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-tintSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #BCD3F1 !important; border-color: #BCD3F1 !important; color: rgba(1, 87, 155, 1) !important; fill: rgba(1, 87, 155, 1) !important;} .u-tintSpectrum .postArticle.is-withAccentColors .markup--user,.u-tintSpectrum .postArticle.is-withAccentColors .markup--query {color: #BCD3F1 !important;} .u-accentColor--highlightFaint {background-color: rgba(227, 243, 255, 1) !important;} .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(182, 230, 255, 1) !important;} .postArticle.is-withAccentColors .markup--quote.is-other {background-color: rgba(227, 243, 255, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(227, 243, 255, 1), rgba(227, 243, 255, 1));} .postArticle.is-withAccentColors .markup--quote.is-me {background-color: rgba(203, 236, 255, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(203, 236, 255, 1), rgba(203, 236, 255, 1));} .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: rgba(182, 230, 255, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(182, 230, 255, 1), rgba(182, 230, 255, 1));} .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: rgba(182, 230, 255, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(182, 230, 255, 1), rgba(182, 230, 255, 1));} .postArticle.is-withAccentColors .markup--highlight {background-color: rgba(182, 230, 255, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(182, 230, 255, 1), rgba(182, 230, 255, 1));}</style><style class="js-collectionStyleConstant">.u-imageBgColor {background-color: rgba(0, 0, 0, 0.24705882352941178);} .u-imageSpectrum .u-baseColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconLight .svgIcon,.u-imageSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--iconNormal .svgIcon,.u-imageSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconDark .svgIcon,.u-imageSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDarker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important; color: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--buttonLight .icon:before,.u-imageSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark .icon:before,.u-imageSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal .icon:before,.u-imageSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonDark.button--filled,.u-imageSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--buttonNormal.button--filled,.u-imageSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--link {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .ui-h1,.u-imageSpectrum .ui-h2,.u-imageSpectrum .ui-h3,.u-imageSpectrum .ui-h4,.u-imageSpectrum .ui-brand1,.u-imageSpectrum .ui-brand2,.u-imageSpectrum .ui-captionStrong {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-body,.u-imageSpectrum .ui-caps {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-summary,.u-imageSpectrum .ui-caption {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconLight .svgIcon,.u-imageSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--iconNormal .svgIcon,.u-imageSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconDark .svgIcon,.u-imageSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark .icon:before,.u-imageSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonDark.button--filled,.u-imageSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-imageSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-imageSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .postArticle.is-withAccentColors .markup--user,.u-imageSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--highlightFaint {background-color: rgba(255, 255, 255, 0.2) !important;} .u-imageSpectrum .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(255, 255, 255, 0.6) !important;} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: rgba(255, 255, 255, 0.2) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: rgba(255, 255, 255, 0.4) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.4));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));}.u-resetSpectrum .u-tintBgColor {background-color: rgba(255, 255, 255, 1) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%) !important;} .u-resetSpectrum .u-baseColor--borderLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderDark {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--iconLight .svgIcon,.u-resetSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconNormal .svgIcon,.u-resetSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconDark .svgIcon,.u-resetSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textNormal {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDarker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--backgroundLight {background-color: rgba(0, 0, 0, 0.09803921568627451) !important;} .u-resetSpectrum .u-baseColor--backgroundNormal {background-color: rgba(0, 0, 0, 0.2) !important;} .u-resetSpectrum .u-baseColor--backgroundDark {background-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight .icon:before,.u-resetSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark {border-color: rgba(0, 0, 0, 0.6) !important; color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--buttonDark .icon:before,.u-resetSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important; color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal .icon:before,.u-resetSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(0, 0, 0, 0.4980392156862745) !important; fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark.button--filled,.u-resetSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2980392156862745) !important; border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--buttonNormal.button--filled,.u-resetSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2) !important; border-color: rgba(0, 0, 0, 0.2) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--link {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--darken:active {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--link.link--darker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .ui-h1,.u-resetSpectrum .ui-h2,.u-resetSpectrum .ui-h3,.u-resetSpectrum .ui-h4,.u-resetSpectrum .ui-brand1,.u-resetSpectrum .ui-brand2,.u-resetSpectrum .ui-captionStrong {color: rgba(0, 0, 0, 0.8) !important; fill: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .ui-body,.u-resetSpectrum .ui-caps {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .ui-summary,.u-resetSpectrum .ui-caption {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-accentColor--borderLight {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderNormal {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderDark {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconLight .svgIcon,.u-resetSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--iconNormal .svgIcon,.u-resetSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconDark .svgIcon,.u-resetSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textDark {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundLight {background-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundNormal {background-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundDark {background-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark {border-color: rgba(17, 128, 14, 1) !important; color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark .icon:before,.u-resetSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(15, 115, 12, 1) !important; fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(26, 137, 23, 1) !important; color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(17, 128, 14, 1) !important; fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark.button--filled,.u-resetSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-resetSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(15, 115, 12, 1) !important; border-color: rgba(15, 115, 12, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-resetSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(17, 128, 14, 1) !important; border-color: rgba(17, 128, 14, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .postArticle.is-withAccentColors .markup--user,.u-resetSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(17, 128, 14, 1) !important;}</style></div></div></div><div class="loadingBar"></div><script>// <![CDATA[ window["obvInit"] = function (opt_embedded) {window["obvInit"]["embedded"] = opt_embedded; window["obvInit"]["ready"] = true;} // ]]></script><script>// <![CDATA[ var GLOBALS = {"audioUrl":"https://d1fcbxp97j4nb2.cloudfront.net","baseUrl":"https://medium.com","buildLabel":"20241203-1724-root","currentUser":{"userId":"lo_a396e787ac6e","isVerified":false,"subscriberEmail":"","hasPastMemberships":false,"isEnrolledInHightower":false,"isEligibleForHightower":true,"hightowerLastLockedAt":0,"isWriterProgramEnrolled":true,"isWriterProgramInvited":false,"isWriterProgramOptedOut":false,"writerProgramVersion":0,"writerProgramEnrolledAt":0,"friendLinkOnboarding":0,"hasAdditionalUnlocks":false,"hasApiAccess":false,"writerProgramDistributionSettingOptedIn":false,"isSuspended":false,"collectionOnboardingSeen":0,"atsQualifiedAt":0},"currentUserHasUnverifiedEmail":false,"isAuthenticated":false,"isCurrentUserVerified":false,"miroUrl":"https://cdn-images-1.medium.com","moduleUrls":{"base":"https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.8ve66ihj1dVpByzcJOrOvg.12.js","common-async":"https://cdn-static-1.medium.com/_/fp/gen-js/main-common-async.bundle.Qy6ah4f91w20jfu666BAnA.12.js","hightower":"https://cdn-static-1.medium.com/_/fp/gen-js/main-hightower.bundle.y0UkxCxPBUbLlduk5XbwLQ.12.js","home-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-home-screens.bundle.eZhPgaD8AglnbC5Rzxqvhg.12.js","misc-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-misc-screens.bundle._3sFgeS2d1AoQzYKqNXeTA.12.js","notes":"https://cdn-static-1.medium.com/_/fp/gen-js/main-notes.bundle.SAMCbq1ffJ6HMzwniRoo9g.12.js","payments":"https://cdn-static-1.medium.com/_/fp/gen-js/main-payments.bundle.AiXyuYj3AvxRA1-7HEyP9Q.12.js","posters":"https://cdn-static-1.medium.com/_/fp/gen-js/main-posters.bundle.4zVUlXp2nm6KJVeUDNORVg.12.js","power-readers":"https://cdn-static-1.medium.com/_/fp/gen-js/main-power-readers.bundle.6Dyc-nVN2MDV_AM9XDAZug.12.js","pubs":"https://cdn-static-1.medium.com/_/fp/gen-js/main-pubs.bundle.zmDFkcqRGpKmOcLmQ7vS6A.12.js","stats":"https://cdn-static-1.medium.com/_/fp/gen-js/main-stats.bundle.2I2tXSo7-rbez_WYXfga0Q.12.js"},"previewConfig":{"weightThreshold":1,"weightImageParagraph":0.51,"weightIframeParagraph":0.8,"weightTextParagraph":0.08,"weightEmptyParagraph":0,"weightP":0.003,"weightH":0.005,"weightBq":0.003,"minPTextLength":60,"truncateBoundaryChars":20,"detectTitle":true,"detectTitleLevThreshold":0.15},"productName":"Medium","supportsEdit":false,"termsUrl":"//policy.medium.com/medium-terms-of-service-9db0094a1e0f","textshotHost":"textshot.textshot-production.svc.cluster.local","transactionId":"1733252554421:f18eb55d10a","useragent":{"browser":"ie","family":"ie","os":"windows","version":7,"supportsDesktopEdit":false,"supportsInteract":false,"supportsView":true,"isMobile":false,"isTablet":false,"isNative":false,"supportsFileAPI":false,"isTier1":false,"clientVersion":"","clientChannel":"","supportsRealScrollEvents":false,"supportsVhUnits":false,"ruinsViewportSections":false,"supportsHtml5Video":false,"supportsMagicUnderlines":false,"isWebView":false,"isFacebookWebView":false,"supportsProgressiveMedia":false,"supportsPromotedPosts":true,"isBot":false,"isNativeIphone":false,"supportsCssVariables":false,"supportsVideoSections":true,"emojiSupportLevel":1,"isSearchBot":false,"isSyndicationBot":false,"isNativeAndroid":false,"isNativeIos":false,"isSeoAuditBot":false,"isInternalApp":false,"supportsApplePay":false,"supportsScrollableMetabar":false},"variants":{"allow_access":true,"allow_signup":true,"allow_test_auth":"disallow","android_enable_editor_new_publishing_flow":true,"android_enable_friend_links_creation":true,"android_enable_friend_links_postpage_banners":true,"android_enable_image_sharer":true,"android_enable_lists_v2":true,"android_enable_syntax_highlight":true,"android_enable_topic_portals":true,"android_rating_prompt_stories_read_threshold":2,"android_two_hour_refresh":true,"available_annual_plan":"2c754bcc2995","available_annual_premium_plan":"4a442ace1476","available_monthly_plan":"60e220181034","available_monthly_premium_plan":"12a660186432","browsable_stream_config_bucket":"curated-topics","can_receive_tips_v0":true,"can_send_tips_v0":true,"coronavirus_topic_recirc":true,"disable_partner_program_enrollment":true,"enable_abandoned_cart_promotion_email":true,"enable_android_dynamic_aspirational_paywall":true,"enable_android_dynamic_programming_paywall":true,"enable_android_miro_v2":true,"enable_android_offline_reading":true,"enable_android_verified_author":true,"enable_app_flirty_thirty":true,"enable_apple_sign_in":true,"enable_apple_webhook":true,"enable_aurora_pub_follower_page":true,"enable_author_cards":true,"enable_author_cards_byline":true,"enable_auto_follow_on_subscribe":true,"enable_automod":true,"enable_bayesian_average_pub_search":true,"enable_bg_post_post":true,"enable_boost_nia_v01":true,"enable_braintree_apple_pay":true,"enable_braintree_client":true,"enable_braintree_google_pay":true,"enable_braintree_integration":true,"enable_braintree_paypal":true,"enable_braintree_trial_membership":true,"enable_braintree_webhook":true,"enable_branch_io":true,"enable_cache_less_following_feed":true,"enable_configure_pronouns":true,"enable_conversion_model_v2":"group_2","enable_conversion_ranker_v2":"control","enable_creator_welcome_email":true,"enable_deprecate_legacy_providers_v3":true,"enable_diversification_rex":true,"enable_entities_to_follow_v2":true,"enable_eventstats_event_processing":true,"enable_explicit_signals":true,"enable_explicit_signals_updated_post_previews":true,"enable_footer_app_buttons":true,"enable_google_one_tap":true,"enable_google_webhook":true,"enable_group_gifting":true,"enable_iceland_forced_android":true,"enable_import":true,"enable_intrinsic_automatic_actions":true,"enable_ios_autorefresh":true,"enable_ios_dynamic_paywall_aspiriational":true,"enable_ios_dynamic_paywall_programming":true,"enable_ios_easy_resubscribe":true,"enable_ios_offline_reading":true,"enable_legacy_feed_in_iceland":true,"enable_lite_archive_page":true,"enable_lite_continue_this_thread":true,"enable_lite_homepage":true,"enable_lite_response_markup":true,"enable_lite_server_upstream_deadlines":true,"enable_lo_homepage":"control","enable_maim_the_meter":true,"enable_marketing_emails":true,"enable_mastodon_avatar_upload":true,"enable_mastodon_for_members":true,"enable_mastodon_for_members_username_selection":true,"enable_medium2_kbfd":true,"enable_members_only_audio":true,"enable_ml_rank_rex_anno":true,"enable_moc_load_processor_all_recs_surfaces":true,"enable_moc_load_processor_c":true,"enable_moc_load_processor_first_story":true,"enable_new_manage_membership_flow":true,"enable_new_stripe_customers":true,"enable_newsletter_lo_flow_custom_domains":true,"enable_pill_based_home_feed":true,"enable_pp_country_expansion":true,"enable_pp_v4":true,"enable_pre_pp_v4":true,"enable_premium_tier":true,"enable_premium_tier_badge":true,"enable_publication_hierarchy_web":true,"enable_ranker_v10":"control","enable_recaptcha_enterprise":true,"enable_recirc_model":true,"enable_recommended_publishers_query":true,"enable_rex_aggregator_v2":true,"enable_rex_new_push_notification_endpoint":true,"enable_rex_reading_history":true,"enable_rito_upstream_deadlines":true,"enable_seamless_social_sharing":true,"enable_see_pronouns":true,"enable_sharer_create_post_share_key":true,"enable_sharer_validate_post_share_key":true,"enable_simplified_digest_v2_b":true,"enable_speechify_ios":true,"enable_speechify_widget":true,"enable_sprig":true,"enable_starspace":true,"enable_susi_redesign_android":true,"enable_susi_redesign_ios":true,"enable_switch_plan_premium_tier":true,"enable_tag_recs":true,"enable_tick_landing_page":true,"enable_tipping_v0_android":true,"enable_tipping_v0_ios":true,"enable_tribute_landing_page":true,"enable_update_explore_wtf":true,"enable_update_topic_portals_wtf":true,"enable_updated_pub_recs_ui":true,"enable_verifications_service":true,"glyph_font_set":"m2-unbound-source-serif-pro","goliath_externalsearch_enable_comment_deindexation":true,"ios_display_paywall_after_onboarding":true,"ios_enable_friend_links_creation":true,"ios_enable_friend_links_postpage_banners":true,"ios_enable_home_post_menu":true,"ios_enable_lock_responses":true,"ios_enable_verified_book_author":true,"ios_iceland_nux":true,"ios_in_app_free_trial":true,"ios_remove_twitter_onboarding_step":true,"ios_social_share_sheet":true,"limit_post_referrers":true,"limit_user_follows":true,"mobile_custom_app_icon":true,"num_post_bottom_responses_to_show":1,"onboarding_tags_from_top_views":true,"reader_fair_distribution_non_qp":true,"redefined_top_posts":true,"reengagement_notification_duration":3,"rex_generator_max_candidates":1000,"signin_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","signup_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","skip_fs_cache_user_vals":true},"xsrfToken":"","iosAppId":"828256236","supportEmail":"yourfriends@medium.com","fp":{"/icons/monogram-mask.svg":"https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg","/icons/favicon-medium-editor.ico":"https://cdn-static-1.medium.com/_/fp/icons/favicon-medium-editor.PiakrZWB7Yb80quUVQWM6g.12.ico"},"authBaseUrl":"https://medium.com","imageUploadSizeMb":25,"isAuthDomainRequest":true,"algoliaApiEndpoint":"https://MQ57UUUQZ2-dsn.algolia.net","algoliaAppId":"MQ57UUUQZ2","algoliaSearchOnlyApiKey":"394474ced050e3911ae2249ecc774921","iosAppStoreUrl":"https://itunes.apple.com/app/medium-everyones-stories/id828256236?pt=698524&mt=8","iosAppLinkBaseUrl":"medium:","algoliaIndexPrefix":"medium_","androidPlayStoreUrl":"https://play.google.com/store/apps/details?id=com.medium.reader","googleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","androidPackage":"com.medium.reader","androidPlayStoreMarketScheme":"market://details?id=com.medium.reader","googleAuthUri":"https://accounts.google.com/o/oauth2/auth","androidScheme":"medium","layoutData":{"useDynamicScripts":false,"googleAnalyticsTrackingCode":"G-7JY7T788PK","jsShivUrl":"https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js","useDynamicCss":false,"faviconUrl":"https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","faviconImageId":"5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","fontSets":[{"id":8,"url":"https://glyph.medium.com/css/e/sr/latin/e/ssr/latin/e/ssb/latin/m2-unbound-source-serif-pro.css"},{"id":11,"url":"https://glyph.medium.com/css/m2-unbound-source-serif-pro.css"},{"id":9,"url":"https://glyph.medium.com/css/mkt.css"}],"glyphUrl":"https://glyph.medium.com"},"authBaseUrlRev":"moc.muidem//:sptth","stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","archiveUploadSizeMb":100,"previewConfig2":{"weightThreshold":1,"weightImageParagraph":0.05,"raiseImage":true,"enforceHeaderHierarchy":true,"isImageInsetRight":true},"isAmp":false,"iosScheme":"medium","facebook":{"key":"542599432471018","namespace":"medium-com","scope":{"default":["public_profile","email"],"connect":["public_profile","email"],"login":["public_profile","email"],"share":["public_profile","email"]}},"memberContentTopicId":"13d7efd82fb2","audioContentTopicId":"3792abbd134","isDoNotAuth":false,"buggle":{"videoUrl":"https://cdn-videos-1.medium.com","audioUrl":"https://cdn-audio-1.medium.com"},"referrerType":5,"partnerProgramEmail":"partnerprogram@medium.com","recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","countryCode":"SG","bypassMeter":false,"branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","paypal":{"clientMode":"production","oneYearGift":{"name":"Medium Membership (1 Year, Digital Gift Code)","description":"Unlimited access to the best and brightest stories on Medium. Gift codes can be redeemed at medium.com/redeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"}},"collectionConfig":{"mediumOwnedAndOperatedCollectionIds":["8a9336e5bb4","b7e45b22fec3","193b68bd4fba","8d6b8a439e32","54c98c43354d","3f6ecf56618","d944778ce714","92d2092dc598","ae2a65f35510","1285ba81cada","544c7006046e","fc8964313712","40187e704f1c","88d9857e584e","7b6769f2748b","bcc38c8f6edf","cef6983b292","cb8577c9149e","444d13b52878","713d7dbc99b0","ef8e90590e66","191186aaafa0","55760f21cdc5","9dc80918cc93","bdc4052bbdba","8ccfed20cbb2"]},"bypassMeterWithShareKey":false,"recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","cdcMessaging":[{"text":"For more information on the novel coronavirus and Covid-19, visit ","href":"","type":"text","start":0,"end":0},{"text":"cdc.gov","href":"https://www.cdc.gov/coronavirus/2019-nCoV","type":"link","start":66,"end":73},{"text":".","href":"","type":"text","start":0,"end":0}],"braintree":{"merchantId":"m56f8fqpf7ngnrd4"},"diagnostics":{},"domain":"medium.com"} // ]]></script><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.8ve66ihj1dVpByzcJOrOvg.12.js" async></script><script>// <![CDATA[ window["obvInit"]({"references":{"Collection":{"4da7dfd21a33":{"id":"4da7dfd21a33","name":"Flutter","slug":"flutter","tags":["MOBILE APP DEVELOPMENT","FLUTTER","GOOGLE","IOS APP DEVELOPMENT","ANDROID APP DEVELOPMENT"],"creatorId":"2df4e577749c","description":"Flutter is Google's UI framework for crafting high-quality native interfaces on iOS, Android, web, and desktop. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source. Learn more at https://flutter.dev","shortDescription":"Flutter is Google's UI framework for crafting high-quality…","image":{"imageId":"1*5-aoK8IBmXve5whBQM90GA.png","filter":"","backgroundSize":"","originalWidth":1000,"originalHeight":1000,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":57055,"activeAt":1733252461984},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"1*KvnfbD1F5CzEsU9wSmRZyA.png","filter":"","backgroundSize":"","originalWidth":538,"originalHeight":141,"strategy":"resample","height":0,"width":0},"twitterUsername":"flutterdev","collectionMastheadId":"6f4efe3cee51","sections":[{"type":2,"collectionHeaderMetadata":{"title":"Flutter","description":"Build beautiful native apps in record time","backgroundImage":{},"logoImage":{"id":"1*XrbUBnZb-Vp9jRDGqU-BXQ@2x.png","originalWidth":2000,"originalHeight":2109,"alt":"Flutter"},"alignment":2,"layout":5}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":1,"postIds":["204b7d20c45d"]}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":9,"postIds":[]}},{"type":1,"postListMetadata":{"source":1,"layout":5,"number":15,"postIds":[]}}],"tintColor":"#FF01579B","lightText":true,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF498BD1","point":0},{"color":"#FF4781C0","point":0.1},{"color":"#FF4477AF","point":0.2},{"color":"#FF416D9E","point":0.3},{"color":"#FF3D638D","point":0.4},{"color":"#FF38587C","point":0.5},{"color":"#FF324D6B","point":0.6},{"color":"#FF2C415A","point":0.7},{"color":"#FF253548","point":0.8},{"color":"#FF1C2937","point":0.9},{"color":"#FF121B25","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FF01579B","point":0},{"color":"#FF306CA9","point":0.1},{"color":"#FF4D7FB7","point":0.2},{"color":"#FF6591C4","point":0.3},{"color":"#FF7CA3D0","point":0.4},{"color":"#FF92B4DC","point":0.5},{"color":"#FFA7C4E7","point":0.6},{"color":"#FFBCD3F1","point":0.7},{"color":"#FFD0E3FC","point":0.8},{"color":"#FFE3F2FF","point":0.9},{"color":"#FFF7FFFF","point":1}],"backgroundColor":"#FF01579B"},"highlightSpectrum":{"colorPoints":[{"color":"#FFE8F5FF","point":0},{"color":"#FFE3F3FF","point":0.1},{"color":"#FFDEF2FF","point":0.2},{"color":"#FFDAF0FF","point":0.3},{"color":"#FFD5EFFF","point":0.4},{"color":"#FFD0EDFF","point":0.5},{"color":"#FFCBECFF","point":0.6},{"color":"#FFC6EBFF","point":0.7},{"color":"#FFC1E9FF","point":0.8},{"color":"#FFBCE8FF","point":0.9},{"color":"#FFB6E6FF","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF63A4EB","point":0},{"color":"#FF72ACED","point":0.1},{"color":"#FF81B4EF","point":0.2},{"color":"#FF8FBCF1","point":0.3},{"color":"#FF9CC4F3","point":0.4},{"color":"#FFA9CBF5","point":0.5},{"color":"#FFB6D3F6","point":0.6},{"color":"#FFC2DAF8","point":0.7},{"color":"#FFCFE2FA","point":0.8},{"color":"#FFDAE9FC","point":0.9},{"color":"#FFE6F0FE","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":1,"title":"Announcements","tagSlug":"announcements","url":"https://medium.com/flutter/tagged/announcements","source":"tagSlug"},{"type":1,"title":"Performance","tagSlug":"performance","url":"https://medium.com/flutter/tagged/performance","source":"tagSlug"},{"type":1,"title":"Material Design","tagSlug":"material-design","url":"https://medium.com/flutter/tagged/material-design","source":"tagSlug"},{"type":1,"title":"Web Development","tagSlug":"web-development","url":"https://medium.com/flutter/tagged/web-development","source":"tagSlug"},{"type":3,"title":"flutter.dev","url":"https://flutter.dev/"}],"colorBehavior":2,"collectionFeatures":[25],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"Flutter","description":"Build beautiful native apps in record time","backgroundImage":{},"logoImage":{"id":"1*XrbUBnZb-Vp9jRDGqU-BXQ@2x.png","originalWidth":2000,"originalHeight":2109,"alt":"Flutter"},"alignment":2,"layout":5},"subscriberCount":57055,"tagline":"Flutter is an open source UI framework for crafting beautiful apps","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092847310,"type":"Collection"}},"User":{"696ae61bc6e2":{"userId":"696ae61bc6e2","name":"Filip Hracek","username":"filiph","createdAt":1440499743108,"imageId":"1*dZx7Dxmr4VXmjc5U8yDf3w.jpeg","backgroundImageId":"","bio":"I’m a programming buff with formal training in journalism. I build games, teach programming, explain things, and create silly software experiments.","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"subdomainCreatedAt":1619463171044,"hasCompletedProfile":false,"userDismissableFlags":[29,12,8,21,3,2,1,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"9fb96b11de78":{"userId":"9fb96b11de78","name":"Yuqian Li","username":"liyuqian","createdAt":1530898609329,"imageId":"1*T1lv65-OBsGrBSs6mvgvqg.jpeg","backgroundImageId":"","bio":"Software engineer at Google dedicated to Flutter performance","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedAndroidApp":1605473722695,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[2],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"4631513e40c0":{"userId":"4631513e40c0","name":"Shams Zakhour","username":"shaza","createdAt":1460740431192,"imageId":"0*LHz-9FgHd3doKgCM.","backgroundImageId":"","bio":"I write Flutter docs.","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[29,12,8,5,3,2,18,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"e3bf847b45be":{"userId":"e3bf847b45be","name":"Pierre-Louis Guidez","username":"guidez","createdAt":1433552881268,"imageId":"","backgroundImageId":"","bio":"Software engineer","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedIosApp":1574852594895,"isMembershipTrialEligible":true,"optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[29,12,8,5,21,36,3,2,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en","type":"User"},"50dd805ce3b8":{"userId":"50dd805ce3b8","name":"JaYoung Lee","username":"jayoung.lee","createdAt":1523069946132,"imageId":"1*09ekgauj46kjGlHoi94FwA.jpeg","backgroundImageId":"","bio":"UX Researcher at Google","twitterScreenName":"","allowNotes":0,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[32,12,8,21,30,2,18,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"4cad326de3d7":{"userId":"4cad326de3d7","name":"Per Classon","username":"perclasson","createdAt":1384734428033,"imageId":"2*d-UpSVU0saEV2On5JBvYaQ.jpeg","backgroundImageId":"","bio":"Software Engineer 👨🏼💻","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedIosApp":1585587432311,"isMembershipTrialEligible":true,"optInToIceland":true,"subdomainCreatedAt":1607700516534,"hasCompletedProfile":false,"userDismissableFlags":[8,29,3,2,1],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-se","type":"User"}},"Post":{"e949b9dbcf06":{"id":"e949b9dbcf06","versionId":"7945edb10559","creatorId":"696ae61bc6e2","homeCollectionId":"4da7dfd21a33","title":"Raster thread performance optimization tips","detectedLanguage":"en","latestVersion":"7945edb10559","latestPublishedVersion":"7945edb10559","hasUnpublishedEdits":false,"latestRev":505,"createdAt":1629289438511,"updatedAt":1691261660119,"acceptedAt":0,"firstPublishedAt":1630456144565,"latestPublishedAt":1630456144565,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Recently, I sat down to tweak the performance of FlutterFolio, an app that was built as a design showcase for Flutter Engage. With a…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*16rv_KQNNU3IsAHCfI3G6A.png","filter":"","backgroundSize":"","originalWidth":1920,"originalHeight":1080,"strategy":"resample","height":0,"width":0},"wordCount":2346,"imageCount":11,"readingTime":10.152830188679246,"subtitle":"Recently, I sat down to tweak the performance of FlutterFolio, an app that was built as a design showcase for Flutter Engage. With a…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":215,"isBookmarked":false,"tags":[{"slug":"flutter","name":"Flutter","postCount":47354,"metadata":{"postCount":47354,"coverImage":{"id":"1*t9RLfJH_3ItvRfp9zcK0Sw.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"performance","name":"Performance","postCount":29379,"metadata":{"postCount":29379,"coverImage":{"id":"1*h5ULv-tGdDA3yD2c685lFQ.png","originalWidth":1400,"originalHeight":682,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":8,"links":{"entries":[{"url":"https://flutter.dev/docs/development/tools/devtools/inspector","alts":[],"httpStatus":200},{"url":"https://medium.com/flutter/performance-testing-of-flutter-apps-df7669bb7df7","alts":[{"type":3,"url":"medium://p/df7669bb7df7"},{"type":2,"url":"medium://p/df7669bb7df7"}],"httpStatus":200},{"url":"https://skia.org/","alts":[],"httpStatus":200},{"url":"https://api.skia.org/classSkCanvas.html","alts":[],"httpStatus":200},{"url":"https://api.skia.org/classSkCanvas.html#a3f8ea661c6021dc4dde325aab87870bf","alts":[],"httpStatus":200},{"url":"https://api.flutter.dev/flutter/dart-ui/Canvas-class.html","alts":[],"httpStatus":200},{"url":"https://api.flutter.dev/flutter/widgets/CustomPaint-class.html","alts":[],"httpStatus":200},{"url":"https://github.com/gskinnerTeam/flutter-folio/blob/2bb2101c14ee3f30e11f966e9ce6c50dee600c0b/lib/views/home_page/covers_flow_list_mobile.dart#L36-L40","alts":[],"httpStatus":200},{"url":"https://github.com/gskinnerTeam/flutter-folio/blob/2bb2101c14ee3f30e11f966e9ce6c50dee600c0b/lib/views/home_page/book_cover/book_cover.dart#L77-L122","alts":[],"httpStatus":200},{"url":"https://api.flutter.dev/flutter/painting/debugInvertOversizedImages.html","alts":[],"httpStatus":200},{"url":"https://github.com/gskinnerTeam/flutter-folio/pull/62","alts":[],"httpStatus":200},{"url":"https://www.google.com/search?q=PhysicalShapeLayer%3A%3APaint","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/72526#issuecomment-749185938","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1630456146165},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":1740,"sectionCount":1,"readingList":0,"topics":[{"topicId":"55f1c20aba7a","slug":"software-engineering","createdAt":1491949272237,"deletedAt":0,"image":{"id":"1*U8FboK4lz1wqwQC6IcqxKw@2x.jpeg","originalWidth":5507,"originalHeight":3098},"name":"Software Engineering","description":"Back-end to front-end.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Software Engineering News and Articles — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"raster-thread-performance-optimization-tips","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"raster-thread-performance-optimization-tips-e949b9dbcf06","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*16rv_KQNNU3IsAHCfI3G6A.png","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},{"name":"6561","type":3,"text":"Raster thread performance optimization tips","markups":[],"alignment":1},{"name":"0447","type":1,"text":"Recently, I sat down to tweak the performance of FlutterFolio, an app that was built…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Recently, I sat down to tweak the performance of FlutterFolio, an app that was built as a design showcase for Flutter Engage. With a…"},"license":4,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4da7dfd21a33","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":3,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"primaryTopicId":"55f1c20aba7a","isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"6561","type":3,"text":"Raster thread performance optimization tips","markups":[]},{"name":"0447","type":1,"text":"Recently, I sat down to tweak the performance of FlutterFolio, an app that was built as a design showcase for Flutter Engage. With a single change, I made FlutterFolio significantly faster.","markups":[]},{"name":"7f8d","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*16rv_KQNNU3IsAHCfI3G6A.png","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},{"name":"c2fd","type":1,"text":"But, first, I had to search for what to change. This article is about that search.","markups":[]},{"name":"d85e","type":1,"text":"FlutterFolio is a…","markups":[]}],"sections":[{"name":"53e9","startIndex":0}]},"isFullContent":false,"subtitle":"Recently, I sat down to tweak the performance of FlutterFolio, an app that was built as a design showcase for Flutter Engage. With a…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"5c597168b6bb":{"id":"5c597168b6bb","versionId":"831be59b7661","creatorId":"9fb96b11de78","homeCollectionId":"4da7dfd21a33","title":"Flutter Performance Updates in the first half of 2020","detectedLanguage":"en","latestVersion":"831be59b7661","latestPublishedVersion":"831be59b7661","hasUnpublishedEdits":false,"latestRev":992,"createdAt":1611853901760,"updatedAt":1640872383691,"acceptedAt":0,"firstPublishedAt":1613093550080,"latestPublishedAt":1613093550080,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"By Yuqian Li and Shams Zakhour","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*5WEbz38iKKh5EfCj55mGYw.png","filter":"","backgroundSize":"","originalWidth":1804,"originalHeight":1384,"strategy":"resample","height":0,"width":0},"wordCount":1643,"imageCount":1,"readingTime":6.4,"subtitle":"By Yuqian Li and Shams Zakhour","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":65,"isBookmarked":false,"tags":[{"slug":"performance","name":"Performance","postCount":29379,"metadata":{"postCount":29379,"coverImage":{"id":"1*h5ULv-tGdDA3yD2c685lFQ.png","originalWidth":1400,"originalHeight":682,"isFeatured":true}},"type":"Tag"},{"slug":"flutter","name":"Flutter","postCount":47354,"metadata":{"postCount":47354,"coverImage":{"id":"1*t9RLfJH_3ItvRfp9zcK0Sw.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":3,"links":{"entries":[{"url":"https://dart-review.googlesource.com/c/sdk/+/132603","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/146785","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/137788","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/131824","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/132663","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/149395","alts":[],"httpStatus":200},{"url":"https://skia-review.googlesource.com/c/skia/+/272654/","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/150925","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/152100","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/133660","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/133586","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/152323","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/126648","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/134294","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/136190","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/132606","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/131833","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/134282","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/151515","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/142025","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/130621","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/146780","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/135313","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/148762","alts":[],"httpStatus":200},{"url":"https://gist.github.com/flar/1cafb43533652e8e16ea224d93c8a1ec","alts":[],"httpStatus":200},{"url":"https://flutter-engine-perf.skia.org/e/?begin=1593164913&end=1594241999&num_commits=290&queries=test%3DBM_PlatformMessageResponseDartComplete","alts":[],"httpStatus":200},{"url":"https://flutter-flutter-perf.skia.org/e/?begin=1597686064&end=1597961767&numCommits=190&queries=branch%3Dmaster%26sub_result%3Dworst_frame_rasterizer_time_millis%26test%3Dflutter_gallery_sksl_warmup_ios32__transition_perf%26test%3Dflutter_gallery_ios32__transition_perf&showZero=false","alts":[],"httpStatus":200},{"url":"https://flutter-engine-perf.skia.org/e/?begin=1590623523&end=1590741783&keys=X0fffad7016a0440022353623dc52ae28&xbaroffset=17822","alts":[],"httpStatus":200},{"url":"https://flutter-flutter-perf.skia.org/e/?begin=1597812484&end=1597873497&queries=branch%3Dmaster%26sub_result%3Dworst_frame_rasterizer_time_millis%26test%3Dflutter_gallery_sksl_warmup__transition_perf%26test%3Dflutter_gallery__transition_perf","alts":[],"httpStatus":200},{"url":"https://github.com/ajinasokan/flutter_displaymode","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/41704","alts":[],"httpStatus":200},{"url":"https://dev.gskinner.com/flutter_perf/shadows/#/","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/40388","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/32967","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/32652","alts":[],"httpStatus":200},{"url":"https://github.com/asakhart","alts":[],"httpStatus":200},{"url":"https://golem.corp.goog/Benchmark?team=flutter&benchmark=flutter_gallery_total_size","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/42366","alts":[],"httpStatus":200},{"url":"https://github.com/crelier","alts":[],"httpStatus":200},{"url":"https://github.com/dnicoara","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/21364","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/53174","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/48516","alts":[],"httpStatus":200},{"url":"https://github.com/nathanrogersgoogle","alts":[],"httpStatus":200},{"url":"https://github.com/scutlight","alts":[],"httpStatus":200},{"url":"https://github.com/fmeawad","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/48775","alts":[],"httpStatus":200},{"url":"https://github.com/rdaum","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/50972","alts":[],"httpStatus":200},{"url":"https://github.com/rakudrama","alts":[],"httpStatus":200},{"url":"https://github.com/albertwang0116","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/52684","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/40004","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/43464","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/16375","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/41703","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/49456","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/49865","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/48725","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/9672","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/43642","alts":[],"httpStatus":200},{"url":"https://github.com/askeksa-google","alts":[],"httpStatus":200},{"url":"https://github.com/cskau-g","alts":[],"httpStatus":200},{"url":"https://github.com/ajinasokan","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/47664","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/49730","alts":[],"httpStatus":200},{"url":"https://github.com/dreveman","alts":[],"httpStatus":200},{"url":"https://github.com/willlarche","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/45406","alts":[],"httpStatus":200},{"url":"https://github.com/jason-simmons","alts":[],"httpStatus":200},{"url":"https://docs.google.com/spreadsheets/d/10AXb-4ulJipM6ZtiieFEBXhmybB6-_gTV6HDQlgcQdA/edit#gid=2047450737&range=D85","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/44510","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/45797","alts":[],"httpStatus":200},{"url":"https://github.com/johngro","alts":[],"httpStatus":200},{"url":"https://github.com/acoutts","alts":[],"httpStatus":200},{"url":"https://github.com/sstrickl","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/53768","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/16311","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/52864","alts":[],"httpStatus":200},{"url":"https://github.com/devoncarew","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/43644","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/58572","alts":[],"httpStatus":200},{"url":"https://github.com/mkustermann","alts":[],"httpStatus":200},{"url":"https://github.com/bsalomon","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/gallery/pull/115","alts":[],"httpStatus":200},{"url":"https://github.com/digiter","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/48731","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/gallery/pull/109","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/gallery/pull/109#issue-406182087","alts":[],"httpStatus":200},{"url":"https://github.com/flar","alts":[],"httpStatus":200},{"url":"https://github.com/pennzht","alts":[],"httpStatus":200},{"url":"https://github.com/redbrogdon","alts":[],"httpStatus":200},{"url":"https://github.com/zljj0818","alts":[],"httpStatus":200},{"url":"https://github.com/a-siva","alts":[],"httpStatus":200},{"url":"https://github.com/arbreng","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/54950","alts":[],"httpStatus":200},{"url":"https://github.com/rmacnak-google","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/gallery/pull/183","alts":[],"httpStatus":200},{"url":"https://github.com/amirh","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/49551","alts":[],"httpStatus":200},{"url":"https://medium.com/u/9fb96b11de78?source=post_page-----4c170934f914--------------------------------","alts":[{"type":2,"url":"medium://@liyuqian"},{"type":3,"url":"medium://@liyuqian"}],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/58803","alts":[],"httpStatus":200},{"url":"https://github.com/terrylucas","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/f56b0f690789b6f0e2e5bc1340abf4eba414b7a0","alts":[],"httpStatus":200},{"url":"https://github.com/rishabnayak","alts":[],"httpStatus":200},{"url":"https://github.com/filiph","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/e2faac751e1ef3707730e6e48f4d8f22ecbf35c3","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17866","alts":[],"httpStatus":200},{"url":"https://github.com/dkwingsmt","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/50224","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/37753","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/6469","alts":[],"httpStatus":200},{"url":"https://github.com/tvolkert","alts":[],"httpStatus":200},{"url":"https://github.com/dcharkes","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/39432","alts":[],"httpStatus":200},{"url":"https://medium.com/u/4631513e40c0?source=post_page-----4c170934f914--------------------------------","alts":[{"type":2,"url":"medium://@shaza"},{"type":3,"url":"medium://@shaza"}],"httpStatus":200},{"url":"https://github.com/liyuqian","alts":[],"httpStatus":200},{"url":"https://github.com/mraleph","alts":[],"httpStatus":200},{"url":"https://github.com/clocksmith","alts":[],"httpStatus":200},{"url":"https://github.com/chunhtai","alts":[],"httpStatus":200},{"url":"https://github.com/alexmarkov","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/44013","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/58277","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/devtools/pull/1758","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/plugins/pull/1615","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17864","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17162","alts":[],"httpStatus":200},{"url":"https://github.com/hansmuller","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/35142","alts":[],"httpStatus":200},{"url":"https://github.com/rami-a","alts":[],"httpStatus":200},{"url":"https://github.com/josealba","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/38016","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/18808","alts":[],"httpStatus":200},{"url":"https://github.com/ferhatb","alts":[],"httpStatus":200},{"url":"https://flutter.dev/go/widget-tree-image-cache","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/55181","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/50316","alts":[],"httpStatus":200},{"url":"http://flutter.dev/go/engine-cpu-profiling","alts":[],"httpStatus":200},{"url":"https://github.com/chinmaygarde","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/42987","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/41194","alts":[],"httpStatus":200},{"url":"https://github.com/guidezpl","alts":[],"httpStatus":200},{"url":"https://github.com/mdebbar","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/54903","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/37754","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17753","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/18838","alts":[],"httpStatus":200},{"url":"https://github.com/cbracken","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/website/pull/3836","alts":[],"httpStatus":200},{"url":"https://github.com/bparrishmines","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/51477","alts":[],"httpStatus":200},{"url":"https://github.com/sigurdm","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/54676","alts":[],"httpStatus":200},{"url":"https://github.com/xster","alts":[],"httpStatus":200},{"url":"https://github.com/cyanglaz","alts":[],"httpStatus":200},{"url":"https://github.com/ignatz","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/website/pull/4080","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/47489","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17329","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/53206","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17861","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/58743","alts":[],"httpStatus":200},{"url":"https://github.com/sfshaza2","alts":[],"httpStatus":200},{"url":"https://github.com/piinks","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/53607","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17148","alts":[],"httpStatus":200},{"url":"https://github.com/gw280","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/9383","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/d77f4913a18ecce8c4be95cbaa4299ff1521dc10","alts":[],"httpStatus":200},{"url":"https://github.com/yjbanov","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/61045#issuecomment-673409491","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/61045#issuecomment-668609516","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/53273","alts":[],"httpStatus":200},{"url":"https://github.com/kenzieschmoll","alts":[],"httpStatus":200},{"url":"https://github.com/gspencergoog","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/54494","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17431","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/50842","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/13489","alts":[],"httpStatus":200},{"url":"https://github.com/gaaclarke","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/8936","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/35162","alts":[],"httpStatus":200},{"url":"https://github.com/goderbauer","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/53959","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17601","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/29443","alts":[],"httpStatus":200},{"url":"https://github.com/christopherfujino","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/18208","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17300","alts":[],"httpStatus":200},{"url":"https://github.com/iskakaushik","alts":[],"httpStatus":200},{"url":"https://github.com/blasten","alts":[],"httpStatus":200},{"url":"https://github.com/jmagman","alts":[],"httpStatus":200},{"url":"https://github.com/hixie","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/56638","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17080","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/14828","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/51808","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/53859","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/56416","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/50851#issuecomment-586625240","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/50851","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/18945","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/49377","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/55486","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/13367","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/35592","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/49842","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/a2bb7301c5795e6b28089a8dc96e6ab5ca798e22","alts":[],"httpStatus":200},{"url":"https://github.com/zanderso","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17154","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/gallery/pull/20","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/54507#issue-598145549","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/54507#issuecomment-628235938","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17175","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17175#issuecomment-647778369","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/54507","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17621","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/50242","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/48900#issuecomment-577297920","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/18752","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/48900","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/8e7ffafbafc8203361111ddcafe0e0fcc372edf8","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/devtools/pull/1999","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/website/pull/4430","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/gallery/pull/100","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/50297","alts":[],"httpStatus":200},{"url":"https://github.com/dnfield","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/55414","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/gallery/pull/163","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/53422","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17867","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/15980","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/13056","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/59803","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/12412","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/17408","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/18516","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/11070","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/18225","alts":[],"httpStatus":200},{"url":"https://github.com/jonahwilliams","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/52717","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/59883","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/59883#issue-437275465","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/14491","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/57576","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/50318","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/18087","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/49389","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/50979","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/49737#issue-368790736","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/49737","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1613093555203},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":636,"sectionCount":1,"readingList":0,"topics":[]},"coverless":true,"slug":"flutter-performance-updates-in-the-first-half-of-2020","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"flutter-performance-updates-in-the-first-half-of-2020-5c597168b6bb","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*5WEbz38iKKh5EfCj55mGYw.png","originalWidth":1804,"originalHeight":1384,"isFeatured":true}},{"name":"e267","type":3,"text":"Flutter performance updates in the first half of 2020","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"By Yuqian Li and Shams Zakhour"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4da7dfd21a33","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"e267","type":3,"text":"Flutter performance updates in the first half of 2020","markups":[]},{"name":"8ab5","type":1,"text":"By Yuqian Li and Shams Zakhour","markups":[{"type":3,"start":3,"end":12,"href":"https://medium.com/u/9fb96b11de78?source=post_page-----4c170934f914--------------------------------","title":"","rel":"noopener","anchorType":0},{"type":3,"start":17,"end":30,"href":"https://medium.com/u/4631513e40c0?source=post_page-----4c170934f914--------------------------------","title":"","rel":"noopener","anchorType":0}]},{"name":"840f","type":1,"text":"Being fast is a key pillar to Flutter. This article highlights performance improvements from the first half of 2020 implemented by folks from the Flutter community.","markups":[]},{"name":"59b8","type":1,"text":"If you’ve helped out with performance after June 2020, we will cover that in a future post. We…","markups":[]}],"sections":[{"name":"591d","startIndex":0}]},"isFullContent":false,"subtitle":"By Yuqian Li and Shams Zakhour"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"4c170934f914":{"id":"4c170934f914","versionId":"e95c28dd7cf3","creatorId":"4631513e40c0","homeCollectionId":"4da7dfd21a33","title":"Flutter Performance Updates in 2019","detectedLanguage":"en","latestVersion":"e95c28dd7cf3","latestPublishedVersion":"e95c28dd7cf3","hasUnpublishedEdits":false,"latestRev":2158,"createdAt":1596041902460,"updatedAt":1691261285893,"acceptedAt":0,"firstPublishedAt":1596153618490,"latestPublishedAt":1596224566041,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"By Yuqian Li and Shams Zakhour","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*bWXPMmCXDmBWN7rZbxZcyg.png","filter":"","backgroundSize":"","originalWidth":1400,"originalHeight":679,"strategy":"resample","height":0,"width":0},"wordCount":1432,"imageCount":2,"readingTime":5.787106918238994,"subtitle":"By Yuqian Li and Shams Zakhour","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":47,"isBookmarked":false,"tags":[{"slug":"flutter","name":"Flutter","postCount":47354,"metadata":{"postCount":47354,"coverImage":{"id":"1*t9RLfJH_3ItvRfp9zcK0Sw.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"performance","name":"Performance","postCount":29379,"metadata":{"postCount":29379,"coverImage":{"id":"1*h5ULv-tGdDA3yD2c685lFQ.png","originalWidth":1400,"originalHeight":682,"isFeatured":true}},"type":"Tag"},{"slug":"improvement","name":"Improvement","postCount":14389,"metadata":{"postCount":14389,"coverImage":{"id":"0*PW-Rb738triscylB","originalWidth":602,"originalHeight":752,"isFeatured":true}},"type":"Tag"},{"slug":"flutter-app-development","name":"Flutter App Development","postCount":15306,"metadata":{"postCount":15306,"coverImage":{"id":"1*umWe3sUfevF0bex4IBOJzA.png","originalWidth":685,"originalHeight":396}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://github.com/aartbik","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/47108","alts":[],"httpStatus":200},{"url":"https://github.com/Dart-Code/Dart-Code/issues/1840","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/14265","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/46cef9bfddf3cfc05618448d228f0e3377058baf","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/website/pull/3159/","alts":[],"httpStatus":200},{"url":"https://github.com/cskau-g","alts":[],"httpStatus":200},{"url":"https://github.com/cyanglaz","alts":[],"httpStatus":200},{"url":"https://github.com/jensjoha","alts":[],"httpStatus":200},{"url":"https://flutter.dev/docs/perf","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/16520","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/128200","alts":[],"httpStatus":200},{"url":"https://github.com/amott","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/c873220e43af1a1f4675df4108e575465e598578","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/122644","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/121121","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/34590","alts":[],"httpStatus":200},{"url":"https://github.com/sjindel","alts":[],"httpStatus":200},{"url":"https://github.com/alexmarkov","alts":[],"httpStatus":200},{"url":"https://github.com/yjbanov","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/devtools/blob/master/packages/devtools/CHANGELOG.md#018---2019-10-01","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/14323","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/31865","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/38814","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/f8d42542ddd40c06bb71d6fb85d78ed4bbffa785","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/13976","alts":[],"httpStatus":200},{"url":"https://fuchsia-review.googlesource.com/c/topaz/+/300135","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/31086","alts":[],"httpStatus":200},{"url":"https://github.com/rosswang","alts":[],"httpStatus":200},{"url":"https://github.com/sstrickl","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/b69596bb1ba81874e4b9d7a577071c67c357ec39","alts":[],"httpStatus":200},{"url":"https://github.com/cbracken","alts":[],"httpStatus":200},{"url":"https://fuchsia-review.googlesource.com/c/topaz/+/306773","alts":[],"httpStatus":200},{"url":"https://github.com/liyuqian","alts":[],"httpStatus":200},{"url":"https://github.com/zsunkun","alts":[],"httpStatus":200},{"url":"https://fuchsia-review.googlesource.com/c/topaz/+/307953","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/14319","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/118280","alts":[],"httpStatus":200},{"url":"https://github.com/caseyhillers","alts":[],"httpStatus":200},{"url":"https://skia-review.googlesource.com/c/skia/+/234413","alts":[],"httpStatus":200},{"url":"https://skia-review.googlesource.com/c/skia/+/237904","alts":[],"httpStatus":200},{"url":"https://flutter-dashboard.appspot.com/benchmarks.html","alts":[],"httpStatus":200},{"url":"https://github.com/johnniwinther","alts":[],"httpStatus":200},{"url":"https://github.com/xster","alts":[],"httpStatus":200},{"url":"https://github.com/blasten","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/36064","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/46184","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/f56b0f690789b6f0e2e5bc1340abf4eba414b7a0","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/8e7ffafbafc8203361111ddcafe0e0fcc372edf8","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/120661","alts":[],"httpStatus":200},{"url":"https://github.com/dreveman","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/46720","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/127921","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/47419","alts":[],"httpStatus":200},{"url":"https://github.com/jonahwilliams","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/a2bb7301c5795e6b28089a8dc96e6ab5ca798e22","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/d77f4913a18ecce8c4be95cbaa4299ff1521dc10","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/13710","alts":[],"httpStatus":200},{"url":"https://github.com/godofredoc","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/37434","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/37192","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/47742","alts":[],"httpStatus":200},{"url":"https://github.com/dcharkes","alts":[],"httpStatus":200},{"url":"https://github.com/digiter","alts":[],"httpStatus":200},{"url":"https://github.com/chinmaygarde","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/36482#issuecomment-531067365","alts":[],"httpStatus":200},{"url":"https://github.com/Dart-Code/Dart-Code/issues/1961","alts":[],"httpStatus":200},{"url":"https://github.com/justinmc","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/127920","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/112758","alts":[],"httpStatus":200},{"url":"https://github.com/garyqian","alts":[],"httpStatus":200},{"url":"https://github.com/zanderso","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/10182#issuecomment-531953100","alts":[],"httpStatus":200},{"url":"https://github.com/keyonghan","alts":[],"httpStatus":200},{"url":"https://github.com/tvolkert","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/7919","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/f6477854cdb0da052be3423a24961feaf5a0d845","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/31865#issuecomment-566268237","alts":[],"httpStatus":200},{"url":"https://github.com/mikejurka","alts":[],"httpStatus":200},{"url":"https://github.com/gaaclarke","alts":[],"httpStatus":200},{"url":"https://fuchsia-review.googlesource.com/c/topaz/+/306772","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/24522","alts":[],"httpStatus":200},{"url":"https://github.com/lhkbob","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/dc808f3fcbf7e6de7e2b25441ff7ed891362e70a","alts":[],"httpStatus":200},{"url":"http://github.com/chinmaygarde","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/14104","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/14521","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/117200","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/119645","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/43083","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/cocoon/pull/494#issue-333227543","alts":[],"httpStatus":200},{"url":"https://github.com/mkustermann","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/121580","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/44534","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/131360","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/12385","alts":[],"httpStatus":200},{"url":"https://github.com/hixie","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/devtools/pull/1241","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/24714","alts":[],"httpStatus":200},{"url":"https://flutter.dev/docs/perf/app-size","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/118181","alts":[],"httpStatus":200},{"url":"https://fuchsia-review.googlesource.com/c/topaz/+/286735","alts":[],"httpStatus":200},{"url":"https://github.com/mraleph","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/cocoon/pull/484","alts":[],"httpStatus":200},{"url":"https://github.com/Dart-Code/Dart-Code/issues/2003","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/13710","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter-intellij/pull/4289","alts":[],"httpStatus":200},{"url":"http://github.com/liyuqian","alts":[],"httpStatus":200},{"url":"https://perf.skia.org/e/?begin=1567010155&end=1567104574&queries=name%3DGM_savelayer_with_backdrop%26os%3DiOS","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/10182","alts":[],"httpStatus":200},{"url":"https://fuchsia-review.googlesource.com/c/topaz/+/280230","alts":[],"httpStatus":200},{"url":"https://github.com/rmacnak-google","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/14326","alts":[],"httpStatus":200},{"url":"https://github.com/dnfield","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/44534#issue-339112036","alts":[],"httpStatus":200},{"url":"https://skia-review.googlesource.com/c/skia/+/260538","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/cocoon/pull/494","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues/35243","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/37275","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/14556","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/36482#issue-299068276","alts":[],"httpStatus":200},{"url":"https://dart-review.googlesource.com/c/sdk/+/119540","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/36482","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/commit/e2faac751e1ef3707730e6e48f4d8f22ecbf35c3","alts":[],"httpStatus":200},{"url":"https://github.com/flar","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/14275","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/pull/45050","alts":[],"httpStatus":200},{"url":"http://go/flutter-benchmarks","alts":[],"httpStatus":0},{"url":"https://github.com/flutter/flutter/issues/19558","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1596224567763},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":329,"sectionCount":1,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"flutter-performance-updates-in-2019","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"flutter-performance-updates-in-2019-4c170934f914","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*bWXPMmCXDmBWN7rZbxZcyg.png","originalWidth":1400,"originalHeight":679,"isFeatured":true}},{"name":"e5c1","type":3,"text":"Flutter Performance Updates in 2019","markups":[],"alignment":1},{"name":"9cae","type":1,"text":"By Yuqian Li and Shams Zakhour","markups":[{"type":3,"start":3,"end":12,"anchorType":2,"userId":"9fb96b11de78"},{"type":3,"start":17,"end":30,"anchorType":2,"userId":"4631513e40c0"}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"By Yuqian Li and Shams Zakhour"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4da7dfd21a33","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"e5c1","type":3,"text":"Flutter Performance Updates in 2019","markups":[]},{"name":"9cae","type":1,"text":"By Yuqian Li and Shams Zakhour","markups":[{"type":3,"start":3,"end":12,"anchorType":2,"userId":"9fb96b11de78"},{"type":3,"start":17,"end":30,"anchorType":2,"userId":"4631513e40c0"}]},{"name":"94dd","type":1,"text":"Being fast is a key pillar to Flutter. This article highlights performance improvements from the second half of 2019 implemented by folks from the Flutter community. (Yes, this is late, but it’s better late than never!)","markups":[]},{"name":"0140","type":1,"text":"If you’ve helped out with performance in 2020…","markups":[]}],"sections":[{"name":"af7d","startIndex":0}]},"isFullContent":false,"subtitle":"By Yuqian Li and Shams Zakhour"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"3b2558aa08fa":{"id":"3b2558aa08fa","versionId":"e45e7bfee8c8","creatorId":"e3bf847b45be","homeCollectionId":"4da7dfd21a33","title":"Building performant Flutter widgets","detectedLanguage":"en","latestVersion":"e45e7bfee8c8","latestPublishedVersion":"e45e7bfee8c8","hasUnpublishedEdits":false,"latestRev":1006,"createdAt":1595355221274,"updatedAt":1639554882616,"acceptedAt":0,"firstPublishedAt":1595505281168,"latestPublishedAt":1596496041518,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"This article is part of a series developed after the Flutter Material team worked on making the Flutter Gallery app more performant on the…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*GWFHSeCrjUgPdkJ-","filter":"","backgroundSize":"","originalWidth":960,"originalHeight":557,"strategy":"resample","height":0,"width":0},"wordCount":1406,"imageCount":5,"readingTime":6.138993710691824,"subtitle":"This article is part of a series developed after the Flutter Material team worked on making the Flutter Gallery app more performant on the…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":307,"isBookmarked":false,"tags":[{"slug":"flutter","name":"Flutter","postCount":47354,"metadata":{"postCount":47354,"coverImage":{"id":"1*t9RLfJH_3ItvRfp9zcK0Sw.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"flutter-web","name":"Flutter Web","postCount":1752,"metadata":{"postCount":1752,"coverImage":{"id":"1*Hq_wW2qaPos4gOt-zh9e7Q.png","originalWidth":1782,"originalHeight":990,"isFeatured":true}},"type":"Tag"},{"slug":"performance","name":"Performance","postCount":29379,"metadata":{"postCount":29379,"coverImage":{"id":"1*h5ULv-tGdDA3yD2c685lFQ.png","originalWidth":1400,"originalHeight":682,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"http://twitter.com/override","alts":[],"httpStatus":200},{"url":"https://flutter.dev/docs/perf/rendering/ui-performance","alts":[],"httpStatus":200},{"url":"https://material.io/components/sheets-bottom","alts":[],"httpStatus":200},{"url":"https://flutter.dev/docs/development/tools/android-studio#show-performance-data","alts":[],"httpStatus":200},{"url":"https://medium.com/@guidez","alts":[{"type":2,"url":"medium://@guidez"},{"type":3,"url":"medium://@guidez"}],"httpStatus":200},{"url":"https://dartpad.dev/a338a69afea04f746015861cd55782db","alts":[],"httpStatus":200},{"url":"https://medium.com/@clocksmith","alts":[{"type":2,"url":"medium://@clocksmith"},{"type":3,"url":"medium://@clocksmith"}],"httpStatus":200},{"url":"https://medium.com/flutter-community/flutter-laggy-animations-how-not-to-setstate-f2dd9873b8fc","alts":[{"type":3,"url":"medium://p/f2dd9873b8fc"},{"type":2,"url":"medium://p/f2dd9873b8fc"}],"httpStatus":200},{"url":"https://github.com/flutter/gallery/pull/109/files","alts":[],"httpStatus":200},{"url":"https://gist.github.com/guidezpl/54f9a03b0adbf207153178dba0bf214c","alts":[],"httpStatus":200},{"url":"https://gist.github.com/guidezpl/32518a6d22596393fa368c28e8f0ece4","alts":[],"httpStatus":200},{"url":"https://medium.com/flutter/slivers-demystified-6ff68ab0296f","alts":[{"type":3,"url":"medium://p/6ff68ab0296f"},{"type":2,"url":"medium://p/6ff68ab0296f"}],"httpStatus":200},{"url":"https://dartpad.dev/1ae687f1c0d17eb80c8e28a70fb5b8d1","alts":[],"httpStatus":200},{"url":"https://medium.com/flutter/improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b","alts":[{"type":3,"url":"medium://p/6b3601087a2b"},{"type":2,"url":"medium://p/6b3601087a2b"}],"httpStatus":200},{"url":"https://medium.com/flutter/optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674","alts":[{"type":2,"url":"medium://p/535fbe3cd674"},{"type":3,"url":"medium://p/535fbe3cd674"}],"httpStatus":200},{"url":"https://dartpad.dev/e41ed2678b9b9d7347880c20ec49f3f2","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1596496042485},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":1562,"sectionCount":3,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"building-performant-flutter-widgets","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"building-performant-flutter-widgets-3b2558aa08fa","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*GWFHSeCrjUgPdkJ-","originalWidth":960,"originalHeight":557,"isFeatured":true}},{"name":"1a2d","type":3,"text":"Building performant Flutter widgets","markups":[],"alignment":1},{"name":"dde6","type":1,"text":"This article is part of a series developed after the Flutter Material team worked on making the…","markups":[{"type":2,"start":0,"end":95}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"This article is part of a series developed after the Flutter Material team worked on making the Flutter Gallery app more performant on the…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4da7dfd21a33","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":3,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"primaryTopicId":"decb52b64abf","isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"Building performant Flutter widgets | by Anthony Robledo & Pierre-Louis Guidez","previewContent2":{"bodyModel":{"paragraphs":[{"name":"1a2d","type":3,"text":"Building performant Flutter widgets","markups":[]},{"name":"dde6","type":1,"text":"This article is part of a series developed after the Flutter Material team worked on making the Flutter Gallery app more performant on the web. However, the tips in this article apply to all Flutter applications. Skip to the end to find the other articles in this series.","markups":[{"type":1,"start":187,"end":190},{"type":2,"start":0,"end":271}]},{"name":"bbc5","type":1,"text":"By Anthony…","markups":[{"type":3,"start":3,"end":18,"href":"https://medium.com/@clocksmith","title":"","rel":"","anchorType":0},{"type":3,"start":21,"end":40,"href":"https://medium.com/@guidez","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"bcf0","startIndex":0}]},"isFullContent":false,"subtitle":"This article is part of a series developed after the Flutter Material team worked on making the Flutter Gallery app more performant on the…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"a4f1fc8faac9":{"id":"a4f1fc8faac9","versionId":"c618297b055d","creatorId":"50dd805ce3b8","homeCollectionId":"4da7dfd21a33","title":"What we learned from the Flutter Q2 2020 survey","detectedLanguage":"en","latestVersion":"c618297b055d","latestPublishedVersion":"c618297b055d","hasUnpublishedEdits":false,"latestRev":211,"createdAt":1595361547228,"updatedAt":1639555254820,"acceptedAt":0,"firstPublishedAt":1595430061630,"latestPublishedAt":1595430061630,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"With a focus on code samples, app performance, and writing packages","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":false,"previewImage":{"imageId":"1*BJJb_evaKM8qgJV5VCn95Q.png","filter":"","backgroundSize":"","originalWidth":2100,"originalHeight":1200,"strategy":"resample","height":0,"width":0},"wordCount":1481,"imageCount":11,"readingTime":6.888679245283019,"subtitle":"With a focus on code samples, app performance, and writing packages","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":104,"isBookmarked":false,"tags":[{"slug":"surveys","name":"Surveys","postCount":8783,"metadata":{"postCount":8783,"coverImage":{"id":"1*_57mJ1HQ7aUixv9a5Cdf4Q.png","originalWidth":920,"originalHeight":1312}},"type":"Tag"},{"slug":"developer-experience","name":"Developer Experience","postCount":1142,"metadata":{"postCount":1142,"coverImage":{"id":"1*_MRJtr_TNW5glq9b_AqaOg.png","originalWidth":744,"originalHeight":213,"isFeatured":true}},"type":"Tag"},{"slug":"flutter","name":"Flutter","postCount":47354,"metadata":{"postCount":47354,"coverImage":{"id":"1*t9RLfJH_3ItvRfp9zcK0Sw.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"performance","name":"Performance","postCount":29379,"metadata":{"postCount":29379,"coverImage":{"id":"1*h5ULv-tGdDA3yD2c685lFQ.png","originalWidth":1400,"originalHeight":682,"isFeatured":true}},"type":"Tag"},{"slug":"user-research","name":"User Research","postCount":19007,"metadata":{"postCount":19007,"coverImage":{"id":"1*5TBCz9qIzqN6fLHWpPJLgA.png","originalWidth":1280,"originalHeight":866,"isFeatured":true,"alt":"An example of a customer journey map from Bright Vessel"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://pub.dev/flutter/packages","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=vnj2i6RNo3g&vl=en","alts":[],"httpStatus":429},{"url":"https://medium.com/dartlang/pub-dev-redesign-747406dcb486","alts":[{"type":3,"url":"medium://p/747406dcb486"},{"type":2,"url":"medium://p/747406dcb486"}],"httpStatus":200},{"url":"https://github.com/flutter/flutter","alts":[],"httpStatus":200},{"url":"https://docs.google.com/forms/d/e/1FAIpQLSe0i4De809KXVCdljGKrjMj3lxhuzbuFKCtY5PEQPCYtGxFMg/viewform","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/issues?q=is%3Aopen+label%3A%22would+be+a+good+package%22+sort%3Areactions-%2B1-desc","alts":[],"httpStatus":200},{"url":"https://medium.com/building-nubank/https-medium-com-freire-why-nubank-chose-flutter-61b80b568772","alts":[{"type":3,"url":"medium://p/61b80b568772"},{"type":2,"url":"medium://p/61b80b568772"}],"httpStatus":200}],"version":"0.3","generatedAt":1595430062995},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":767,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"what-we-learned-from-the-flutter-q2-2020-survey","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"what-we-learned-from-the-flutter-q2-2020-survey-a4f1fc8faac9","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*BJJb_evaKM8qgJV5VCn95Q.png","originalWidth":2100,"originalHeight":1200,"isFeatured":true}},{"name":"1ec4","type":3,"text":"What we learned from the Flutter Q2 2020 survey","markups":[],"alignment":1},{"name":"5d96","type":13,"text":"With a focus on code samples, app performance, and…","markups":[{"type":2,"start":0,"end":50}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"With a focus on code samples, app performance, and writing packages"},"license":1,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4da7dfd21a33","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"Flutter Q2 2020 Developer Survey","previewContent2":{"bodyModel":{"paragraphs":[{"name":"1ec4","type":3,"text":"What we learned from the Flutter Q2 2020 survey","markups":[]},{"name":"5d96","type":13,"text":"With a focus on code samples, app performance, and writing packages","markups":[{"type":2,"start":0,"end":67}]},{"name":"37bc","type":1,"text":"For about ten days every quarter, the Flutter team hosts a survey to hear about your experience with Flutter. Each survey combines recurring questions that help our team monitor longitudinal trends of various measures, with new questions that collect timely feedback. It helps us stay focused on important areas.","markups":[]},{"name":"ab48","type":1,"text":"In…","markups":[{"type":2,"start":362,"end":366}]}],"sections":[{"name":"b1ae","startIndex":0}]},"isFullContent":false,"subtitle":"With a focus on code samples, app performance, and writing packages"},"cardType":0,"isDistributionAlertDismissed":true,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"6b3601087a2b":{"id":"6b3601087a2b","versionId":"cf914e1a5dd7","creatorId":"4cad326de3d7","homeCollectionId":"4da7dfd21a33","title":"Improving perceived performance with image placeholders, precaching, and disabled navigation…","detectedLanguage":"en","latestVersion":"cf914e1a5dd7","latestPublishedVersion":"cf914e1a5dd7","hasUnpublishedEdits":false,"latestRev":405,"createdAt":1590408765312,"updatedAt":1677786320052,"acceptedAt":0,"firstPublishedAt":1590511557087,"latestPublishedAt":1677786320052,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Perceived performance is how fast an application feels to the user. This article covers three strategies that you can use in your…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*Pp2MNotBJdSHDcW3Fhz19A.gif","filter":"","backgroundSize":"","originalWidth":500,"originalHeight":575,"strategy":"resample","height":0,"width":0},"wordCount":675,"imageCount":4,"readingTime":3.247169811320755,"subtitle":"Perceived performance is how fast an application feels to the user. This article covers three strategies that you can use in your…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":89,"isBookmarked":false,"tags":[{"slug":"flutter","name":"Flutter","postCount":47354,"metadata":{"postCount":47354,"coverImage":{"id":"1*t9RLfJH_3ItvRfp9zcK0Sw.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"flutter-web","name":"Flutter Web","postCount":1752,"metadata":{"postCount":1752,"coverImage":{"id":"1*Hq_wW2qaPos4gOt-zh9e7Q.png","originalWidth":1782,"originalHeight":990,"isFeatured":true}},"type":"Tag"},{"slug":"performance","name":"Performance","postCount":29379,"metadata":{"postCount":29379,"coverImage":{"id":"1*h5ULv-tGdDA3yD2c685lFQ.png","originalWidth":1400,"originalHeight":682,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":3,"links":{"entries":[{"url":"https://medium.com/flutter/optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674","alts":[{"type":3,"url":"medium://p/535fbe3cd674"},{"type":2,"url":"medium://p/535fbe3cd674"}],"httpStatus":200},{"url":"https://medium.com/flutter/building-performant-flutter-widgets-3b2558aa08fa","alts":[{"type":3,"url":"medium://p/3b2558aa08fa"},{"type":2,"url":"medium://p/3b2558aa08fa"}],"httpStatus":200},{"url":"https://dartpad.dev/embed-flutter.html?gh_owner=perclasson&gh_repo=flutter_code&gh_path=precached_images/lib&theme=dark","alts":[],"httpStatus":200},{"url":"https://dartpad.dev/embed-flutter.html?gh_owner=perclasson&gh_repo=flutter_code&gh_path=images_jumping_around/lib&theme=dark","alts":[],"httpStatus":200},{"url":"https://dartpad.dev/embed-flutter.html?gh_owner=perclasson&gh_repo=flutter_code&gh_path=images_with_placeholders/lib&theme=dark","alts":[],"httpStatus":200},{"url":"https://gallery.flutter.dev/#/","alts":[],"httpStatus":200},{"url":"https://api.flutter.dev/flutter/foundation/kIsWeb-constant.html","alts":[],"httpStatus":200},{"url":"https://api.flutter.dev/flutter/widgets/Image/frameBuilder.html","alts":[],"httpStatus":200},{"url":"https://api.flutter.dev/flutter/widgets/precacheImage.html","alts":[],"httpStatus":200},{"url":"https://api.flutter.dev/flutter/widgets/AnimatedSwitcher-class.html","alts":[],"httpStatus":200},{"url":"https://api.flutter.dev/flutter/material/PageTransitionsTheme-class.html","alts":[],"httpStatus":200},{"url":"https://material.io/design/navigation/navigation-transitions.html#about-navigation-transitions","alts":[],"httpStatus":200},{"url":"http://twitter.com/override","alts":[],"httpStatus":200},{"url":"https://api.flutter.dev/flutter/widgets/FadeInImage-class.html","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/gallery","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1677786320515},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":826,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*Pp2MNotBJdSHDcW3Fhz19A.gif","originalWidth":500,"originalHeight":575,"isFeatured":true}},{"name":"38de","type":3,"text":"Improving perceived performance with image placeholders, precaching, and disabled navigation transitions","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Perceived performance is how fast an application feels to the user. This article covers three strategies that you can use in your…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4da7dfd21a33","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"38de","type":3,"text":"Improving perceived performance with image placeholders, precaching, and disabled navigation transitions","markups":[]},{"name":"749a","type":1,"text":"Perceived performance is how fast an application feels to the user. This article covers three strategies that you can use in your application to improve perceived performance: image placeholders, precaching images, and disabling navigation transitions.","markups":[]},{"name":"dd61","type":3,"text":"Image placeholders to prevent content from jumping around","markups":[]},{"name":"4101","type":1,"text":"When a user is waiting for images to load, and then they eventually show up…","markups":[]}],"sections":[{"name":"508f","startIndex":0}]},"isFullContent":false,"subtitle":"Perceived performance is how fast an application feels to the user. This article covers three strategies that you can use in your…"},"cardType":0,"isDistributionAlertDismissed":true,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"535fbe3cd674":{"id":"535fbe3cd674","versionId":"6339949a719d","creatorId":"4cad326de3d7","homeCollectionId":"4da7dfd21a33","title":"Optimizing performance in Flutter web apps with tree shaking and deferred loading","detectedLanguage":"en","latestVersion":"6339949a719d","latestPublishedVersion":"6339949a719d","hasUnpublishedEdits":false,"latestRev":325,"createdAt":1589540441354,"updatedAt":1639492972476,"acceptedAt":0,"firstPublishedAt":1589896669784,"latestPublishedAt":1595505320357,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"For the best user experience it is important that an app loads fast. The initial load time of a Flutter web application can be improved by…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*Z8CmvWbWVXUb9Wy4","filter":"","backgroundSize":"","originalWidth":1374,"originalHeight":532,"strategy":"resample","height":0,"width":0},"wordCount":774,"imageCount":1,"readingTime":3.120754716981132,"subtitle":"For the best user experience it is important that an app loads fast. The initial load time of a Flutter web application can be improved by…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":189,"isBookmarked":false,"tags":[{"slug":"flutter-web","name":"Flutter Web","postCount":1752,"metadata":{"postCount":1752,"coverImage":{"id":"1*Hq_wW2qaPos4gOt-zh9e7Q.png","originalWidth":1782,"originalHeight":990,"isFeatured":true}},"type":"Tag"},{"slug":"flutter","name":"Flutter","postCount":47354,"metadata":{"postCount":47354,"coverImage":{"id":"1*t9RLfJH_3ItvRfp9zcK0Sw.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"material-design","name":"Material Design","postCount":3667,"metadata":{"postCount":3667,"coverImage":{"id":"1*kdOha7Em-JqNsZg0LEqhng.jpeg","originalWidth":736,"originalHeight":1104}},"type":"Tag"},{"slug":"performance","name":"Performance","postCount":29379,"metadata":{"postCount":29379,"coverImage":{"id":"1*h5ULv-tGdDA3yD2c685lFQ.png","originalWidth":1400,"originalHeight":682,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":8,"links":{"entries":[{"url":"https://gallery.flutter.dev/#/","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Tree_shaking","alts":[],"httpStatus":200},{"url":"https://dart.dev/tools/dart2js","alts":[],"httpStatus":200},{"url":"https://dart.dev/guides/language/language-tour#deferred-loading","alts":[],"httpStatus":200},{"url":"https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html","alts":[],"httpStatus":200},{"url":"https://developers.google.com/web/tools/chrome-devtools/network","alts":[],"httpStatus":200},{"url":"https://medium.com/flutter/improving-perceived-performance-with-image-placeholders-precaching-and-disabled-navigation-6b3601087a2b","alts":[{"type":3,"url":"medium://p/6b3601087a2b"},{"type":2,"url":"medium://p/6b3601087a2b"}],"httpStatus":200},{"url":"http://gallery.flutter.dev/","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/flutter/blob/7b1d24216e00eaa58ca04cc2d8911329fea991be/packages/flutter_tools/lib/src/build_system/targets/web.dart#L200","alts":[],"httpStatus":200},{"url":"https://github.com/perclasson/flutter_code/tree/master/deferred_loading","alts":[],"httpStatus":200},{"url":"https://medium.com/flutter/building-performant-flutter-widgets-3b2558aa08fa","alts":[{"type":3,"url":"medium://p/3b2558aa08fa"},{"type":2,"url":"medium://p/3b2558aa08fa"}],"httpStatus":200},{"url":"https://github.com/flutter/flutter/blob/master/dev/tools/localization/bin/gen_l10n.dart","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1595505321063},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":1592,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"optimizing-performance-in-flutter-web-apps-with-tree-shaking-and-deferred-loading-535fbe3cd674","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*Z8CmvWbWVXUb9Wy4","originalWidth":1374,"originalHeight":532,"isFeatured":true}},{"name":"a3e7","type":3,"text":"Optimizing performance in Flutter web apps with tree shaking and deferred loading","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"For the best user experience it is important that an app loads fast. The initial load time of a Flutter web application can be improved by…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4da7dfd21a33","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":4,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"a3e7","type":3,"text":"Optimizing performance in Flutter web apps with tree shaking and deferred loading","markups":[]},{"name":"305b","type":1,"text":"For the best user experience it is important that an app loads fast. The initial load time of a Flutter web application can be improved by minimizing its JavaScript bundle. The Dart compiler includes features such as tree shaking and deferred loading, both of which minimize the JavaScript bundle. This…","markups":[]}],"sections":[{"name":"19d5","startIndex":0}]},"isFullContent":false,"subtitle":"For the best user experience it is important that an app loads fast. The initial load time of a Flutter web application can be improved by…"},"cardType":0,"isDistributionAlertDismissed":true,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"df7669bb7df7":{"id":"df7669bb7df7","versionId":"ff528b2fc79c","creatorId":"696ae61bc6e2","homeCollectionId":"4da7dfd21a33","title":"Performance Testing of Flutter apps","detectedLanguage":"en","latestVersion":"ff528b2fc79c","latestPublishedVersion":"ff528b2fc79c","hasUnpublishedEdits":false,"latestRev":450,"createdAt":1557171420143,"updatedAt":1639069201540,"acceptedAt":0,"firstPublishedAt":1557365162232,"latestPublishedAt":1557365528899,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"The Flutter framework does a good job being fast by default, but does that mean you don’t need to think about performance at all? No. It…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*MxtHyEfdBlANwu7ZRyX2mw.png","filter":"","backgroundSize":"","originalWidth":742,"originalHeight":421,"strategy":"resample","height":0,"width":0},"wordCount":1561,"imageCount":7,"readingTime":6.940566037735849,"subtitle":"The Flutter framework does a good job being fast by default, but does that mean you don’t need to think about performance at all? No. It…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":350,"isBookmarked":false,"tags":[{"slug":"flutter","name":"Flutter","postCount":47354,"metadata":{"postCount":47354,"coverImage":{"id":"1*t9RLfJH_3ItvRfp9zcK0Sw.png","originalWidth":2560,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"performance","name":"Performance","postCount":29379,"metadata":{"postCount":29379,"coverImage":{"id":"1*h5ULv-tGdDA3yD2c685lFQ.png","originalWidth":1400,"originalHeight":682,"isFeatured":true}},"type":"Tag"},{"slug":"google","name":"Google","postCount":113133,"metadata":{"postCount":113133,"coverImage":{"id":"1*xYyEDaTyzQe5dJ7xIssCJQ.png","originalWidth":1088,"originalHeight":516}},"type":"Tag"},{"slug":"mobile","name":"Mobile","postCount":69042,"metadata":{"postCount":69042,"coverImage":{"id":"1*JHiUEZZ8xCPpvX3AjWJ22A.jpeg","originalWidth":1548,"originalHeight":1024}},"type":"Tag"},{"slug":"mobile-app-development","name":"Mobile App Development","postCount":95983,"metadata":{"postCount":95983,"coverImage":{"id":"1*Zg8ug5zUQtOGf-1vA6sdXQ.jpeg","originalWidth":523,"originalHeight":586}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":7,"links":{"entries":[{"url":"https://flutter.dev/docs/cookbook/testing/integration/profiling","alts":[],"httpStatus":200},{"url":"https://docs.flutter.io/flutter/flutter_driver/TimelineSummary/writeSummaryToFile.html","alts":[],"httpStatus":200},{"url":"https://flutter.dev/docs/testing/ui-performance","alts":[],"httpStatus":200},{"url":"https://github.com/2d-inc/developer_quest/blob/master/tool/lock_android_scaling.sh","alts":[],"httpStatus":200},{"url":"https://github.com/google/skia/blob/e25b4472cdd9f09cd393c9c34651218507c9847b/infra/bots/recipe_modules/flavor/android.py","alts":[],"httpStatus":200},{"url":"https://github.com/2d-inc/developer_quest","alts":[],"httpStatus":200},{"url":"https://docs.flutter.io/flutter/flutter_driver/TimelineSummary/writeTimelineToFile.html","alts":[],"httpStatus":200},{"url":"https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu","alts":[],"httpStatus":200},{"url":"https://api.dartlang.org/stable/2.2.0/dart-developer/Timeline-class.html","alts":[],"httpStatus":200},{"url":"https://github.com/2d-inc/developer_quest/blob/master/test_driver/parse_timeline.dart#L82","alts":[],"httpStatus":200},{"url":"https://flutter.github.io/devtools/timeline","alts":[],"httpStatus":200},{"url":"https://aras-p.info/blog/2017/01/23/Chrome-Tracing-as-Profiler-Frontend/","alts":[],"httpStatus":200},{"url":"https://flutter.github.io/devtools/","alts":[],"httpStatus":200},{"url":"https://flutter.github.io/devtools/inspector","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1557365529319},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":2511,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"performance-testing-of-flutter-apps","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"performance-testing-of-flutter-apps-df7669bb7df7","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*MxtHyEfdBlANwu7ZRyX2mw.png","originalWidth":742,"originalHeight":421,"isFeatured":true}},{"name":"a3ef","type":3,"text":"Performance testing of Flutter apps","markups":[],"alignment":1},{"name":"c131","type":1,"text":"The Flutter framework does a good job being fast by default, but does that mean you don’t need to…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"The Flutter framework does a good job being fast by default, but does that mean you don’t need to think about performance at all? No. It…"},"license":1,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4da7dfd21a33","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"a3ef","type":3,"text":"Performance testing of Flutter apps","markups":[]},{"name":"c131","type":1,"text":"The Flutter framework does a good job being fast by default, but does that mean you don’t need to think about performance at all? No. It is absolutely possible to write Flutter apps that are slow. On the other hand, it is also possible to make the most of the…","markups":[]}],"sections":[{"name":"7b17","startIndex":0}]},"isFullContent":false,"subtitle":"The Flutter framework does a good job being fast by default, but does that mean you don’t need to think about performance at all? No. It…"},"cardType":0,"isDistributionAlertDismissed":true,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"}}},"paging":{},"collection":{"id":"4da7dfd21a33","name":"Flutter","slug":"flutter","tags":["MOBILE APP DEVELOPMENT","FLUTTER","GOOGLE","IOS APP DEVELOPMENT","ANDROID APP DEVELOPMENT"],"creatorId":"2df4e577749c","description":"Flutter is Google's UI framework for crafting high-quality native interfaces on iOS, Android, web, and desktop. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source. Learn more at https://flutter.dev","shortDescription":"Flutter is Google's UI framework for crafting high-quality…","image":{"imageId":"1*5-aoK8IBmXve5whBQM90GA.png","filter":"","backgroundSize":"","originalWidth":1000,"originalHeight":1000,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":57055,"activeAt":1733252461984},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"1*KvnfbD1F5CzEsU9wSmRZyA.png","filter":"","backgroundSize":"","originalWidth":538,"originalHeight":141,"strategy":"resample","height":0,"width":0},"twitterUsername":"flutterdev","collectionMastheadId":"6f4efe3cee51","sections":[{"type":2,"collectionHeaderMetadata":{"title":"Flutter","description":"Build beautiful native apps in record time","backgroundImage":{},"logoImage":{"id":"1*XrbUBnZb-Vp9jRDGqU-BXQ@2x.png","originalWidth":2000,"originalHeight":2109,"alt":"Flutter"},"alignment":2,"layout":5}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":1,"postIds":["204b7d20c45d"]}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":9,"postIds":[]}},{"type":1,"postListMetadata":{"source":1,"layout":5,"number":15,"postIds":[]}}],"tintColor":"#FF01579B","lightText":true,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF498BD1","point":0},{"color":"#FF4781C0","point":0.1},{"color":"#FF4477AF","point":0.2},{"color":"#FF416D9E","point":0.3},{"color":"#FF3D638D","point":0.4},{"color":"#FF38587C","point":0.5},{"color":"#FF324D6B","point":0.6},{"color":"#FF2C415A","point":0.7},{"color":"#FF253548","point":0.8},{"color":"#FF1C2937","point":0.9},{"color":"#FF121B25","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FF01579B","point":0},{"color":"#FF306CA9","point":0.1},{"color":"#FF4D7FB7","point":0.2},{"color":"#FF6591C4","point":0.3},{"color":"#FF7CA3D0","point":0.4},{"color":"#FF92B4DC","point":0.5},{"color":"#FFA7C4E7","point":0.6},{"color":"#FFBCD3F1","point":0.7},{"color":"#FFD0E3FC","point":0.8},{"color":"#FFE3F2FF","point":0.9},{"color":"#FFF7FFFF","point":1}],"backgroundColor":"#FF01579B"},"highlightSpectrum":{"colorPoints":[{"color":"#FFE8F5FF","point":0},{"color":"#FFE3F3FF","point":0.1},{"color":"#FFDEF2FF","point":0.2},{"color":"#FFDAF0FF","point":0.3},{"color":"#FFD5EFFF","point":0.4},{"color":"#FFD0EDFF","point":0.5},{"color":"#FFCBECFF","point":0.6},{"color":"#FFC6EBFF","point":0.7},{"color":"#FFC1E9FF","point":0.8},{"color":"#FFBCE8FF","point":0.9},{"color":"#FFB6E6FF","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF63A4EB","point":0},{"color":"#FF72ACED","point":0.1},{"color":"#FF81B4EF","point":0.2},{"color":"#FF8FBCF1","point":0.3},{"color":"#FF9CC4F3","point":0.4},{"color":"#FFA9CBF5","point":0.5},{"color":"#FFB6D3F6","point":0.6},{"color":"#FFC2DAF8","point":0.7},{"color":"#FFCFE2FA","point":0.8},{"color":"#FFDAE9FC","point":0.9},{"color":"#FFE6F0FE","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":1,"title":"Announcements","tagSlug":"announcements","url":"https://medium.com/flutter/tagged/announcements","source":"tagSlug"},{"type":1,"title":"Performance","tagSlug":"performance","url":"https://medium.com/flutter/tagged/performance","source":"tagSlug"},{"type":1,"title":"Material Design","tagSlug":"material-design","url":"https://medium.com/flutter/tagged/material-design","source":"tagSlug"},{"type":1,"title":"Web Development","tagSlug":"web-development","url":"https://medium.com/flutter/tagged/web-development","source":"tagSlug"},{"type":3,"title":"flutter.dev","url":"https://flutter.dev/"}],"colorBehavior":2,"collectionFeatures":[25],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"Flutter","description":"Build beautiful native apps in record time","backgroundImage":{},"logoImage":{"id":"1*XrbUBnZb-Vp9jRDGqU-BXQ@2x.png","originalWidth":2000,"originalHeight":2109,"alt":"Flutter"},"alignment":2,"layout":5},"subscriberCount":57055,"tagline":"Flutter is an open source UI framework for crafting beautiful apps","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092847310,"type":"Collection"},"tag":{"slug":"performance","name":"Performance","postCount":29379,"metadata":{"postCount":29379,"coverImage":{"id":"1*h5ULv-tGdDA3yD2c685lFQ.png","originalWidth":1400,"originalHeight":682,"isFeatured":true}},"type":"Tag"},"streamItems":[{"createdAt":1733252554496,"postPreview":{"postId":"e949b9dbcf06"},"randomId":"0fe8e9e8b40b","itemType":"postPreview","type":"StreamItem"},{"createdAt":1733252554496,"postPreview":{"postId":"5c597168b6bb"},"randomId":"b0507e2a6496","itemType":"postPreview","type":"StreamItem"},{"createdAt":1733252554496,"postPreview":{"postId":"4c170934f914"},"randomId":"6e42b76cb2a7","itemType":"postPreview","type":"StreamItem"},{"createdAt":1733252554496,"postPreview":{"postId":"3b2558aa08fa"},"randomId":"c80ab1ed2a38","itemType":"postPreview","type":"StreamItem"},{"createdAt":1733252554496,"postPreview":{"postId":"a4f1fc8faac9"},"randomId":"ec636edc6fd3","itemType":"postPreview","type":"StreamItem"},{"createdAt":1733252554496,"postPreview":{"postId":"6b3601087a2b"},"randomId":"7e5b584a40ad","itemType":"postPreview","type":"StreamItem"},{"createdAt":1733252554496,"postPreview":{"postId":"535fbe3cd674"},"randomId":"d278578ea758","itemType":"postPreview","type":"StreamItem"},{"createdAt":1733252554496,"postPreview":{"postId":"df7669bb7df7"},"randomId":"4da2c3e803ac","itemType":"postPreview","type":"StreamItem"}],"showCdcBanner":false}) // ]]></script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8ec5cfd00cad5f90',t:'MTczMzI1MjU1NS4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html>