15 ms·
Ask HN: Is it just me or is the AMP project making everything slower?
I have µMatrix in my browser, and by default it blocks the AMP CDN. The result of this seems to be horrendous white-screen times for web-pages, beyond what I would expect it to take for a web-server to load these pages, and the delay in loading is very noticeable across all of them.
I have a vague idea of the point of AMP, which is to speed up the delivery of web pages. However:
1) I'm not convinced the web pages were really _that_ slow to start with, so it feels like an unnecessary project (well, excepting the fact that web-page bloat has massively increased as people use more and more javascript libraries &c.).
2) Perhaps I'm being a bit old fashioned, but I don't really understand what was wrong with a browser serving a web page made out of some HTML, CSS, and Javascript. It feels like we're replacing one technology with another (and that latter one comes from Google, which makes me nervous). Do we really want AMP to be the way we serve the web?
3) I haven't properly investigated, bt I'm assuming that this delay is some script which is waiting for the data to load from the AMP CDN, and once that times out it displays the underlying content (I did check and loading this page [1] is almost instantaneous yet the content only displays after three seconds). Any insight into why it's seen as acceptable for this to be so slow when it is unnecessary for displaying the page?
[1]: https://www.ehow.co.uk/how_5840711_test-electrical-outlet-digital-multimeter.html
- abalone 8y agoI wish Google would just heavily weight fast-loading, responsively-designed pages in pagerank and call it a day. There's no need for a weird problematic proprietary format.. It just smacks of a power grab to keep visitors on google.com.
- WalterSear 8y agoIt's a power grab.
- davegauer 8y agoA thousand times yes. If Google actually cared about end-user "experience", the health of the Web, and accessibility, they would do exactly as you've described.
- jefftk 8y ago> There's no need for a weird problematic proprietary format. The reason we need AMP now is that you can't otherwise preload a page in a privacy-preserving way. Webpackaging will allow doing this without AMP though: https://github.com/WICG/webpackage/blob/master/explainer.md https://github.com/WICG/webpackage/blob/master/explainer.md (Disclosure: I work at Google on making ads be AMP.)
- pdimitar 8y agoAre you sure this is going to be allowed at Google? Policy and all that. They don't exactly look to be condoning open standards in this regard. Would be happy if I am wrong though.
- jefftk 8y agoGoogle is one of the main groups working on it. For example, the draft https://tools.ietf.org/html/draft-yasskin-dispatch-web-packaging-00 https://tools.ietf.org/html/draft-yasskin-dispatch-web-packa... is by a Google employee.
- chuckgreenman 8y agoI think there are definite drawbacks to the AMP project. For starters, it seems like the main goal is for Google to own more of the time people are interacting with the web, rather than anything else. A mark in its favor though is local news sites. They are desperate to be at the top of the search page so when they join AMP, and you look at their AMP pages all of a sudden the loads of dark patterns they usually employ are absent.
- andy_ppp 8y agoMaybe Google could just heavily discount for SEO popovers, slow sites, huge blobs of JS and generally stuff that we all find slow and irritating (i.e. jumpy images). It used to be the case that Google wanted to solve problems of their users but now Google wants to solve the problems of Google.
- throwaway13337 8y agoI can imagine a search engine that heavily penalized popovers and other user hostile patterns to have the effect of giving great content since the authors of such sites respect their users more. As Google results have gotten progressively worse for common search terms (try searching anything health related), this sort of filter could bring back the web we see to where it used to be. I'd love to see a nonGoogle search engine like this.
- acdha 8y agoGoogle could get the same effect by more aggressively factoring page load time & size into page ranking. They don’t because that doesn’t give them control over the ad ecosystem.
- kevingadd 8y agoIn my experience AMP is considerably slower unless I happen to be browsing in Chrome. It's probably an accidental result of how they implemented AMP, that framework is tuned specifically for Chrome in the first place (odd CSS hacks to nudge Chrome's compositor into behaving a certain way, etc.)
- trynewideas 8y ago"accidental"?
- mtgx 8y agoThat's the joke.
- gonational 8y agoHey, where is my bitcoin!?
- anticensor 8y agoWe need amp.wexe, fully DOM-based AMP implemented in WASM.
- markovbot 8y agoYeah, I actively avoid visiting AMP and sharing AMP sites for this reason whenever possible. They just take so fucking long to load.
- aboutruby 8y agoThe most frustrating is that AMP version of app/pages/websites are very incomplete, e.g. the AMP version of a reddit post has only 3 comments (and the "load more comments" button is buggy). Would have been much better to use Lighthouse / PageSpeed as a basis for showing optimized pages.
- napsterbr 8y agoUgh, Reddit. Their amp version is terrible for the exact reason you mention. I know every time I see a Reddit page on Google results that I'll make two page loads instead of one (this does make a difference on my country, where everything is slow). Then, when accessing their pages on mobile browser, there's a huge banner telling me to download their app. In this same banner there is a dark UX pattern, where the call to action, giant button is to download the app, and the tiny footer text is "continue to mobile site". And apparently it doesn't matter I clicked through the banner before, it always displays the same annoying banner. Sorry for the rant. I'm just genuinely disappointed in what the web has become.
- mort96 8y agoMy favorite is that they've recently started animating their "Get the app" button in the header. That's both immediately on page load, _and_ on an interval as you're reading, meaning it's impossible to read for more than a minute or so without an animation distracting you. Is it just me or has the mobile web taken a nosedive in recent years? Imgur won't even let you upload images from mobile anymore without their app, reddit is getting progressively more annoying, "Get the app" buttons and modals and banners are getting progressively more prominent and dark-pattern-y, and the default for all web pages now seems to be to include <meta name="viewport" conent="width=device-width, initial-scale=1"> regardless of whether the developers actually tested that their web page works on small screens, meaning web pages which would've just fallen back to desktop emulation mode in the past just simply don't work at all.
- nyolfen 8y agoall reader mode everything
- pornel 8y agoYes, AMP is rather slow: https://timkadlec.com/remembers/2018-03-19-how-fast-is-amp-really/ https://timkadlec.com/remembers/2018-03-19-how-fast-is-amp-r... and looks fast mainly because Google preloads it: https://ferdychristant.com/amp-the-missing-controversy-3b424031047 https://ferdychristant.com/amp-the-missing-controversy-3b424...
- HALtheWise 8y agoSure, but from an end-user perspective, preloading is a perfectly valid way to achieve good performance, so it shouldn't be left out of the conversation. The fact that AMP can be preloaded without leaking your sensitive information to the owners of domains that you have not yet navigated to is a primary component of the design, and often gets ignored by armchair analysts.
- acdha 8y agoThe problem is that preloading is brittle. I see AMP pages lagging only a daily basis which is much rarer for sites which follow best practices — that 100KB of render-blocking JavaScript makes AMP incredibly brittle.
- lphnull 8y agoThe web isn't what it was back in the 90s and early 2000s though. Back then, you wanted a website to last because there wasn't much on the web to begin with. Those of us who were online owned a reasonable amount of web bookmarks that led us to nice solid pages that were designed to load nice and fast over slower connections. Nowadays, the landscape is way different. There are just so many "normal folk" on the internet now that content is being consumed at an alarming rate. There is so much stuff on the internet now, that even Youtube videos have become disposable. Most of the stuff that people read and watch now is consumed once and then never visited again because there's just not enough time to revisit the insane amount of content we're exposed to. Nowadays, why does it matter if a website is made "brittle" if the content isn't going to matter in a few months anyways? And if you do want to archive something for later, shouldn't the words on the page matter more than the code behind it? After all, if a user 12 years from now wants to read your article, all they're going to want is your words and pictures. Code is always brittle because new technology makes everything obsolete.
- JesseWright 8y agoAMP pages take forever to load for me with Firefox and uBlock Origin. When I open a news story from Google's recommendations, which always open to AMP pages, it pretty much always takes about 15 to 30 to show anything on screen. I instinctively edit the link manually nowto try to go to the non-AMP version, which typically loads the content in under 5 seconds.
- Marsymars 8y agoIf you're using Firefox, you can just use the Redirect AMP to HTML extension.
- Boulth 8y agoOr, an alternative approach that also works in Chrome: use DuckDuckGo. Actually early AMP, that was extremely broken, pushed me out of Google completely.
- Marsymars 8y agoStill have a problem with shared AMP links in that case. I like the Safari approach where AMP URLs get converted back to their canonical URLs when shared.
- nty 8y ago>I'm not convinced the web pages were really _that_ slow to start with, so it feels like an unnecessary project That's because you use umatrix and possibly ublock. AMP is about making the web faster for the common Joe.
- HALtheWise 8y agoIt is also likely that you don't spend a significant amount of time browsing on a 2G cellular connection. When ping times are very long, the only way to get web performance anywhere close to native apps is pre-caching, which is what AMP is designed to enable (link-rel="prefetch" is a privacy nightmare). AMP is about the common Joe, but also about the 90th percentile slow performance (like in the developing world or on cellular networks).
- manicdee 8y agoPre-caching in those cases will cause other things to slow down and needlessly consume bandwidth which the user is paying for. The real reason for AMP is to allow Google to watch everything your visitors do so they can sell your visitors eyeballs to your competitors.
- justinsaccount 8y agoFixed title: Is it just me or is µMatrix making everything slower?
- xen2xen1 8y agoSounds right to me, don't know why you're downvoted? Do something non-standard and then complain things are broke?
- OpenBSD-empire 8y agoThe USER should have total control of what is shown in their browsers, not the webmaster. Without users, the webmaster is pissing his web content into the wind!
- slig 8y agoThis is what's keeping the screen white before showing its content https://news.ycombinator.com/item?id=17746886 https://news.ycombinator.com/item?id=17746886
- globe1337 8y agoYes. I absolutely hate when I want to load an article on my iPhone and it loads AMP. I remove that part of the URL to read the original source most of the time.
- SquareWheel 8y agoCorrect. You've broken the page by blocking only some of the assets. AMP loads fine if you allow all scripts or disable Javascript completely.
- tedunangst 8y agoDisabling javascript doesn't disable css animations.
- SquareWheel 8y agoThe CSS animation only comes into play as a fallback mechanism. The AMP script will force a draw sooner otherwise.
- gregable 8y agoPrecisely. The exact code is here: https://www.ampproject.org/docs/fundamentals/spec/amp-boilerplate https://www.ampproject.org/docs/fundamentals/spec/amp-boiler... Here it is pretty-printed and simplified to not have the vendor-specific stuff: <style amp-boilerplate> body{ animation:-amp-start 8s steps(1,end) 0s 1 normal both } @keyframes -amp-start{ from{visibility:hidden}to{visibility:visible} } </style> <noscript> <style amp-boilerplate> body{animation:none} </style> </noscript> The first bit is for browsers with javascript, but where the network is poor and can't load the minimal required highly cacheable javascript file within 8 seconds. It uses CSS just in case javascript really isn't working anyway such as being disabled per domain or something. The second bit is for browsers without javascript - the page is unblocked immediately.
- gtf21 8y agoThis is not really the point, the point is that the page loads anyway, without the AMP scripts so there's really no excuse for having an 8s delay. I don't want this google stuff on every web page I visit, and frankly it's unnecessary -- this article could easily have been written using static HTML / CSS and it would probably have been easier to develop (as well as access).
- newnewpdro 8y agoI don't know about slower, but it's certainly made the web more annoying to use with piecemeal javascript support - which obviously benefits advertisers like google, if it makes more of us cease interfering with tools like noscript and µMatrix.
- throwawaysea 8y agoThey're likely unrelated issues, but I am not surprised that those outside Google's happy path experience severe performance issues. Gmail has been horrendously slow ever since they launched their terrible redesign, with initial page load taking 10+ seconds and actions like opening up emails taking several seconds. I can't help but think this is because I don't use Chrome.
- kstenerud 8y agoNo, it's slow in chrome, too. Multi user Hangouts is also horribly broken in chrome (first user can't see or hear anyone).
- kjullien 8y agoI sadly have to code AMP for work. The reason you see a white page is that the boilerplate code required for any AMP page to be valid includes : webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both; With visibility set to hidden for every element on the page. This is used to minimize page rendering artifacts for the end user, which is one of AMP's main goals, content should be fixed. The problem however here is that this animation is usually triggered before the 8s, as soon as the AMP javascript has been served from the CDN. Your adblocker of something of the sort is blocking it which results in you having to wait for the hard coded 8s fallback to see the page no matter if the content is already loaded. AMP is beautiful.
- SimeVidas 8y ago8 seconds? I thought it was 3. That being said, this is most likely the culprit. If OP is blocking AMP CDN, the inlined CSS code will hide the content until the CSS animation completes after whatever the timeout is nowadays.
- gregable 8y agoThis CSS animation is just the backup in case the javascript doesn't load at all, really. After 8 seconds, the page gives up trying to prevent the flash of unstyled content and just renders, regardless of how bad the styling is. It also includes a <noscript> block that renders the page immediately if javascript is disabled. The 8s thing is for network issues. Graceful degradation. Lots of documents (amp or not) use the same "hide the screen until layout is done" trick to avoid multiple relayouts as the initial javascript is running and CSS is being fetched. More often than ideal, they don't have a fallback if the javascript doesn't load at all. AMP mandates it with this CSS animation, which is far better than nothing. Also when served from the AMP Cache (https://www-ehow-co-uk.cdn.ampproject.org/c/s/www.ehow.co.uk/how_5840711_test-electrical-outlet-digital-multimeter.html https://www-ehow-co-uk.cdn.ampproject.org/c/s/www.ehow.co.uk... for the example shown), the layout algorithm that javascript runs is applied by the AMP Cache instead and the 8-second timeout code is removed completely (view source and take a look). This doesn't work on all pages - there are some features that require a client-side context, but it does work on this one. Websites can run the same server-side layout algorithm on their origin using a node library (https://www.npmjs.com/package/amp-toolbox-optimizer https://www.npmjs.com/package/amp-toolbox-optimizer). There is also work being done to improve all of this (server side layout on more documents, and making the system easier to run on your own site). The 3s observation from the original post is interesting. It may just have been an estimation of the 8s, or it could have something to do with how the document is configured. Looking at this document, there are some <amp-font> tags that the document author has added with a 3000ms timeout. These are tags that instruct the AMP javascript to change the document CSS class depending on the success of failure of loading of a particular font. By default (not amp specific), if a document loads a webfont for a particular text, the browser will not display the text until the font is loaded. <amp-font> provides a CSS hook by which the author can do stuff like "hide the text for up to 3s, or when the font has loaded, whichever comes first". This page has some <amp-font> tags with a 3s timeout referencing fonts that have not been added to the document, which seems like a mistake from the document author, unsure. I was not able to reproduce the 3s experience though, so this may be incorrect speculation as to what happened.
- jonas21 8y agoSo... you're blocking the AMP javascript from loading and then complaining that AMP is slow for you. Have you tried not blocking the script?
- jimbo1qaz 8y agoDownloading a website sans scripts takes strictly less time than downloading and executing scripts. A website that hides its content for 8 seconds because scripts are disabled is a defective website which deliberately stops users from looking static content (amp uses css animation).
- SquareWheel 8y agoHa. That's like removing a bunch of methods from a program and claiming it's broken when it crashes. What did you expect to happen when blocking half of a site's libraries?
- tedunangst 8y agoAt the very least, I expect it to crash faster after removing methods. It should not pause for a long time and then work.
- jimbo1qaz 8y agoNews sites are hypertext, also known as formatted text, and not web-apps or programs which download and render websites. I expect news sites to load properly in the absence of the AMP CDN (not "half the methods"), not deliberately hide content from users. (I feel the same way about blocking page rendering when web-fonts don't download when their http connections hang instead.) EDIT: I just moved to desktop. If I block all scripts in uMatrix, OP's URL loads immediately (albeit with a full page of garbage above page content). If I block external scripts in uMatrix, I have to wait 8 seconds before anything appears.
- SquareWheel 8y ago>News sites are hypertext, also known as formatted text, and not web-apps or programs which download and render websites. No, there are many thousands of websites that render their content dynamically on the client - news or otherwise. Facebook, Twitter, and Reddit all make use of client-side rendering (and all provide news services). >not deliberately hide content from users Your browser also "deliberately hides content". It waits a few hundred milliseconds before triggering a paint, just to avoid content from jumping around. AMP pages do the same -- unless you break the mechanism of course.
- lsadam0 8y agoAMP has always and will always be a garbage idea. Stop implementing AMP.
- super-serial 8y agoOver the last couple years Google has acted like a dictator on the web. No more autoplay... except if you're Youtube, or these 100 approved sites. If you use Chrome... oh now you're auto signed in. You opt out of location tracking - we'll still track you, we don't care. Don't give Google more power. Implementing your website in AMP is basically handing the keys of the web over to Google. They're going to make it more and more ridiculous to stay AMP-compliant and you're going to be shut out if you don't play their game. Eventually they'll enable/disable features of AMP-based sites arbitrarily... similar to how they determine autoplay policy on their "approved sites list." Do you think Google should be the all-powerful being that determines what features you can have on your website? That's the future you're opting into if you implement AMP.
- dang 8y agoI finally deployed code a few days ago to rewrite AMP urls on HN. It's tricky to get right. Fortunately Brian Eno was not playing. https://news.ycombinator.com/item?id=18289349 https://news.ycombinator.com/item?id=18289349
- ocdtrekkie 8y agoThis is fantastic. Thank you, dang.
- SquareWheel 8y agoShouldn't HN be grabbing the canonical URL from submissions anyway?
- anigbrowl 8y agoIt's junk and I hate it. Google isn't Yahoo but it's become replaceable in the same way that firm did. Google News has become a case study in what not to do.
- DocG 8y agoamp is slower than full pages for me. No custom configuration.
- deleted 8y ago[deleted]
- Falkon1313 8y ago>I'm not convinced the web pages were really _that_ slow to start with, so it feels like an unnecessary project (well, excepting the fact that web-page bloat has massively increased as people use more and more javascript libraries &c.). Right. It's super easy to make lightning fast web pages. In fact, that's the default state of a static HTML page. It actually takes a lot _more_ work to make pages slow by adding tons of javascript, dependencies, server-side applications, etc. From the article linked elsewhere in this thread: >The 90th percentile weight for the canonical version is 5,229kb. [...] The 90th percentile request count for the canonical version is 647 There's the problem. Over 5 megabytes and 647 requests for one article? 5MB is equivalent to about 20 full-length novels or 1,000 pages of text. And 647 requests?! That must be one extremely comprehensive article, right? No, it's 1 request for a brief article and 646 unnecessary requests wasting bandwidth to load unnecessary stuff. Then people wonder why it's slow. But someone put in a lot of work to fluff that page up to be that huge and slow and use that many requests.
- stordoff 8y ago> The 90th percentile weight for the canonical version is 5,229kb. I get antsy when I made a page over 100KB (excluding images, and even then anything over 1MB starts to feel excessive unless it's something particularly reliant on images). 5MB feels very high.
- gregable 8y agoI'm with you, but it's the reality. I just searched for "NASA" on google news, clicked the first thing not from JPL (https://www.fool.com/investing/2019/01/12/whos-who-in-nasas-next-space-race.aspx https://www.fool.com/investing/2019/01/12/whos-who-in-nasas-...) and it loaded 2.6MB cold cache. Fetched the same on the AMP Cache: https://www-fool-com.cdn.ampproject.org/c/s/www.fool.com/amp/investing/2019/01/12/whos-who-in-nasas-next-space-race.aspx https://www-fool-com.cdn.ampproject.org/c/s/www.fool.com/amp... 200KB cold cache. Removing the likely cached resources (amp javascript, fontawesome cdn font) and the payload is ~35KB. It's certainly possible to make a lightweight page, as hacker news is a great example, but people aren't doing it. For whatever reason, AMP seems to be effective at making the web actually follow best practices.
- scoot_718 8y agoIt's outright blocking pages for me, until the pages retry without AMP
- plasma 8y agoI wish I could opt-out of AMP, I dislike the reddit AMP experience as its poorly maintained compared the the web based mobile experience.
- donohoe 8y agoIt’s not really AMP that delivers speed improvements that made everyone go WOW back when it started. It was the Google would prefetch AMP pages in search results. In many cases AMP is neglibly faster than mobile web page and sometimes slower.
- anuraj 8y agoAMP is a project that benefits only a giant corporation. Please don't support it.
- parski 8y agoThat giant corporation runs the biggest reason for SEO. AMP affects SEO.
- html5web 8y agoAMP is slow like s..t. Mess as a f..k.
- kkarakk 8y agowhy not go all the way and just block websites that use amp? it's what i do. trend riding idiots are not worth it
- bowlich 8y agoHave I been under a rock? I keep reading about AMP on HN, but I have yet (professionally or personally) actually come across AMP in the wild unless I intentionally went looking for it -- or am I consuming AMP and not even realizing it?
- dingaling 8y agoI don't believe that Google serves AMP links to Firefox, certainly not to the Mobile version and also not when you have JS disabled from google.com Plus you might not be browsing the subset of AMPish websites. The only ALP links I see are when people share mainstream news links, and then it's straightforward enough to manually extract the URL.
- ziont 8y agoAMP and PWA are pile of shits designed to lock users to Google.
- k_bx 8y agoAMP is about guarantees that you can't have with regular JS. You guarantee to not do any sync JS and document.write() stuff when you use AMP. Personally, I plan to use AMP to make a better indexation of my app which I do as a SPA, and which seems to be poorly indexed by Google. I'll make sitemap pointing to AMP pages with content, which has "see full view" link on it.
- zzo38computer 8y agoThe content of [1] displays immediately for me (and I do not have document scripts enabled). There are <amp-...> elements; I don't know what they are, and they do not do anything. For webpages that do hide everything, I define my own CSS overrides which prevents the <html> and <body> element from ever being hidden, opacity less than 1, or similar. Further rules can be added to prevent <body> from being animated or having transitions. What is wrong with just HTML, without CSS and JavaScript, or in some cases just plain text and not even HTML?
- cronix 8y ago> which is to speed up the delivery of web pages ...to make up for the slowness of all of the ads Google and others serve. It's amazing how fast pages load with no ad networks involved.
- tgsovlerkhgsel 8y ago> I have µMatrix in my browser, and by default it blocks the AMP CDN. Maybe an unpopular opinion, but if you're getting a slow load/blank page because you're blocking parts of the content, yeah, "it's just you". Without the fallback mechanism that gets triggered after a few second, you'd just be stuck at the white page. A good site will load faster than AMP, on a decent connection it may even be comparable to preloaded AMP. However, news sites have been pretty universally horrible at making good web sites. If someone stood behind their web developers and management with a whip, forcing them to build decent web sites and disallowing them from adding bloat, AMP would likely be unnecessary. Part of the benefits of AMP is the possibility to preload, which allows for near-instant page opening from the search result page (unless you're blocking content, of course), the other part of the benefits is being that whip. My overall experience with AMP has been positive.
- DyslexicAtheist 8y ago> If someone stood behind their web developers and management with a whip, forcing them to build decent web sites and disallowing them from adding bloat, AMP would likely be unnecessary. sadly it's the management, marketers, sales who are standing behind them and holding the whip. Most places measure engineering quality by how many features you can push through your CI/CD pipe (minus the fault-reports, breakage that the pipeline generates). When everything works perfectly it isn't appreciated as it indicates that engineering isn't running at full capacity. The same problem we have with security and all resilience topics: how do you measure & budget (or in security monetize) something that is supposed to be invisible to the end-user? As for AMP it's not just a tire-fire it's a clear attempt to break the open web and create lock-in for competitors.
- b1daly 8y agoWhat’s weird to me though is because I browse the internet on my phone a lot, there are some sites that are terribly slow (and prone to those weird “you’ve won an iPad” hacks). The Huffington post is one. On an older phone or tablet, the site is unusable on iOS. It will crash, and sometimes freeze. Long articles fill in excruciatingly slow. I would think in a data driven business, that there has to be significant numbers of people who actively avoid the site, and that they would want to minimize this. Yet there seems to be no improvement over time. I’ve sometimes wondered if it’s because literally every person in engineering and management at company like Huffington Post have fast devices, and they don’t notice how bad it is. I find it paradoxical.
- 1103 8y agoI have some 12 dev inspect tool for that style scripting this notebook was given to me by my gf and its a starter kit.
- jokoon 8y agoHTML seems like it has turned into cancer now... I wonder what would be required for a format to not have this problem, and how it can be prevented.
- 8lall0 8y agoAMP is IMHO the wrong solution for a stupid problem of bloating when simply making decent html pages would solve it very well.
- cannedslime 8y agoI refuse to work with AMP simply because it seems like the only reason for its existence is to retain more users permanently in the google "ecosphere". Making performant, fast loading websites has always been a priority for me and my employers, AMP isn't being integrated everywhere because companies want to make their pages load faster, they simply don't want to be penalized by google for not doing AMP. So TL;DR AMP is rarely implemented for the right reasons, and the implementations reflect this.