【 在 hgoldfish (老鱼) 的大作中提到: 】
: 标 题: Re: 粗大-Qt不鸟开源社区了
: 发信站: 水木社区 (Thu Jan 30 12:03:20 2020), 站内
:
: Android 现在已经被 ConstraintLayout 一统江湖了,width/height 现在通常是 0dp/wrap_content 两个取值。Google 可能很坏,但不蠢,ConstraintLayout 通常不用嵌套就可以实现整个页面的布局,而 flexbox 充其量不过是增强的线性布局,两者不是同一个重量级的。
这个是 ios 8 出来之后 google 才照着抄的设计吧?对不起 google 就是这么蠢,要是没苹果还一直得用原来的蠢设计。印象中当年苹果设计刚出来的时候,有人吐槽过是有40多种布局方式吧。所以后来 flutter 沿用了 flexbox 的模型,说明苹果的设计过于复杂了,同时 css 的设计还是能满足绝大多数需求的。
: HTML5 吹了很多年代替原生,两三年前遍地都是要开除原生移动开发程序员的 WEB 前端程序员,现在谁还这么说会被笑死。wx公众号以前用 html5,现在多数已经在改原生控件的小程序。大家都明白了,在移动领域,Web还是做展示好用。果子的通知一发,怕是有不少公司加班加点赶在三月份之前出新版。pc 性能好,倒是 html5 的一个新方向,但这个领域没太多商业价值。
google 每年都要出文章强调优化 js,原因就是中低端手机跑不动。另外 web 技术还有很大的因素跟写的人有关,同样低水平的码农,写出来同样烂的代码,java 肯定比 js 跑得利索这点毋庸置疑。实际上 js 引擎的 jit 非常牛,比如最原始的 for 循环完全能跑出来原生的速度。如果非常在意性能的话,就应该写原始 for,不用 forEach/map/filter 或者 for in/of 之类,反正我是不在乎。
: 不客气地讲啊,现在整个 Web 前端社区就是在沙子上面堆大楼。js 语言本身太多坑,发明 ts 也改变不了这个事实。而 UI 设计语言 DOM/CSS 本身也是上个世纪遗留下来的老古董。诚然,DOM/CSS 语法简单,容易入门。但 DOM 受限于浏览器兼容性,效率相比原生开发差太多了。JS 框架把 UI 模型转成 DOM 模型配合 CSS 做布局简直是蠢爆了。我仔细研究过,这也是没办法,因为实现 js 的布局管理器是不可能的,浏览器不向 js 提供计算字体渲染引擎的 API,没法计算控件的大小。
你提到了两个问题,一个是 js 坑多。这个论点完全没意义,上个世纪过来的哪个语言能没坑?py 稍微深入点儿之后,坑完全不比语法简单的 js 少。真正避免不了的坑,我看就只有上次 lv 总提到的 number 类型的问题,因为 json 标准没规定精度,给一个超过53位精度的整数,你完全没法知道丢精度了。
另外一个是布局计算控件大小,你觉得不可控,在我看来却是优势。boxing model 提供了一个无关平台、dpi、缩放的布局方式,所以跟大部分网页一样,vscode 可以整体缩放。你要是让我自己算就麻烦,我要不要算 dpi,要不要支持整体的缩放?
: 现在的原生开发可不是当年的 delphi/gdi/vb6,布局管理器都是标配,像 Qt 显示上万个控件不在话下(对比之下,HTML5卡爆)。而 Qt 的 QML 也是Declarative UI. Declarative UI 是一个大类型,源远流长,非 react 一家独有。反正都是基于 js,你要有兴趣,我建议你试试把 react 挪到 QML 上面。底层用 Qt 渲染,上层用 react/typescript 没问题,你想要的 HMR 一样也可以有。用户点击控件,业务数据变化,js 框架检测 UI 变化,opengl/webgl 渲染动画,多完美。要一毛钱的 html5/css.
画几万个控件的应用场景其实挺奇葩的,就算性能跟得上也不是好设计。微软出的 react 控件库 office ui fabric,在文档页面就展示了至少2万个控件的页面(没看过源码,大概率没真的全出来):
https://developer.microsoft.com/en-us/fabric/#/controls/web/list
另外你说的东西已经有了,我之前应该也转过,有个 node gui 项目就是用 qt 做后端,号称支持 css。得益于 react 的设计,很自然的也实现了一个渲染层,所以的确很多 web 开发工具可以用,包括 webpack 和 hmr。然我还是没啥兴趣,毕竟没有浏览器 devtools 还有 react 扩展那么好用的工具支持
: --
: 灭绝人性啊
:
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 112.47.93.*]
--
FROM 122.57.155.*