See the entire conversation

Let me be clear: PWAs are awesome & worth doing: ✅ PWAs are as good as native apps: ❌
1,145 replies and sub-replies as of Apr 21 2017

Let me be clear: PWAs are better than no native app: ✅
I’m saying it’s better if you’re in a rush and don’t have time to do a native app.
There are trade-offs to balance. Some use-cases apps are def better for others web is perfect. They have different strengths and weakenesses
Maybe rethink the project then?
This is just straight up saying it's ok to ship a bad UX. You should never be in too much of a rush to build quality software
Especially with tools like react native and CRNA. Right now there's no excuse.
how am I saying that at all. I’m saying it’s worth spending 10 minutes to add offline plugin to a web app if
you don’t have weeks available to build a native app
Right. And I'm saying you should delay your web app by a few weeks while you build native. Shipping a bad product is worse than not shipping
So you think that all sites without native apps are bad products??
No I think sites that should have native apps but don't see bad products. e.g. Instagram is inherently mobile, native app is necessary
Conversely, Wordpress is inherently desktop. No need for mobile. Solid product with no native app.
Or rather no *need* for a native app
yeah I agree with that
But if you were building, say, a new Instagram and went PWA instead of native, then yes. I'd say that is inherently a bad product.
That's actually wrong. Not shipped product doesn't exist. Bad product can iterate and watch use cases.
Bad product takes potential users and makes them former users. Late but good product takes makes them slightly annoyed customers. Big diff
People come and go. If you don't ship -- you don't ship. Obviously you don't want ship completely unworking thing.
Yeah but we're not talking about shipping vs. not shipping. We're talking about shipping now vs. a few weeks from now
You can probably build a React Native app in less time than it will take to build a PWA imo.
World War 3 started already? two pence: I've never once thought: "GoogleMaps is better in the Native App". (it isn't)
Are you criminally insane
Not convicted! 😘
Thoughts on Electron? Feels like Electron with cross-platform native UI layer and built-in App Store would be the right direction.
Distributed App Store ... host your own server, no walled garden
I want browsers to implement and run react native bundles
Its the easiest way to fix this right now
Keep beating the drum Ken
It's like the whole world decided to build AutoCAD as an Adobe Acrobat plugin.
Imagine if, magically, all dom got converted to native views. Imagine your web experience.
The dom isn't actually that slow, but rendering / layout is horribly slow, and gets triggered often by stupid stuff. With native views you /
have far more control over that and don't have to support 30 years of legacy websites.
I was thinking more opt in on a URL basis
Yeah, layer it over the top of the existing web. I can see this working.
Oh man that would be PERFECT. Hey @BrendanEich , wanna change the game? Again?
Web developers must do this at scale; there's no centralized, automated way to rewrite the Web. PWAs happening already, service workers FTW.
But browsers could recognize a header or doctype and serve react native instead though, right?
Service worker is great, but it doesnt do much for the app feeling native imo
What is the issue? Break it down, because I've seen apps that are better than native but use web tech, e.g. @SuperhumanCo's mail user agent.
Note Superhuman uses a chrome extension so it can put some computation on a separate core via a background page, but workers can do too.
Are we talking mobile or desktop for this one?
Yeah the need for apps shrinks WAY down on desktop, imo. Web ftw on desktop.
Animation, interactions, gestures, access to device APIs
No PWA ive ever used felt honestly native. Fast load and TTI, sure. But the difference is there.
Just replace the DOM with native UI elements, laid out with flexbox, and that's a good start.
Inb4kenwheeler getsowned by @samccone
Bring it. Show me your PWA. I'll out load and anim/interaction perf you on it in react native. Without even trying.
The same way a native dev could do to RN with regular native.
has a lot of case studies that show the opposite hopefully he can share
Shall we go head to head?
PWA dragging the dom around like a travel trailer doesn't stand a chance.
Challenge accepted, lol
I mean, we cab start a challenge if you want 😉
Ok. On mobile safari. :)
Haha, that's a cheat but sure :-) what kind of app?
Lets make Instagram
You cannot cheat twice like that, you already won, there is no such API on Safari. That's only Apple's fault though.
Wow thats wierd. Its almost like the web isnt that open and a couple large companies call the shots on what you can do.
Something something native app store something something walled garden
I'd consider this a very good example:
FWIW, I think we need more showcase "good as native" apps in 2017. That's what's lacking, not platform features.
No, were definitely lacking platform features
On iOS you mean? I stopped using iOS years ago because I wanted a less crappy web experience.
those graphics would totally be better on native
It never loaded for me on ios after entering my name
Throw away your iOS device and get an Android cause better web :D
In seriousness, Apple *is* hurting the web.
It's and I would like them to not hurt it. But they pretty sure have their reasons as Google has its to promote the Web.
No offence, but i tried pretty to make it mich smoother than its native counter part
Oh, I was being sarcastic. Sorry :(
see trey you need to use more emojis 👀 watch some videos by @notwaldorf 🦄
But I'm using the pwa and emojis apparently suck there
Ken helped by citing probs he saw in Twitter Lite. It would help (me, anyway) based on your reply to focus on Android native vs Android PWA.
I don't think I would build a PWA if all iOS users are alienated.
It'll be just a website on iOS. Although clients who want PWA want it be offline and other features on iOS too. So you have to dance around
Right but then why would I pick PWA over just building with react-native? Especially when it's so *easy* to build with react-native.
To lower/remove installation barrier and avoid the app store 😉
Now that you mention that I've told my parents and non dev friends about installing PWA's and they all give me crazy looks. So not sure 👐🏽
most use them without realizing it. anyone running android has now been prompted to install, getting much more popular.
I'm not saying you should, but "why" is because you will have to build a website anyway and it you want it good, you did better make a PWA
If this theoretical web-delivered native UI platform was just another build target for your React app, what's the problem?
A UI platform capable of running web content is just a browser. React web apps still rely heavily on the DOM.
I have never seen a web-based React app that does not use the DOM.
Superficially I understand and agree, but under the hood (one level down the component tree) it's often DOM.
one day with @reasonml you may see react be rendered with GL 🙏🏼
I shed a tear for accessibility and openness 😛
Whats not open about gl
No view source for native apps. It's easy to overlook the importance of that feature of the web +1 for pun tho 😜
You could totally view source. You're delivering a React Native bundle and that's just JS.
The value is that the web enforces it.
This is still web. URL -> server -> sends back bundle -> browser runs it
Unless it's bundled into the app.
(I assume you're talking about RN and not webgl)
Even if it's bundled into app its still plain JS, easy to extract and read, at least on Android.
Yeah, true. This shouldn't be a React Native vs web discussion though. It's dom vs native ui for web apps.
Ah. I'm a DOM lover, you know that.
Huge difference between reverse engineering a signed bundle and clicking a button.
Nah, on Android you just extract the APK like a ZIP file. No reverse engineering needed.
This is a distraction from the main discussion...what Ken is saying would definitely have a view source button like normal.
Sure, I'm replying to the discussion about viewing source on an RN app, not negating what Ken said.
I'd take it if it a little more work to view source if it improves UX IMO. I'm building apps for users in the end.
What if we could have both
Random thought: Cordova is an implementation of the platform features solution, isn't it?
Indeed. That's Good thing
Why. It doesnt feel native, never has.
That's often because people take shortcuts. The primitives are there and work well
No, its because its do@
plz backup statement with concrete examples and profiling
not just FUD because people are going to use these tweets as proof against the web
throw me a web app that you think stinks because of DOM I will show you ways to make it not stink
Been using Twitter Lite to follow this convo. Glitchy, random scroll hiccups, feels like web.
Which browser? (Need I ask? :-P)
Safari iOS. I'll try Brave, brb
Looks like Twitter Lite's missing the "<meta name="apple-mobile-web-app-capable" content="yes">" tag, wonder if that was intentional...
Standalone mode buggy is hell on iOS. <iframe> crashes because limit of memory, cannot play media from iframes, other crashes
Huh, good to know! Thanks.
Ok, thanks -- keen to hear re: Brave, Chrome, whether any diff between B&C.
Seems more stable on Brave. Still scroll glitches, but better than Safari for sure.
Elaborate on "scroll glitches"? Curious if there are parallels to scrolling challenges I've faced with react-virtualized and dynamic content
Video of the scrolling / rendering issues.
Interesting! Thanks for sharing.
Seems to be related to how it's done. Doesn't mean it cannot be better. Twitter Android also glitches scrolling some times. Bugs everywhere!
And it's an intense use case because of all you assholes jumping into this thread. 😜😜 (I discussion ❤️)
Out of curiosity- do you see any similar glitches from an RV rough equivalent?…
("rough equivalent" in that it windows dynamically measured text- each row is obviously not as complex)
I'm pretty sure Twitter Lite doesn't use react-virtualized anymore. They made custom implementation cause complexity of a tweet
They never did. I've been hoping we might join efforts at some point.
Smooth scrolling. Definitely see rerender flicker.
that looks like the touch outline thing
Ah, the flicker render is actually part of the demo. Whoops! When you touch it resizes to a psuedo random width.
Load it in your desktop browser and click the page a few times to see what I mean. (This demo is kind of overloaded for testing purposes.)
Stoked to see it's scrolling smoother for you though! 😎
It seems like the flicker shows a dark box flash on mobile. In my browser, no dark box, just resizes nicely. Scrolling is definitely nice.👍🏻
Hard to find mentions in this blizzard. 😜 Trying...
I have "mentions" filter on native 😁
Interesting. More flicker on safari, @brave has an interesting issue.
Interesting! Wonder what causes the black flicker issue when you touch. I don't see that on my devices.
iPhone 6s Plus there. I also see it on my iPad Pro 9.7" (safari).
Inferior hardware bro
Oh, on iOS, Brave uses UIWebView still. But perhaps we can do something. Cc: @jamesmudgett @codebycoffee on this.
Ah, UIWebView perf isn't so great for things like this. Same used to be true at least for views opened in the Twitter native app.
UIWebView's relative perf isn't great with anything. Memory, accuracy, or rendering speeds. Upgrading once networking protocol expand on WK.
Try Brave on Android?
Don't have a modern Android near me, will try on an older Moto G I have (not a fair comparison tho).
And here's the same demo app on a crap Moto E 😉 just 'cuz
React Virtualized Brave demo Moto E
Scroller sometimes calls window.scrollBy. This can interact badly with scroll inertia animation. Chrome handles it well, Safari not so much
Only scrollBy or scrollTo too?
Haven't tried scrollTo, but I imagine it's the same issue.
Yeah no native app has ever had bugs weeks after launching. Your right. Tots the webs fault.
No need to be super sarcastic Sam. Happy to discuss relative merits.
Lol picking on a brand new web app carries very little weight.
Okay, I retract that one. Just happened to be the one I was trying out.
It's good, but there are noticeable frame-drops. I don't have a high end Android device.
It's good perf wise but it lacks gestures and scrolling behavior is buggy in the details page and when drawer is opened (ios10 safari)
The details page back gesture is nice but doing those things require an insane amount of work instead of getting everything right for free
Web must fast-follow ubiquitous native w/o tastes-great/less-filling or brandX fights. Native leads Web. Web wins on reach. Act accordingly.
So let's do both. Native UI on the web platform via browser APIs that allow using host OS UI layer directly.
It would be possible to create a browser that can leverage platform components, similar to react native but works with the dom + exposes..
some native elements as built in web components.
*that* is genuinely interesting to me.
platform defined and controlled UI impl (painting, a11y, etc), web interface.
Wait...isn't this what I've been saying this whole time? 🤔
nah, we added the DOM back in and used a web primitive to abstract away the platform-specific (react) integration
Why does the dom have to be a part of this? Honest question. React Native doesn't use DOM...what's important about keeping it?
it is an open standard. if you want to build a browser feature, you need to build it using an open standard.
Why can't this new native UI layer be an open standard?
an open standard for representing and manipulating trees of UI elements is a DOM. seems silly to reinvent when it does the same thing.
The (current) dom was designed for documents, not apps, and has decades of websites to support.
Yea the dom doesn't have a great API that's why client view frameworks exists. Howerver, the advantage of using it is to keep existing sites
working and be able to still use all frameworks that were built on top of it.
Well the only other renderers you get are canvas and gl
The idea was to hook into the native UI renderer. Like UIKit, android's. But from web.
Yeah the goal is to be somewhat compatible with the existing web ecosystem, which means using the DOM.
worth noting: the DOM is quite fast as a data structure. might be interesting.
If these other changes solve the rendering issues...then yay, we all win!
one thing it seems nobody makes use of yet: CSS Containment. It's like perf magic on mobile if used correctly - full layout control
os/uikit upgrades kinda ruin this though. every app would have to support every possible version pairing at once
Yea new OS versions that adds new features / built in components would need browser updates, like now with new browser features
This is a valid point.
Web has versionless "living doc" object-detected content language model, backcompat till you find no one cared (maybe years late). Winning.
A blessing and a curse. 😄
Don't get me wrong, Brendan, I love the web. This is about better web. Thanks for weighing in on this discussion, it's been fascinating.
Def, and we are on same side (I think! But I tire of "sides").
Indeed, nothing but positivity here, love where we are since I started in 2004, you've been here a lot longer.
Yes, this is coming. Should have come sooner, but let's get it done.
Did "Web" (really, Microsoft, then Google - the market dominators) fail to fast-follow native for too long? Yes of course. Forgive & forget!
"The BASTARDS!" - concussed Basil, Fawlty Towers, "The Germans". But hold them to account now. "We all have it coming, kid." - W. Munny
Don't mention the war!
"I did once but I THINK I got away with it!" - concussed Basil
would you believe it's actually no longer capitalized; ...web, i mean.…
LOL :-) I hear you bro. I do. but search it. I got accosted from the G folks for demanding it was Web.
G for Government or Google? Serious q!
when using native platform components instead of the dom. Things like switches, pickers, drawers all have great native implementations ..
that evolve with the platform to always match its look and feel.
I'm interested to know how much work it took to get that performant. It seems like on native apps that's a given, on web it's exceptional.
As @bgalbs said in great talk years ago[1], native has wider "happy path". Web has narrower, and for some browser versions, it's zero-width.
Bookmarked for later, thanks.
"... a world where you have to recreate the content, just to choose a new distribution channel... doesn't really make any sense!"
Yes, React Native (like OpenLaszlo, anyone remember? Or Haxe) helps. But in principle: no technical obstacle to Web fast-following Ntaive.
oh man i remember openlazlo.
except people seem to expect things to continue working forever.. that is why the origin trial program exists now…
here are new amazing things go build awesome things to prove their viability but they may break, so opt in only.
New things couched in opt-in or just "new" can break. Google must tough it out. Breaking old things is harder, and it should be.
can speak to this better than I
React Native is close to what the web would be ideally on mobile platforms, it just didn't make sense for FB to reimplement a full browser
so it's limited to React, flexbox (no css) and a subset of web APIs.
I hope CSS grid comes next
Hope so too. CSS grid is really amazing
That's good, and reminds that "MVP discovery" can happen even with suboptimal delayed+forked web standards path dependencies. Codify harder!
Sure, but how about cooperating in standards bodies (not just FB, G/A/MS/Moz) to ugrade the platform from bottom up?
Definitely, I think it's the only way for the web to catch up and stay up to par with native apps. Needs a major revamp.
I support this initiative. The web is sadly in the hands of consortiums, established personalities and large corps (for good reasons huh).
FWIW, @nidiumproject is trying to experiment various stuff as the "ideal" browser engine for mobile app.
The medium is the message. If the medium changes, so does the message.
I don't think the point you're making applies to the point I made. An ebook version of a paper book is the same content.
That was 2012 @FluentConf btw. 5 years ago now.
Reminds me of when Dave Hyatt wired native menus up to XUL markup in Mozilla (1999?). Agree on need for native widgets; can still hybridize.
What about Flipkart Lite? So far my favourite PWA. But I can still tell it apart from a native app due to the lag and frame drops.
Bugs to fix -- hope someone (perhaps someones, plural, at Flipkart an Google) fixing.
Can you help me with more details on where you feel its lagging? Would be helpful to debug it fast
The most noticeable lag is when I tap on things they don't respond immediately.
can't tap top bar to scroll to top.
Sounds like too ambitious of a feature Should haved used native
maybe the web could give us a real scrollview instead of standardizing fucking web bluetooth
😂😂😂😂 but the robots and beacons mannnnnn feels goood
DAW in the cloud makes this all worthwhile
you read my mind! i think when a real DAW can be built (i.e. supports audio interfaces and plugins) i will no longer be a hater.
What're the things currently missing to be able to make this a possibility?
Pete - @soundtrap is pretty legit and does audio/midi interfaces. Native plugins kinda impossible, but that's true on iOS too!
Manufacturers are waiting for WebMIDI to be in more than one browser. I got it started for Firefox, but it's on the back burner right now.
They need it for "the brown note" ( Good addition to my throne of skulls capabilities, mwuhahahaahahhHAHAHAHAAHA!
I need to rewatch that mythbusters episode
The polyfill is not too terrible though. I maintained a fork a while back, don't remember where it went.
I think we'll get WebMIDI into FF (and Servo, since the MIDI core will be in Rust), just got higher priorities with Quantum etc right now.
Ableton tried a little in that direction. But the gatekeepers have no interest in making it happen.
Don't disagree here :) but Bluetooth and web USB is quite dope
"Why not both"? (Heard on twitter recently.)
false dichotomy I know, but needed to underscore my point :)
I thought that was a typo at first
Admitted, WebBluetooth is also handy for things like controlling lights, but that's not nearly as fun to interrupt twitter threads with.
Ok lets make an app. Ill do RN, you do cordova. Then do a blind poll over which one is native.
And then let's put it in the hands of an end-user ~~who won't know the difference~~
Send me something that is slow because of DOM plz
Also if you send me a for loop that generates 0xEEEEEEE nodes and tries to move them all I give up.
Hyper can't do nearly as many fps as native in threejs-term due to the DOM (hterm)
We even took out hterm completely and the best case scenario for a terminal of 90x35 cols was 15fps on a macbook pro
Canvas will get us 3x the perf of DOM
What's the bottleneck, in particular?
We need a span per character because no CSS prop to enforce monospace for non-fixed-width chars, like emojis
The simple task of continuously changing the glyphs inside each of those spans yielded 15fps for a term that's not even fullscreen
So, the only solution to get "native perf" is to ditch the DOM
Not saying "DOM sucks", just providing a concrete example of reaching its limits, with inadequate perf on high end hardware
Not so fast. Ofc you could use canvas, but let's hear from @davidbaron.
If he gives me a 'letter-width' CSS prop then we could ditch all the extra elements, which might help us I think
So you basically want to ensure you reserve X amount of space for any possible character so you can update the char w/o triggering layout?
Saw your fav, so assume that's right, Q: is it a defined char range, or literally anything in unicode that someone could possibly paste in?
the entire unicode range, including glyphs that are not in your monospace font, like Apple Braille
Hmm, now that I have the full scope, let me think about it for a few minutes - have one initial idea, will ping soon if it seems feasible.
Cc'ing @tabatkins too -- twitter canoe seating goes to 50!
Huh, use case for an enforced character grid outside of CJK languages.
Presumably it's okay to round to a multiple of the width, for wide emoji?
this is all address to you!
Right now we create elements whose width is the measured width of the monospace font of your choosing
What CSS property would give me such a grid?
Right now, none. Thus my interest in the use case.
Yeah I think that would most definitely help. Maybe applicability is a bit narrow 😅 Until then, one span per special char
So how do wide emoji work? Just overlap? Say, several U+FDFD in a row?
If the goal is replacing characters without doing layout, I'd think he'd want wide emoji to just overflow their grid cell, no?
Emojis need to overflow and remain wholly visible. If you insert a few emojis together in your terminal you'll see the intended effect
The idea is that the "cell" is never bigger than the width of an english character
Sure. Just seems a little weird to me that overflow is preferable to centering in double-width cell.
That's "the spec" we are dealing with 😇. Can't introduce new cols per row nor change their width
While adding to CSS to avoid many-spans is interesting, I was planning on using many-span approach + 3d transforms to warp.
I can't think of anything other than having many spans for warping the terminal. Want to stay in DOM not canvas.
So this is the problem you're referring to?
keep in mind the fps measurement there is not correct 😞
Right, but the morphing/dancing "stats" box is illustrating your lack of a `letter-width` prop?
No, that's a term resize bug. If you close and reopen it should be ok
(reopen a term at the desired cols / rows and re run threejs-term)
I'm sorry, maybe I still don't understand, but I was able to get unicode rendering just fine alongside other chars?
Yep. It works. We featured it in a release. I'm discussing slow performance (or slower than what I want)
Ok. I understood that it had to do with needing to create a <span/> per unicode, hence the slowness.
I was confused because after light edits, all unciode & latin characters are inline as textContent -- no <span> needed
Hence virtual dom?
In that case that doesn't help us. Screen can get wholly invalidated from frame to frame, so no opportunity for reuse
Hyper is great but I have actually stopped using it because of this
seems like viewport rendering could fix this though?
Animate 500 svg nodes at 60fps
Is dom inherently slow, or is it just a hell of a lot harder to make apps with dom that look and feel like native?
This is the core argument.
I mean either way, Ken's argument that the dom fundamentally sucks still stands.
plz backup with examples, empty statements mean nothing
Well I mean the last decade of web dev has been abstraction after abstraction over the dom because because working with it directly sucks.
No, that is a useless non-analysis. It's like me saying Win32 API sucks because OpenGL. Do the gap analysis, as we are doing in this thread.
Please do not ask such a general q. If you want a very fast, l10n/a11y-ready text button, DOM (HTML) is fine. Don't forget grid/flexbox! ;-)
If you want custom view scrolling, custom transitions and other animations, Web needs some stuff already coming as Alex R. pointed out.
Right exactly - most of Ken's threads of late have been about native vs web, and the weakness of latter. This tweet seems to prove his point
But stoked to hear the bridge will be narrowing!
I cited Superhuman as counterexample, but whatever. Web always lacks best-of native. Always. Must catch up quickly. No browsers bickering!
"Web always lacks best-of native" - that's kind of all our point's been - why so hostile??? 🤔😀
Native VS web is 🍏 VS 🍊 - web is only weak when your native apps has got high downloads, more visits and conversion and convering the costs
Its actually like ferrari vs prius
Ferrari VS bicycles.
Also it's totally weird to compare Twitter native with Twitter Lite. Life is being in development for a few months, native for years
React Native uses flexbox on native UI! 😊
Was meant to be specifically to Ken, for him to clarify his argument - sorry :)
This is the crux of the issue
You can't blame them, it's much harder to get it right. And nobody has the bandwidth.
hmmm number of native apps that hold wake lock and drain my battery... yeah NONE DO THIS obv... oh wait the majority do...
I really hate installing native apps. Unless they are so popular I'm forced by some social-network effect to do so. Even then, Web can cope.
That's not what's being discussed here though. At least OP
Same, I'd often only use websites for my the things i don't do very often. And the subpar experience is ok, because I don't use it often.
Web will win. It’s just better. Sharing (URLs). Simplicity/familiarity (forward/back). Security/privacy (sandbox). Mindshare. Also: JS!
This isn't a web vs native app discussion. I feel like everyone kneejerks into their favored camp when they hear the words Native UI.
Native has a place obv. But the web does also
Sure. So, what about exposing UIKit to websites as alternative to DOM via React Native mechanism? If browser supports it, renders natively.
iOS enforced a 300(!)ms delay on every click on a website until around 18ish months ago. This had a big impact and the perception remains…
To be fair, exposing a native UIKit would never work - it would need to be magically cross-platform
Yes ... and it turns out React Native has already solved that problem. 😉
So build it into the browser, at least the parts relevant to each browser's host OS.
... they automated away differences in navigation patterns and platform-consistent interaction?
That's a different discussion I think. Twitter Lite doesn't have platform-specific UI, does it? This would replace that.
Its almost as if wed have to create this common interface to both uikit and android
Facebook Yoga - Practical, Flexible UI
That said, I acknowledge most websites/apps are garbage. OTOH, so are most apps.
We need to get you doing a lot of React Native so you can feel the full power of the dark side.
we need to get you doing a lot of progressive web apps so you can feel the full power of the light side.
Cordova is a JS layer access to access hardware features. No DOM at al.
Last time i checked it rendered html?
U r confused. A plugin that access the geo location (e.g.), is accessing a device feature. It is not the plugin that renders the location.
When you load a cordova app. Whats the ui?
It is HTML. But Cordova itself DO NOT access the DOM. Cordova is often part of apps that use HTML/JS and wants to access device feature.
It renders a webview.
Ok, let's play your game. It "renders" a web view. After that, when Cordova (the layer, the plugins) access the DOM?
Cordova loads app web content into a webview with extended JS APIs for sensors & other device affordances. Still DOM. Cc: @brianleroux to +1
yep still dom (or paint a big canvas p common too)
FWIW, DOM *was* questionable in the early days of mobile but no more. Idk that vdom (or whatever) is even needed truly. Stuffs fast.
The dom is fast?
Presentational DOM. If you build big models in JS, don't use the DOM. Duh!
Yes, custom view scrolling, custom animations, etc. need off-main-thread help. Coming, we covered this earlier today!
What about reasonably performant svg animation at scale
What about it? What are you comparing it to?
Literally any other programmatic drawing?
precisely endorsement I was looking for. ;-)
No, the dom is fucking slow.
The sky is green. Hey this is fun!
Hey, except the sky is blue AND THE DOM IS FUCKING SLOW.
Oh, all-caps, I'm convinced now.
Its so wierd how my code works so well elsewhere, its just this one rendering target that can handle its shit.
is a Pokemon I like this game
Long thread is long.
Thats what she said
nice <3 an evidence based approach to software development
I take an actually building shit approach to software development. The dom blows.
Wheres your evidence the dom is fast?
funny you say that I was just marveling at @Rich_Harris's recent opus… on the topic plotting ways to make faster
svelte-bench - Benchmarks for Svelte
Rich is on to something, strange for caching but still pretty cool.
how do you mean strange for caching? (i tipped everyone else out of the canoe, this shit is insane)
Oh cool. Animate 400 svg elements at 60fps and then lets talk.
that sounds really trivial tbh..
Then fucking do it. Show me.
Pretty motherfucking please with a cherry on top.
is this mobile app a for psychedelic nightmares (or just another synthetic benchmark?)
Or accessible interactive data viz but haha good one bro!
Well don't let me get in the way of your growth hacking or whatever. I'm sure the Swift and Java community will love your company. Breaux. 😘
Actually i write it in js. With react and d3. Hilariously enough, the dom is the bottleneck. Whodathunk?
weird i wrote it in 26 loc and it is 60fps and did it in sublime text 2 for extra points
Whoa operator on the left... You've changed.
literally googled "how do i write an svg" and copy and pastad from w3school
also literally googled how do it write infinite css animation
nice try ken, everyone knowns gifs are not 60FPS
my immediate first thought was this:
My second is: "now pan and zoom on that"
Again that sounds trivial. These 'problems' sound like "I tried it once in 2004 and I'm SURE nothing has changed!"
Anecdotally I opened @samccone demo and did just that. Fairly smooth with some definite jank. Yes, I realize this 1 minute w3schools code.
Wow React fiber is looking awesome
I'm not trying to incite anything. It's a real use-case, right? If we're arguing parody with mobile
oh I'm just trolling b/c the goal posts keep moving---this argument is *almost* a decade old to me (and agree its crucial!)
I'm trying to post the video but I can't get Twitter's native app to scroll down without crashing.
you should see the horror that is their website.
Boom this reply floated it up. Thx lol. I have a shit phone, nothing does 60fps on it.
Would be interesting to see the same experiment on a React Native app.
On your shit phone. 😄
That is an abstraction. Also iOS didn't even support SVG until like 6.0 😇
I mean use RN and see what the performance of that same visualization is.
Performant RN isnt hard. Performant web mean being a fucking Sr engineer.
Use the PWA haaaaaa and we've gone full circle
Do developers build UIs primarily with SVGs? That's very cool, but it's not something you would build Snapchat's UI with, right?
Remind me what the hard part about the snapchat app that can not be done on the web is?
Snapchat didn't build their app on the web. Oversight? Strategic? Or technical?
Make them rearrange. With javascript.
And complex tweening between multiple data points
it's doing a lerp, more complex wouldn't really affect perf here.
Correct not a big delta here.
So to have performant SVG dataviz tweening, you have to generate keyframes in CSS for each tween, then fiddle with class names?
That's two languages and the DOM to move a box to another place
Imagine if we used immediate mode rendering for the web, just like native platforms do
Game engines do 3D *magic* in 4K 120fps and here we are struggling to animate some 3D charts
We have that though. The DOM is ill-suited to modelling complex 3D scenes, doesn't invalid it's utility for other use cases.
Hello, I helped get canvas3d (now webgl) launched. Use the right tool for the job. Cuts both ways: no dissing SVG in modern engines wo data.
I think that WebGL *would* be great for the job! It just doesn't have the same accessibility/tooling/usability guarantees of the DOM
I just yearn for a "AOM" that doesn't pretend like our complex apps are a document
What is particularly document about the DOM other than the first character in the name, and the root element's name?
A document metaphor is what gives us accessibility & extensibility though. Without it it's just indecipherable draw commands.
Native apps don't have a document metaphor per se and they have pretty great accessibility APIs
The thing is, UIKit & Android views handle accessibility fine. Better, even. As a render target for React, they would be just fine.
To be fair, the programming models are not amazing for either ...until you layer React on it 😀
They also have full system access threading and etc
Again: almost all your gripes about animation/paint are simply browser engines not, until now, using GPUs properly - DOM not the bottleneck!
It assure you, the obj model in native apps isn't the magical difference between hitting massive fps, it's that they use the GPU correctly.
What do people think the magic sauce is that differentiates Native OM from (D)OM? Is it the word 'Native'?
One was designed for documents, the other for apps.
You can get close to this using the DOM by turning on contain:strict
Canvas is great. It doesn't hand you a UI kit
And accessibility is shot because there's no APIs for it outside of the DOM
Hey folks, CSS custom properties. Web animations API. Just sayin'
Yeah, the trick is if anything other than this loop is happening on the page, then it's screwed. JS perf not composable.
Some UI tools use preemptive concurrency, some use cooperative concurrency. And then there's JavaScript with it's uncooperative concurrency.
Oh, your ajax call came back and takes 30ms to parse and process some json? Sorry, I just dropped three animation frames on the floor.
And short of manually rewriting all call stacks longer than 5ms into something like fiber, there's nothing you can do about it.
Animations and JS run in different threads..
I love it when 2008 calls to troll JS from the Flash Player.
Just trying to put a wrap on this discussion. Ken says the DOM is crap, you're saying "No, it's good enough." Is that right?
What needs to happen to bring the average mobile web app up to "good enough" then? I see skilled devs do fine on native & fail on web UI.
It's led me to believe that native UI is easier to "get right" than web, by a clear margin.
Skilled web developers. I'd call myself a 'skilled web developer' and I wouldn't be able to show text on a screen in iOS.
They are skilled web developers. More experience with front-end web than mobile.
I think youre selling yourself short
To be fair I'm not going to go buy an iPhone, and a mac so that I can develop a native iOS app when I can make performant web apps.
You can develop React Native for Android on Windows or Linux.
To be fair, im not gonna go buy an android phone and drink a six pack of google light to make PWAs
why do you need an android phone? you just need chrome, and a computer.
Why do you need a mac when you can just use expo?
Cuz then I would need to use react..?
Somebody call the burn unit
On native platforms there is one well-documented happy path and tools that work together. On the web, takes lots of choices to get it right.
Of course, sometimes the official native path sucks or is ugly. Freedom/responsibility to choose is blessing/curse of the web.
Platform owner has an incentive to get devs onto their platform. & usually also have power to change the platform to help you.
On the web, we have actors like Google with incentive to help devs. But they don't have power to solve problems without consensus. Slower.
Most platforms develop a pretty high quality monoculture. Web intersects so many other communities there is no agreement how to do anything.
This seems to go beyond just swapping out the current DOM for a React Native-ish UI renderer in the browser.
Well, one way to see that dream is as one web sub-community desiring to own a platform they could push forward faster for their purposes.
I am reminded of and/or cappuccino
Hey all, I actually had a fantastic time chatting with everyone today. All with good intentions, hope I didn't piss anyone off. ❤️ 1/2
I'm going to watch the Blazers/Warriors playoff game now. Notifications Have a wonderful evening. Even you DOM lovers. 😉 2/2
OK half time how's it going ?
Hanging with the Dubs but it's not looking rosy
Weird night. The defense is good but the guards on both teams are klanking so ofte--- wait Klay just showed up
Should probably deselect the 20 others in this conversation. 😊
In other news - this is the weirdest lopsided outcome I've seen in a while - it still feels like they could blow it all again
Yeah pretty embarrassing.
Down here we noticed Mcvale and Mccaw in place of Durant and Livingston and wondered hmmmmmmm
"Just for that you're not in the gang anymore"…
Should probably deselect the 20 others in this conversation. 😊
Same, strong opinions from here are weakly held and not ill-intentioned 😀
I hope i pissed everyone off, its 2017 and not only does my car not fly, but my websites are still not powerful
this website has one too few crossbows
I only hope I didn't piss off Ken because I don't wanna die with a crossbow
I love you buddy. Also, i dont need a crossbow :)
You're just not driving your car off of tall enough things yet.
I love what @nolanlawson has shown us about web perf. Workers are still tough though (serialization/copy perf can be nontrivial)
and HOLY SHIT what are you parsing that takes 30ms!?
I smell Enterprise!
A lot of fiber is hard for the lower GI track to parse. Resulting in a lot of 💩
Your app has no call stacks that take longer than 15ms to resolve? If so, good on ya'. Certainly not true of most sites.
Not sure I follow. Main thread in my profile was totally open and happy
Yeah, for static css animations this is totally true. If they're based on interaction though you have a problem.
do a fucking barrel roll
solve gravity and wtf is light even
This is like the shittest way to do it, and it STILL runs perfectly.
Thats so janky on mobile i just ripped my eyeballs out. Thanks for playing.
Works pretty well once you swap translateY to translate3d
shame twitter threads ruined this thread. some really good learnings here for those new to mobile perf.
Must escape thread
you guys wanna also talk about zelda
UUHYES am I doing this right
But Brian, if you coded that Zelda game with 5000 divs and animated them, would it be 60 fps?!?
make me a iPhone app and have it published tonight. Oh wait...
bloody hell are you lot still on this? can someone tip me out of this canoe please
Bait applied...
Love that gif. It's mine now.
There are JavaScript frameworks that have likely lived shorter lives than this thread.
Oh my god. This thread is priceless. Please pin it to your profile! 🤣
wait until @ken_wheeler finds out that 'dom' in dutch means 'stupid'
Feel free to hit "mute this conversation" Rich.
Tinder, but for chickens
Tinder, but for Ken Wheelers.
Having so much fun with Expo Sketch tonight, building the only hook up app you'll ever need
I swear I never saw this—this is amazing.
the creepy part is that I was about to suggest "kender" as a name
Native App as its best is better than a PWA. I agree. But PWA has another benefits and some are far better than some native apps.
lol i super know what this is
I actually learned a ton, and in a way, Twitter threads enabled this. But then I was cc'd on every tweet so it was easier to follow. Sorta.
Write a medium post with the learnings👆, I would be happy to contribute
*gives the smuggest look*
JS string concatentation FTW!
We’ve extensively benchmarked similar animations for AMP Ads and SVG + CSS animations came out on top. Its fast.
How about we trigger some layout and post those stats
Sorry but just upping that to 1500 rects slows my browser to a crawl on a desktop PC. By some definitions im sure thats 'fast'. Not mine
And its not even per-frame rewriting the DOM its CSS animated not-touched rects
Welp, theres the edges for css. Per frame js anim is probably more like 200 elements.
I'm closer to 20k animating items per frame at 60 using webGL
I wonder if the dom was reimplemented in gl immediate mode, what it would take to make it accessible.
The problem with DOM is that its tied to a gigantic historic standard that it NEEDS to do. Browser teams are already heroic in optimization
My suggestion has been to keep the legacy web standards and provide a way to load the new shit
My angle on it is about finding a way to open up the programmable GPU in the context of styling. Its not just about making HTML dom faster
WebGPU? no i mean integrated in a styling UI
Though id still prefer a native ui bridge. A11y is already there.
Native is its own clusterf* of problems. I think HTML DOM will get a lot faster with these new renderers coming.
Could you elaborate on what those problems are with native?
Native means different everywhere, no control on custom ux.
Those issues can be benefits as wel sometimes
Not quite what's being discussed here tho. Put a native UI renderer in front of a web app, not "native app", so expectations are different.
I seem to be fighting this same battle over and over -- wish there was a way to edit early tweets to make this clear.
Everyone assumes native UI means native app.
Servo experiments are looking highly impressive though, doing tons of items animating at 60, far beyond where we are now
Are you using victory? (Serious question)
Like, as we speak?
You said with react and d3 so I was curious. I had trouble pushing victory that far.
Yeah, JSX is the truth and it will solve all problems! React for everything! And I dont know Who is a Pokemon! Im starting to like this. 😆
There's a lot better more realistic examples. Hundreds of companies spend tens of thousands of dollars building table views that don't suck
Fuck that makes me so sad
is this a bad time to mention that you can put SVGs inside canvas? i'll show myself out
Yes you can put CSS in SVG. Or outside of it. There's way more you can do with SVG than you can't do. Everyone's unnecessarily scared
D3.js is a thing too.
Is there a story there? Did you actually do that for something cool?
I almost just crossed the line, ill dm you
Most of your gripes aren't DOM speed, they are almost exclusively browsers not (until now) utilizing GPUs the way they are intended to be.
Old misconception, and it's getting better.
Bullshit. Prove it.
I feel like if you've used a webpage in the last 4 years you'd feel it
Dude, that must be what im missing
stuff was fast before BUT you had to hand author b/c the frameworks didn't notice mobile or ignored it b/c of this nebulous 'native' arg
I'm not sure that still constitutes DOM? I'm a noob though, I thought most JS APIs were abstracted away from accessing the DOM
That is 900% dom.
Ah, I've made the assumption that everything not interacting with the view wouldn't be DOM
HTML implies DOM. This is fundamental.
That's why you use JSX
Cordova still sucks in terms of performance. In old Android versions, it'll use the native webview, and the performance is the worst
There are solutions, like crosswalk to use the latest chrome webview, but they hugely increase the app size
And the performance cannot be better than a PWA, so there's that
I think we're talking about two different things. 😁
Lol yeah. My only qualm with react + gl in browser is the accessibility and extensibility issues.
How do native apps solve that? Should solve the problem the same way. In fact, use UIKit directly (or Android equiv), not webgl
Bundle any browser can run? View source works? No native code multi-architecture (multi-object-file) tricks?
Multi-architecture for sure, like React Native, ReactXP.
Not any browser. Just Brave to start with. Then others. 😉
Also: code splitting with that react-native. I don't believe uses will be fine waiting whole bundle to every time they visit a resource
Which brings us pretty much back to the webplatform except of UI being native. Oh, and react-native versions, no real use without plgns, etc
Explain further? I'm not sure I'm following.
That's follow up of:
Also: code splitting with that react-native. I don't believe uses will be fine waiting whole bundle to every time they visit a resource
This feature of the web won't be available with WASM; the web will slowly move away from a View Source world.
Indeed, which is a problem.
You do know wasm has a view-source story, and I suspect will have even better decompilation-based tooling than JS does, in due course?
Did not know! Like source maps?
That's what the whole argument is about though -- using native UI elements directly via React Native instead of going through the slow dom.
The DOM is not slow for reasonable cases.
Who gets to define what a reasonable case is
You're not old enough to know that song or the video!
yep pretty much me. I've got cat-like reflexes for my age. ;)
I want to take this moment to point out I just switched from Twitter native app to Lite because native app was crapping out. 😂😂😂
This isn't as nice though. If not for the "long threads don't load" problem I'd prefer native. 😜
Thats what im advocating, loading platform ui via react native, instead of dom
Would love to have a browser that works a bit like @expo_io and serves react native app if a domain has one, otherwise a webview
Thats what im sayin!
There's Flipboard which renders to canvas. Not accessible tho.
This is nice! So what would it take to make canvas accessible?
A lot, since it's just pixels. Even if you have a dummy DOM behind it, you don't get 1:1 mapping for text selection, focus states, etc.
Basically you'd have to OCR everything for interaction and have a screen-reader friendly markup below it. It's really a proof of concept.
I don't understand why UIKit can do it fine and we can't on web.
There's a GPU layer underneath, seems to work great.
That's why hooking into UIKit/Android views seems like the most straightforward way to go. Nobody's really addressed that at all.
UIKit, UWP and Android SDK expose the layout and semantic data to the rendering engine, much like DOM does.
But much more efficiently.
Yep. Only when IE9 launched did browsers start taking into account paint, composite and layout optimizations seriously.
On the other hand, Canvas is just a per-pixel rendering pipeline.
I don't have problems with anything here. I know the state of things. They are as they are unfortunately.
I agree with your point there. Recently I have done this! With your plugin! But I feel like some people look at PWA's as Native replacements
Yeah. There is one weird line. I'm actually building a news PWA right now and tbh it's better than some popular native news apps. Some.
Also it for sure lacks cool animations and doesn't feel native, etc. But by functionality it's better than some native news apps.
Meanwhile at Apple
^^I <3 iOS but it's not even close on web features, which makes me 😭 given my job is working with awesome/performant/cutting-edge web tech.
Do you mean like you wanted flash support when iOS said fuck this shit years ago?
There are tens of thousands of good as native apps built with Ionic. Most so good you'd have no idea they aren't native.
10k good as native apps? Sigh
Have you ever used Android? Most apps are pieces of junk. As good as extremely popular apps from consumer oriented unicorns - probably not
But Uber or Facebook don't represent the vast majority of slow, clunky apps.
Figure of speech... But wow....jimmies are rustled...🥃 Fun thread though...
Id be shocked if there was one.
Be shocked then 🤠. Start-up time is the easiest way to tell but once running the apps are pretty fluid these days.
60 fps on web is easy now with iOS. Doable on Android with newer devices. Android is the laggard but it's a Moore's law problem.
I’ll bite. Made a few “wrong” interactions. People don’t trust web UIs as much because they fall apart like this. Granted, it’s iOS Safari.
The uncanny valley of UI.
Long pressed a button. Zoom? And if I move my finger while it’s on the button, the underlying scroll view scrolls up. Why?
I feel like we as web developers have gotten so used to this that we simply accept it...of course you'll have these problems, it's web!
What’s up with this button shadow? Where has the header gone?
I understand it my all be fixed in Chrome and I’m just using a lame Apple device. But this kind of stuff truly makes web feel second class.
A lot of regular users on Apple devices. The world we live in.
"It's not our fault we let our limited walled garden computer enslave us! We just opted to buy it is all! That's the world we live in!"
FWIW, this applies to Android too. Right?
main difference is just that apple nerfs competing browsers. android allows competition
AFAIK Android devices all still have the setting for allowing unknown sources. And their store also doesn't outlaw VMs.
You are totally right in all those points, but glitches seems like iOS Safari problem, not the web in general.
That isn't an excuse of course, but Apple not really caring about Safari makes life for every webdev much worse.
As a famous strategist once said, if there's no solution, there's no problem. Let's focus on Android. Still a web vs. native gap. Proceed!
I’m really glad if all of this is unique to iOS Safari! Alas I don’t have an Android to stress test it there.
They all mostly seem implementation issues that can be fixed, like user-select: none. Mobile Safari limits should be the focus,not this demo
I’d think that “material” toolkits already include app-y defaults that work well without feeling like a document.
It’s great if all of this is fixable, but even better if there are easy options/defaults for not dealing with these problems in first place.
Pointing out the shadow thing just dilutes the discussion, because it's perfectly possible to do buttons with shadows.
The annoyances come from omnipresent toolbars that move around or gestures you can't override. That's the main problem with mobile web
My point about shadow was that it is incorrectly offset because it “lives” on different layer or something. Its scrolled up without button.
These kinds of issues are super common when everything is a scroll view (web paradigm).
I've seen lots of similar issues on Native Twitter, like the blue notification bar glitching around when keyboard shows and hides
And Android Facebook
Search in native twitter. Followed accounts show instantly but are later pushed down by search results often causing a tap on the wrong item
Well, mobile safari has a lot of issues, not even worth mentioning them again and again. Those issues are just there.
Not to play devil's advocate, but part of the issue is that you have to know/remember these fixes yourself. You get it for free in native
Nothing is free in this world.
Except for slurpees one day a year.
cups are tiny tho
No slurpee for you
He's got a point Ken...
How's "you get it for less, subjectively?" 😉
Simultaneously, you have a decent community of `web` folks that make arguments like this: The web is old and diverse
swipe down on the image and the top bar rubber bands
like i'm not trying to trash on this guy's work but why did he have to rebuild all the standard mobile idioms (many are decades old)
The app is an experiment in minimalism (see url).
Let’s decide if PWAs are meant to be “minimal”, “interactions as good as native”, or something else because I’ve lost track of claims 😅
My only point is that they don’t feel native today (contrary to some claims) because iOS Safari shells screws them up.
It’s not authors’ or web’s fault (probably). Some are fixable. And yes there are bad native apps too. But shell screws the experience for me
I love other aspects of web apps though! (I haven’t really downloaded a new binary for months because I got too lazy)
Although I’ve created this PWA with Chrome and Service Worker in mind all feedback is welcome. The experience was not optimized for iOS.
Yea, I didn’t mean to insult your work—sorry if came across this way. Just thinking some narratives about PWAs can be misleading.
No problem! I think the discussion around PWAs and native is actually very interesting and you have some valid points for sure.
Sad but true. RN is a blessing here. Makes development feel more like Web and gets me the native feeling.
That's not what we're talking about here. It's not native app store vs website. This is something layered on top of web.
Not open, of course. It's for sure depends on whatever Apple/Google/MS wants to do. If they don't make money on it -- you don't have it.
That's true to a degree but in your proposed world wouldn't we be waiting for features from Facebook? What would be more "open" about that?
Its open source. Half the people working on it are non facebook.
Do you really feel that it would be more open than the web? I don't see that at all.
Can I PR a browser with a feature and get it released on a 2 week cycle?
can i load a react app from 4 years ago using the latest version of react?
How is that comparable? 😊
Browser features are expected to work for a lonnnnnnnng time. Thus longer to land a new standard.
Ah! Fair enough. I see the connection. Backwards compat can be a painful thing.
Powerful painful.
How open IS the web really? Sure, you can distribute quickly, but you are waiting around for browsers to align and implement features
Im tired of waiting
So what solutions are you proposing?
I have been all day, it seems the whole solution is native or something very close to it. You want performance write c.
You wanna attract millions of people, the web is what we have. React has "introduced" virtual dom. it's not perfect but it's what we have
As set size of browser vendors with significant market share shrinks, you have a point. Google and Apple need to get it together.
How do you make that happen when Apple lacks the incentive to give non-apple specific apps "full access" to their platform?
Apple has no incentive to fully support PWAs, right? If they did, they'd be punching a huge hole in their walled garden (and paywall).
The *only* incentive they have in this regard is to not be seen as a laggard, right? Or am i missing this entirely?
Wheres googles incentive?
Oh cool, the part of the internet that i hate and makes it unuseable the most!
Yeah you are lol
The incentive thing is also what I don't like about RN, it lets Apple off the hook by playing their game. I'd rather lose a few transitions.
Ill keep the transitions. My users like that shit.
I fail to see how an app store hop, login, and and 50mb download on 3G is better UX. I just don't get that.
So on the web, it loads up quickly, but its also cheap and disposable. Web retention is shit. Apps keep users. Because it feels good
Web apps are utilitarian
Grandma don't care!
Lol literally every study on the internet disagrees with you.
not saying this to be a jerk, but all the research points to native apps being one of the worst retention vehicles on mobile.
Which apps? I have only a few top ones, then five screens of shite. Give me a break, "apps keep users". I am going to go delete a bunch!
Sorry Ken, you don't have any apps in my top 5. And sadly, statistics suggest you never will.
Until i made tinder for guys named henrik
Low blow but even so, tall head is tall. Long tail wastes money on apps no one installs, or if they do, uses. I'm looking at my own phone.
Those shitty apps have wasted tons of my time in App Store, trying to update 100MB+ downloads. This sucks, compared to the web.
What if the app does things the web cant?
So hear me out fellows, this is why i want a hybrid. I want the discoverability and distribution of the web. Just performantly.
We all do. I just think PWAs can get us there faster than "Repeal and Replace" :)
Theres no repeal or replace. Just a fork.
"Apps keep users." - lol. Most apps get downloaded, used a couple of times, and never touched again.
How does that compare to "most" websites?
It doesn't necessarily. But you said "Apps keep users." That's simply not true.
When you have both, people use the app. I have CHARTS.
Still not sure that's true. Depends a lot on the market, the audience, etc... Also: Not sure this is a binary either/or argument?
The data is likely skewed given the small sample sizes of actually used daily apps. Which is like a group of 5.
And monthly is small group size too, 20?
I've seen cases where native dominates in daily active users, but web kills it in monthly active users. "It depends" is appropriate here
From @Starbucks, that says a lot -- esp. about long tail. Thanks!
Im not gonna pretend to be 100% right here lol
For facebook, twitter, google maps, and instagram I'm sure you're right. But I don't see any apps by Ken in that list 😜
Wonder if anyone can pull up the stats on the walmart app.
I'd bet the most impact you could have toward your stated goals is loudly bailing on Apple in protest and building badass PWAs instead.
This. 100% this
What about google too
They're the ones pushing the web as an app platform more than anyone for the time being. Show me a better mobile web platform? I'm there.
A google app platform. Denying that is downright dishonest.
Microsoft is implementing All The PWA Things™ they've even committed to listing them in their store.
Fact of the matter is, i dont like material design, i dont care for any of that google platform shit. Or android really.
I just want to build cool shit
Then go build cool shit on whatever platform works for you and meets your project's requirements! Have fun with iOS :-)
I do. On react native. And it makes PWAs look like babys.
Same. So build cool shit for the web. Make it as badass as you wish it were. Do shit with Workers to offload main thread, etc.
I hit the edges man. All the time. If i didnt i wouldnt be sitting here bitching.
Same. So let's keep pushing on the edges. They've moved a lot recently.
This is awesome. Now when does Apple, whom owns the keys to highest income users, get on board? I know, sounds trite. But that's reality.
Don't wait for them. Build awesome PWAs instead. Don't play their game because unless you're already top 10 you won't get iOS users anyway.
"you won't get ios users anyways" ouch. Maybe that's true, but I'd love to see mobile web user uptake data by OS
Why did fb push me off their web based chat to an app? I'd like to see twitter do the opposite. Disable the app and force traffic to m.twit
Once companies rely on pwa's as a source of income, then the quality and ux will be necessary. money motivation can move technology.
By the way, that's exactly what I did and why I did it:…
Ha, I literally HAVE to do this with the products I'm working on at the moment — we're forbidden from the AppStore.
That right there is the biggest problem with the native app ecosystem IMHO. That's just silly.
Oh, totally agree. It's like some sort of weird puritan / bigotry bull. Means that so many adult services can't innovate.
I agree with this. It's about time to see some large players follow suit.
And if you have none, people use the website. More people have none than have both, THEREFORE
Also: The web can be a much better platform for user acquisition. Lower cost of entry. All these platforms work together to solve problems.
when my wife wants directions *she uses google maps in the browser on her phone*. I say: wait don't you have the app? it's so much smoother!
in fact users do all kinds of crazy things. and apps are frequently not worth the download or storage size
This, and YouTube!!!
mobile version of youtube doesn't provide HQ quality. You cannot even change it.
YouTube in @brave => no ads. Way better than app.
You should create a Brave YouTube app as well. Bravetube! I know lots of my peers at school only really use the Internet for YouTube.
Would be nice to have a YouTube client that doesn't ad in all those unwanted extras. #punintended.
Why not use @brave for iOS or Android, skip the extra app?
Because they don't know about @brave. I've been trying to spread the word, but it can be tricky.
Cheap and disposable is good. As @HenrikJoreteg was saying yesterday, ppl want apps where they can get shit done, and be done with it.
50mb? try 100+ on most of my latest shite app updates.
500+ on fb insta type thingies. Games.
Yeah, and the re-downloading most of that with each update!
100MB that's barely enough for the Facebook app icons. Or so I assume.
-> fb 218MB, airbnb 130MB... 😐meanwhile Web devs are trying to see how to reduce their 500KB (gzip) web app 🙃
Unless you're one of the few on the top nobody is installing your 100+MB app. Again, as @BrendanEich said it's a Google and Facebook world!
Where did you find this 500kb web app? Most are several megabytes.
We're all trying to measure and optimize these days on web apps so we go nothing higher than 500kb(200kb recommended) minus images 😃
You mean like this one which is only 3.8kb.
a bit "apples to oranges", isn't it?
Not when you're on a 3g connection.
My native apps do this super weird thing where they let me defer an update until im on wifi. So theres that.
i'm a bit old fashioned with "update only on wifi" then, but, right, many people using 3/4G as primary means of connection.
Iphone apps are generally crazy. It's always lesser on Android.
Not enough lesser to be relevant. Anything over a couple MB is impractical for the developing world
Anything over 300kb*
And that's not even counting what these apps cache locally. Some absurd numbers here taking up finite hard drive space, ignoring photos
So if I switched to using the Twitter and Facebook Web Apps, I'd save over a gigabyte of space on my phone. That's a big benefit
Sure, but then check you data usage when that cache isnt in play
I thought about that, but I'm not sure what Facebook is caching. I'm usually viewing new content that it's pulling down. So still using data
I guess most of these guys don't take into consideration people living in "third" world countries, this will make them work on reducing size
The cost of features and abstraction.
Couldn't apple & google just have a bitcoin account which I could transfer x% of app revenue to with a PWA?
By contrast, Google's business aligns *really well* with having the web succeed as a platform. Same for $MSFT just because they're left out.
Avg user: "boy this web UX is bad... oh wait... they have an app". Apple gets a cut and keeps the user dependent to their platform. win-win
now, if the web experience is Better than an app (which it can be if motivated) then apple has to react. right now... there's no competition
The same could be said for google or apple and providing native ui via the browser along with first class device APIs
"a couple large companies call the shots on what you can do" How would going native change this?
It wouldnt, but lets not pretend that being a web advocate makes you some kind of fucking peoples champion
In the very least the web offers an escape route, that new browser engines and standards can always be made Native doesn't guarantee this
You're kinda stuck no matter where you go as long as people use iPhones and Androids.
On my Android phone I've got Chrome running Blink, Firefox running Gecko, UC Browser running WebKit and Opera Classic running Presto.
That argument only applies to iOS.
I am not convinced that is the problem. Cc'ing @johnwilander
I believe we are on track to the best user experience on the mobile web. Best performance, lowest battery use, privacy by default.
JavaScript is a garbage collected language and the DOM was not designed for GUI applications. Ergo, there’s going to be a challenge.
Optimism is cool and shit, but ive been waiting long enough that im embittered.
Both native & web evolve at the same time. Both push limits. If you compare the web of today to the web of yesterday you see good progress.
Can you speak at all on the topic of Apple and PWAs?
I would love nothing more than to be totally wrong, but this has been my concern:
Apple has no incentive to fully support PWAs, right? If they did, they'd be punching a huge hole in their walled garden (and paywall).
I don't think he can, kinda work policy right?
I assume so, but that doesn't mean I won't ask.
What does it mean to "fully support" PWAs?
Adding features that enable a web app to be a first class citizen on the platform.
Like if they ship service workers? Or are you wanting to see a first class install expirence?
Well, SW is coming to Safari for sure, sooner or later. But yeah, but add to home screen with manfest.json and without bugs would be great!
First class install experience, SW, deeper device APIs, real push notifications. The whole nine. I'm sure they'll do SW eventually.
For service workers specifically, I recommend following the standards org where we are involved:
WebPlatformWG - Web Platform Working Group pages
Thanks for that ❤️
If you mean specific tech, we never talk about future features beyond standards work and what’s on our status page:
WebKit Feature Status
(no description)
Im getting old. I dont have time for this shit. I would have flash landing rockets on fucking mars by now.
You beat me to it, same with Webkit, FF, etc.
Ok Ill PR react native bundle loading. Youll merge and release right?
Remix: it's not the web's fault iOS isn't a general purpose OS that people can do things like build a browser for.
It's not the webs fault your hardware isn't a general purpose compute device that people can do things like build a browser for.
Are you comparing running a subset of react to running a browser?
A raact custom renderer does a better job of rendering than google chrome does. Thats lollerblades in my book.
Rendering what? You're doing twitter wrong again, with all this vagueness.
Still too vague. Have you looked at Superhuman or other performant web-stack UI? Don't waste my time now!
I have. They render one very specific type of ui for one very specific use case. What about the ambitious folks out there?
What about flipboard?
They had to reimplement the dom in canvas because it couldnt hit 60fps for a fancy listview
Belligerent Ken Wheeler is my favorite Ken Wheeler.
Wow, that's lame-o. Was that for a specific browser?
Sheesh...Is this still the case on mobile for large DOM scenarios?
would have a better view of the mobile landscape than I would
Scroll-linked effects are too hard; Houdini APIs coming to Chrome soon for this. Possible already, tho. GPU raster FTW. /cc @RickByers
Also, this participates in the app construction fallacy i see so many make. Native devs minimise view count. Webdevs should minimise nodes.
We just build our React Native apps the same way we build our React.js apps. Better perf on RN for same effort.
I'd love to see traces of these apps.
Many react apps I trace wind up doing main-thread animation for reasons I can't fathom. Hopefully yours have other issues :-)
You're pretty down on React, eh?
Nope! Have seen great React-based experiences. Only noting that it tends to leave all the important and hard parts as exercise to the reader
The most expert users love it. Everyone else gets months of late-hitting performance remediation work. Same as other desktop-era frameworks
Fiber should help a lot.
Fiber smears work (a good thing, improves responsiveness!); does not address base inefficiency or any animation-related issues
Maybe we need a new dom. One that is easy to get right, like UIKit. 😉 #notthisshitagain
I'd encourage you to just start by picking better tools.
Like what? The ability to write React across web and native mobile is an advantage nobody else has.
Oh man, the veritable Library of Alexandria of Cordova apps not only begs to differ, it dwarfs all React usage on all platforms.
I used to build Cordova apps. My clients were not happy with the result, and improving perf was major effort. RN has been a dream compared.
I'm willing to entertain that perf has gotten drastically better in last 4 years but wow it was bad at the time.
Threading model differences were bad. Largely fixed. Crosswalk addressed in interim. *Shrug*
But there is no tool right now that makes web feel native. Fast? Sure. Close? Sure. Native? No.
See point about Gmail. Your standard isn't just wrong, for nearly all users and services it's a harmful distraction. Close-enough is the bar
We can have actual native UI on web.
Unfortunately appears dead. The idea is basic: replace the dom with native ui, controlled by something like React Native.
Any examples we can learn from?
Yeah, I'd like to do some perf comparisons that I could publish. Haven't done anything too comprehensive.
You're already declining to compare apples/apples when you invoke "large DOM". Hint: *don't do that*. Browsers may be *too* forgiving here.
Wow these mentions got out of control @slightlylate @ken_wheeler
You're already declining to compare apples/apples when you invoke "large DOM". Hint: *don't do that*. Browsers may be *too* forgiving here.
Obvious Q#1: Flipboard went to some trouble to do react-canvas from scratch. If it was as easy as DOM recycling, why reinvent the wheel?
Not a decision I would have made?
But that was a time before pervasive GPU raster. Things change!
Okay, what next? /cc @_developit
Take a picture or video inline, and then trim and filter the result. For starters.
That was the plan... but pointless when the API prevents posts
Should try to make Snapchat UI on web with the same transitions and animations.
Now were talking. Get down or lay down @samccone
Some years ago someone arguee on CDs because they can load big videos 😂😂😂
Native apps are the CDs of today..
What does that make web apps? 8 tracks? Cassette tapes?
I'd love to try too. Every PWA I've tried, I felt great, coz as web dev I can relate how far we've come. But still not close to native feel.
to be fair, most desktop native apps probably also outload, outanim, out perf their web alternatives too.....haha.
and as much as I like the web as a platform (so google or apple can't say your app doesn't belong), there's alot of ways to mess up building
You can make smooth PWAs & you can make janky native apps. PWAs have *tons* of room for improvement still but I'm convinced it can be done.
There are edges. And those edges are much closer on web.
This is not a good use of twitter. Let's have canoe'ed folks cite apps that proves the case, or refute it -- both, I bet. Superhuman proves.
I have a strong preference for native twitter. Not sure if twitter pwa left out interactions as a decision or what
I see many people who say Twitter PWA >> native. What gives?…
I think getting lost in the weeds of PWA vs native loses sight of the fact that the dom is crappy and not getting better.
Are you srsly so hard done by? Superhuman & other apps weren't. Move toward virtual DOM helps. Native has perf cliffs. Seems like an excuse.
I wonder what non devs think
Non-devs use twitter too... I'm out of this canoe if it's just a webdev-discounting exercise. Better if you say why you like twitter native.
Nothing wrong with native, and the PWA still feels "webby". Nothing inherently wrong with webby; it is what it is. And it's not native.
Ok, its better integrated, i get badge and toast notifications and notifcations on my watch. I can upload and edit different media types
The ui transitions are smoother and make more sense
I can share to it from other apps. I have a gif menu, and pull to refresh doesn't require scrolling more after it refreshes
Thanks, helpful. Cc'ing @slightlylate who may have good news on horizon.
I'm so stoked for Web Share API. I think I heard Twitter's rolling that out on Lite...
In particular, Animation Worklet will give us off-main-thread pan/swipe animation. Custom paint to reduce element count.
But at a level that's really hard for some folks to accept, none of this really compares in importance to app size & distribution friction.
...and native apps aren't OK there. They're really, really not. Primed for disruption (to use a phrase I loathe).
GMail never got perfect Cocoa or MFC/Win32 fidelity; didn't matter. Distribution friction is what counts if you aren't Google or Facebook.
Delivering a React Native bundle to a browser doesn't seem like a huge burden. Smaller than many websites.
The problem is streaming execution. Browsers know how to start executing from the first byte; native apps don't.
This is a reasonable critique.
To be fair, though, the JS-first trend is pretty handily destroying this advantage, sooooo.....
1/Don't assume Google is pushing web technology for good of humanity. It's all just business. They want to index content as much as possible
2/ Google is asking others to make web apps to power their search while working on native platforms for their own apps.
Hah. You should try working at a company of this scale. We're changing the outside world first because *it's easier*.
Eventually even Googlers will come to understand that native apps aren't working for them either. Matter of time.
No blame to Google for doing this. I meant it's business and Google has more incentives make others develop web apps. I'm happy about it!
Weird, facebook dogfoods its own stuff first and its working out for the credibility of their stuff
...and Facebook has partnered with us on most of this tech; hosted the last F2F SW meeting in Tokyo 2 weeks ago, biggest Push users, etc.
Yup. It's a G+FB world, we're just living in it. I don't mean this in a snarky way. I'm glad there's collab.
I wonder what that means to the 'Open web' when the two duopolies own everything including ad ecosystem
I'm glad there are engineers working on the hard problems that have been complained about for years. The light can be seen.
So? Not dogfooding the stuff youre pushing isnt exactly inspiring.
You're dismissing evidence provided. Unsure what to do about that except to disengage
What evidence have you provided? All the google stuff i go to asks me to install the app.
if you would require all Google products to upgrade to something before a browser API to ship, nothing would ever get done in Chrome.
You'd have a standards committee with 70 thousand members.
To dogfood something you want 1 team, maybe 3, but not all.
Is there at least one product team dogfooding it?
Probably a dozen or so for each one API.
Origin trials were recently updated to work at Google/Facebook core product scale. Had a hard to time staying at low enough traffic volume.
oh yeah, if only every new API could have Cocoa or Win32 modal dialogs [ 👀 ...OK]
HMU when is entirely React Native.
Agree. People reason backward from Instagram or Twitter. Most app vendors aren't FB or T, never will be. But Ken cited good edges to smooth.
Our natives apps are 5 years old, large teams. Twitter Lite is new, PWAs are new, small team, reaching different users/devices
I'm putting a lot of hopes+dreams (such as the Web surviving) in the Animation Worklet basket, for this kinda reason…
TBH non-devs probably don't give a crap 😂 I know many non-devs who had no idea Slack wasn't native. If it feels fast, who cares, right?
Sorry guys I was looking up cool PWAs and I got sucked into a hole by
Why did you do this to me?!
😂 I blame But seriously, impressed how well it works even on iOS.
I've been using m.twit and had a similar feel. If the motivation catches on the quality will follow... right now, it's a still a tough sell.
Just give me access to the bottom 50 pixels in mobile safari and let me disable swipe from edges. Mobile safari hates the web :(
A *lot* of this is due to how clunky the language and tools are for expressing anims/interactions within HTML/CSS, and no fault of the DOM.
Remember Flash? Remember how easy it was to define a multi-layered floating object within another, with complex animations and interactions?
There's no nice way to say it: Defining complex animations in CSS/JS (save any use of @greensock) is complete ass and often a total waste.
It took us 10 years to replicate Flash on the web. 😏
Some things still not there!
Aww thank you @BrendanEich! It's not easy, but we've got "faster-than-native" performance in many areas. Think it depends how hard one tries
Since users download close to zero new native apps why are we obsessed with being like them?
Because they use the ones they do download more than they use the browser
Who serves what now? If I have a react native based app, say @21's fine iOS one, it'd have a URL loading a doc that invokes that app?
Imagine if browsers operated like and ran a RN bundle from a URL
Thanks @BrendanEich! You invented JS, we're all just users :) Also, could indeed be cool to have more low-level support for React Native.
I thought about it too. Idea is cool, bit not gonna happen
Cause you have to convince literally everyone. E.g. only one vendor won't help and that's a big job by itself
The only people you need to convince are the users
One can do react native browser on their own, even on iOS. I already thought about that. Serve web in webview by default, RN if available
I.e. like Android instant apps
Wait a bit and you'll see Facebook'a web view light React Native up.
How long. Ive been waiting 10 years.
C'mon! iPhone came out >10 years ago (June 29, 2007). FB was pre-IPO then. I've been waiting 34 years since grad student daze. Back to work!
No thats my point, thats when I switched from flash. Havent gotten my anim perf back.
First iPhone app model was web apps. Don't symptom-blame. Cause is cost of cooperation in standards bodies vs. competitive wins from native.
If only mobile operating systems didn't run JavaScript like ass 🙂 Crazy how big a gap is in processing JavaScript on arm vs x86.
What if you could deploy and run your #reactnative apps on the Facebook app. Essentially @expo_io running on a global scale. An app browser.
and it would be Active... something. Call it ActiveX for short!
That's what I'm saying!
Just use Doctype to distinguish between websites and apps. For apps index.html becomes something closer to a config.
Every non-browser (and even one browser) that's tried to do this failed FYI. If you think working with the DOM is bad, write an ActiveX app.
I think react and react native have finally hit the sweet spot. This is it.
With RN, we've seen that writing native-feeling apps is as easy as writing web. Delivering a bundle is no problem. Pieces are in place.
If react-native-macos was more stable we could jump off of that. My company has done a lot to develop out RN-windows this year.
ReactXP could be the key.
Its all here. Its clear as day. It would be downright simple to completely improve the web experience for the entire world.
I think the biggest obstacles will be inertia and lack of corporate interest. But peel off a corner here & there until critical mass.
You know who should do it. @Microsoft .
That would be fucking poetic, people leaving apple en masse, for a faster and smoother experience
Hmmm. cc @nparashuram and co... Bring in @infinite_red and @FormidableLabs, we can get it done for you.
Ram, ill see you in like 24 hours, lets chat
Or a content-type header would be better.
^ I don't understand
What if you had a transform that converted all dom to RN equivalents and then ran it
All DOM? Like live elements?
No, like if instead of html, you made websites with native views
Why wouldn't you just write it that way?
I mean, the entire internet
Put simpler, imagine if the dom was performant!
The better way to do that is to expose better primitives in the dom, or at least extension points where you can integrate native code
If tools like Electron and RN could integrate with the DOM model while dropping down into native code we could build better ui primitives
Whats the blocker
Getting rendering engines on board with it
Im not saying actually do this, but if your web experience consisted of native views
Sounding Sagan-esque there. Or Serling-esque. Or both.
Electron is neato. But compare atom to sublime. And thats on a laptop/desktop. Mobile has way less power.
One is an entirely custom proprietary UI framework built and then abandoned by one dude. The other uses foss technology that we all use.
And that guy fucking slays your shit homeboy
Key piece missing here is cross platform native UI. And also "not as resource hungry as chrome." Electron checks neither box
When I heard @SlackHQ used electron I wept for my laptop but more because they're the company with most incentive to build RN for desktop
Let PWA rest, for now, you're in Amsterdam man. I know you'll be needing a good beer tomorrow:…
PWAs are better for new/very infrequent users ✅
I feel like there's a decent case to be made that Native Apps are no where near as good as PWA's. See:
Phrased another way, would it be great if native were as fast convenient and excellent to develop for as PWA's.
Electron in particular sucks egg (huge, insecure, wastes resources) & most users would be better served w a local daemon + link to it's url.
I feel like this is saying "A hammer is better than a wrench." Both are better at different things.
you tell him david
No need to "tell". I respect Ken Wheeler and enjoy engaging him in a thoughtful discussion of opinions.
I think the accent I said it in my head didn't convey across the tweet.
Native, PWA, Windows Forms: Options are a good thing!
How is this a problem isolated to only native apps? If your app isn't useful to people on a regular basis, you can't blame that on the tech.
If WhatsApp had both native and PWA, do you really think people would flock to the PWA and not the native app? Highly doubt it.
Native is *always* a better user experience. If it's a one time use app, sure. But if it's going to be used regularly, native always wins.
The only pwa I actually use on a regular basis is twitter lite, and that's *only* because it actually has an advantage over the native app.
Is it a better UX? Hell no. It's very janky compared to native, and I'd definitely use native if I had more storage space on my phone.
native is "*always*" better except when it's not. got it
Having a smaller bundle size doesn't make it better. It makes it smaller. The native twitter apps is lightyears better than twitter lite.
"better" is a loaded term. point being:demonstrably there are cases users including yourself prefer to regularly use pwa vs native
my goal is to build sometime people want to regularly use. not to build towards an abstract "better" that isn't regularly used
Most of the really terrible UI experiences I've ever used were native apps.
If the UI is terrible, that's the fault of the designer, not the tech.
Clearly that's true for any platform.
The distribution and discovery of native apps vs web apps is a well known problem.
Most people have the same apps installed but visit many different web pages a day. It's simply different dynamics of each platform.
Which loops back to my other reply, if it's a single use app, sure, go pwa. But if you expect your users to frequent it, native always wins.
I don't think that's true. News and e-commerce are prime examples.
so where do you draw the line between mobile websites and pwas?
I take it on a case by case basis.
Then that's likely the reason we disagree, there's no hard distinction between a good mobile site and a pwa.
Obviously I agree that there's use cases where websites > native app.
I don't agree with pre-categorizing technology choices before you know the needs of your users.
Well…more like "A hammer is better than a wrench…when hitting a nail" PWAs often pushed as hammer && wrench 🛠
You have to argue more than that. It's not just they aren't as good, it's that they never will be as good...
The argument begins and ends with the inability for web apps to drop down to native when necessary, and wasm does not solve that completely
The problem with electron is that if you want the app to appear native you have to reimplement the AppKit/.NET GUI library.
Most devs just punt and reuse their web UI. I worry electron & friends encourage this behavior.
I'm not even talking about UI
I might be in the wrong thread
Are talking about features? Like file access and stuff or are you talking about performance?
FWIW "as good" is too fuzzy a phrase: UI is less polished = true. Potential audience / reach = way higher than apps
Put another way, the decision to build native over PWA is the decision to reduce user base by 80% in exchange for more UI polish
How about getting both
We should kill the dom and use the web and urls to render native ui
You can get super high UI polish on the web, you just have to invest a lot in amazing front end engineers. I'd love for it to be easier
CSS grid will probably help a lot making it easier. Lack of universal web component support is killing us.
And web pack spitting out giant bundles ain't helping much either. </rant>
Aren't you supposed to be on holiday?
Shitposting is relaxing.
Wait, arent you already not giving the best experience to 50%ish of your users who are on ios?
You just occupied Twitter from last two days with these debates. Good threads though
I figure if I can get enough people admitting the dom is slow as shit maybe theyll speed it up.
DOM is slow, everyone agrees that. React helped there a bit but we are not there at.
Ive had like 6 hours of people not agreeing with that lol
I believe their disagreement is around DOM being fast compared to what it was. But DOM is not stopping you from building great experiences
You can always play around limitations to provide best experience. we did that on UC Web(😎) & users just loved it and numbers are promising
"The DOM is slow" is pretty disconnected from "PWAs can't provide competitive experiences" -- nobody disagrees "the DOM is slow"
I'm not sure what React has to do with making the DOM faster... confused...
My bad, I related two different things in my previous tweet. Thank you @wycats for pointing this out. React and DOM slowness are not linked
Smooth animations are done with a lot a attention to detail and offloading stuff to GPU as much as possible.
Why are even talking about one vs another?? It's all about providing best possible user experience to user and spoling him with options
From tech side, PWAs will always strive for coming close to performance of native like GUI and Apps will fight for openness.
However, you are not limited by building a great experience on mobile web today. Don't give me excuse of web is only for articles
What? You are severely limited. The edges are there and i hit them on the regs.
Are you building 3D games, yes you are limited by huge margin. For building 80% of the cases you can pretty much do that on web
Again, I am not saying we are there at but we are in a good shape compared to 2years back and push is still there on browser vendors
Web is slow 'coz it goes through lot of debate before adding any feature. Where as Native is ruled by gaints and you are at mercy of them
Even web is at mercy of browser vendors but I see high amount of community debate happens before launching a feature. I prefer this
Web is slow 'coz it goes through lot of debate before adding any feature. Where as Native is ruled by gaints and you are at mercy of them
We can do better
Agreed yes! And till the time someone writes a spec to fix that and u get everyone to implement it(*cough* safari) PWA is one of ur best bet
For all cases? What are the ways native task list app better than PWA? Integration w/ other apps?
No not all cases
nice thoughtleading ken, you're really stepping up your game
Somebody had to say it
I just want to be a thoughtlord like you when i grow up
Let me be clear: Cats are awesome and worth cuddling: ✅ Cats are as good as dogs: ❌
I agree with you and I admire your courage *hides*
What the hell happened in this thread, 1095 responses, holy crap
Found it. Dude you kicked the preverbal hornets nest with this one. The legion of Goog must've descended on you, huh?
I think both are good, it really depends on what you want to achieve...right?