8 ms·
> It’s going to be extremely hard to get even decent results without targeting real DOM instead of going pure-canvas, and you can’t get excellent results withou
by peutetre 2y ago
> It’s going to be extremely hard to get even decent results without targeting real DOM instead of going pure-canvas, and you can’t get excellent results without doing so.
Sure you can. Google Docs switched to canvas three years ago: https://workspaceupdates.googleblog.com/2021/05/Google-Docs-Canvas-Based-Rendering-Update.html https://workspaceupdates.googleblog.com/2021/05/Google-Docs-...
This wasm application renders to canvas and works fine for me: https://bandysc.github.io/AvaloniaVisualBasic6/ https://bandysc.github.io/AvaloniaVisualBasic6/
This one too: https://flutterweb-wasm.web.app/ https://flutterweb-wasm.web.app/
Flutter and Google Docs gave up on the DOM because they couldn't get it working well enough, consistently enough across browsers. When you draw to canvas you get more consistent results because you control all the drawing.
- chrismorgan 2y agoGoogle Docs isn’t pure-canvas: they only switched their document area to use it for layout. Text rendering is still browser (necessary to keep performance even close), and all the rest of the UI is still DOM. Having thought extensively about it, I cannot come up with any advantage to the approach they’ve taken—neither the performance¹ nor the consistency² angles make any sense, and the product is actively worse because of it³. I’ve written more about it on HN at times, skim https://hn.algolia.com/?query=chrismorgan%20google%20docs&type=comment https://hn.algolia.com/?query=chrismorgan%20google%20docs&ty... for more. Seriously, having thought about it very carefully and reviewed the matter several times over the years, I honestly believe that they lied in their justifications. Flutter… ugh, Flutter on the web is awful awful awful awful awful AWFUL AWFUL and I will hate you if you decide with open eyes to use it when you’re deliberately targeting the web.⁴ I lack energy to express my vitriolic loathing. Just go through https://hn.algolia.com/?query=chrismorgan%20flutter&type=comment https://hn.algolia.com/?query=chrismorgan%20flutter&type=com..., there’s lots of detailed explanation of specifically what’s bad, if you need it. Avalonia Visual Basic 6? It’s the kind of thing where the limitations will show least, because of how limited it is. And also because it’s imitating (not quite the right word, but close enough) ancient software which itself wouldn’t work fully properly if run on current machines. Its text handling is dodgy, doesn’t do composition properly, scrolling is non-native, context menus are non-native which stops some things from working properly… but honestly that’s kinda the vibe they’re going for, so it’s not particularly upsetting. Pure-canvas is irredeemably bad. With difficulty you can make some things decent even with it, but excellence is impossible with pure canvas. Flutter and Google Docs did not give up on DOM for the reasons you cite. Google Docs, I honestly don’t understand why they gave up on DOM, the reasons they cited publicly genuinely don’t make sense. Flutter, it was because they don’t actually care about the web, it’s a third-class target, and too much of the way they design their API doesn’t port to DOM directly, so that making DOM a first-class citizen would have required compromises in their APIs that they were unwilling to make. But it was emphatically not about cross-browser consistency. —⁂— ¹ Seriously, Google Docs is slower than it used to be, especially with higher latency and jitter. ² The parts they replaced had no consistency problems in any realistic browsers. Seriously. Their layout requirements are, in practice, really basic. The area where consistency can actually be a problem is text shaping and rendering, but they haven’t replaced that since it would tank performance. ³ My favourite example is keyboard navigation. It doesn’t match platform conventions, and that’s really irritating. Since we’re in this thread, LibreOffice also flouts platform conventions in this area, and it’s really irritating. ⁴ If you’re focusing on mobile and make a mobile app with Flutter and also put it on the web with Flutter because why not, better than nothing, I won’t like you very much, but I’ll at least understand. But if you’re saying “we need a web thing, how about we use Flutter”… no.
- peutetre 2y ago> But if you’re saying “we need a web thing, how about we use Flutter”… no. If you're making an application, there's really nothing special about the DOM. You might as well control your drawing. That way you don't need to figure out cross browser incompatibilities all day. And here's what someone who used to work on Google Docs has to say about it: https://news.ycombinator.com/item?id=27133929 https://news.ycombinator.com/item?id=27133929
- chrismorgan 2y agoPlease look over my comments on HN about Flutter and pure-canvas and such. There are big problems. There is plenty special about the DOM that you lose and cannot gain back if you go pure-canvas. Links. Scrolling. Text handling. Composition. And various more. Use DOM. Please use DOM. Use canvas for an actual drawing canvas, but for the UI and anything else that’s largely text, use DOM.
- peutetre 2y agoThere aren't "big problems" because it works. When you put yourself in the corner of claiming "pure-canvas is irredeemably bad" when it's plainly not, then there's nothing practical on offer.
- chrismorgan 2y ago“It works” is a terrible defence, because of the different degrees of working. I’m describing various specific ways in which it doesn’t work properly, in ways that stop users from doing things they may legitimately want to do, or which will frustrate some users, and you’re just disregarding them. I’m not being vague in most of my complaints, I’m being very specific. It’s like you have a screw, and it’s worn enough that sometimes it makes the screwdriver slip, but you’re saying “just be careful, maybe apply a little more pressure, and it still works”.
- peutetre 2y ago
- nox101 2y ago> Google Docs switched to canvas three years ago: And broke CJK and emoji input. They only fixed emoji input recently. CJK is still broken.
- arcanemachiner 2y ago> CJK "The shorthand collective name for the Chinese, Japanese, and Korean writing systems."?
- jraph 2y agoYep. This is a very widespread acronym, though I can understand that it feels like obscure jargon the first time you run into it.
- wiseowise 2y ago> Sure you can. Google Docs switched to canvas three years ago: https://workspaceupdates.g https://workspaceupdates.g You just need to be one of the critical projects for BigTech. Easy peasy, compared to <editor_command> index.html. > This wasm application renders to canvas and works fine for me: https://bandysc.github.io/AvaloniaVisualBasic6/ https://bandysc.github.io/AvaloniaVisualBasic6/ Trying to select text on mobile Safari just selects whole canvas. Same for your Flutter example. What a regression for web. Just so that a couple of snowflakes can use their fad of the day or can stay in their comfort zone.
- RandomThoughts3 2y ago> Just so that a couple of snowflakes can use their fad of the day or can stay in their comfort zone. Or because the DOM is a piece of technology designed for rendering documents and not web apps and with limitations which has been severely gimping proper rendering of web apps for the past decade despite a slew of libraries trying to fill the cracks with various amount of success. Whichever you prefer.
- eitland 2y agoOr because Google doesn't like open web technologies, standards and interoperability now that they are the king of the hill?
- peutetre 2y agoHow are WebAssembly and canvas not open web technologies?
- eitland 2y agoI didn't say they weren't. In the case of Google Docs kt might be because it is really convenient to use canvas because then it gets much harder for clients to do things Google don't like, i.e. interoperability. In other cases, like in IE^h^hChrome and large Google products like Calendar and YouTube there have been some interesting cases I think.
- zelphirkalt 2y agoGoogle Docs' Writer (or whatever they call it) is a terrible child's toy, just like Word of Office 365. Functionality is severely limited compared to traditional word processors like LibreOffice. > Flutter and Google Docs gave up on the DOM because they couldn't get it working well enough, consistently enough across browsers. When you draw to canvas you get more consistent results because you control all the drawing. And as a side effect, of course if you require the canvas, you will also be able to abuse the canvas, to fingerprint users. It is strange, how those things seemingly always coincide when it comes to Google products.
- peutetre 2y ago> Google Docs' Writer (or whatever they call it) is a terrible child's toy It's a toy that's making Google a lot of money.
- jfengel 2y agoFor the vast majority of what I do, a toy is all I need. This is the nasty catch-22. It is preferable to have a single tool that handles both simple and complex cases. But sometimes, you just can't make one tool that does both well. If you optimize for the hard cases, then most users will use only a tiny minority of the features. Microsoft tried to work around that with the "ribbon", which tried to learn which features each individual uses. Users hated it. So I keep around LibreOffice for the hard stuff, which I write perhaps once a year. And I use Google Docs every day.
- rbanffy 2y ago> Google Docs' Writer (or whatever they call it) is a terrible child's toy, just like Word of Office 365 I'd believe the vast majority of the user base has never noticed anything off with these applications. I have noticed one or two things missing in the in-browser PowerPoint and that's about it. If you want to do precise publication layout, Word (and Writer) are not the appropriate tools - you'll need something like InDesign.
- otabdeveloper4 2y ago> couldn't get it working well enough, consistently enough across browsers Google Docs literally doesn't work in Firefox. (Garbled text.) For Google not working consistently across browsers is a feature, not a bug.