Life is short , You never need Flutter
—— 鲁迅
对于现在打算学、正在学、或者已经在使用 Flutter 的朋友来说,这可能是49年入国军
Flutter 完全抛弃了 Web 生态,抛弃了 JS 生态。
Flutter 就像一个任性的孩子,没有把问题解决好,却把大前端搞的更加混乱。
什么是大前端?
包括 手机App、网页、电脑上的应用程序等等。
几乎所有的界面交互都可以称为大前端。
甚至 端游绝地求生[PUBG] 的大厅界面,都是用 Web 技术来开发的。
各个平台都有 WebView, 哪怕连 Flutter 本身,都是有提供 WebView 组件。
Flutter 之所以没用 TypeScript,官方给出的理由是,它不能 AOT,而 Dart 可以。
实际上更正确的做法 ,应该是拥抱 LLVM 生态,写一个 ts-llvm 为其增加 AOT 功能
这样起码与 Web 生态,不算太脱节
在图形层写了一套通用的控件,对比 ReactNative、Weex 之类方案,的确有更好的性能。
(后面两个是对原生平台的控件,进行映射,而不是直接调用 GPU 进行渲染)
2. 跨平台(这是个伪命题)
支持 Android、IOS、Web、Desktop ...
注意:它不支持 小程序!
然而这些优势只有 Flutter 才有吗?这里以 Web 生态作为对比!
简单的说:目前除了 手机端的性能 稍微不如 Flutter,其它各个方面都是碾压 Flutter 的存在(包括其他一些平台的性能)。
不仅支持的平台数量更多,而且更稳定,整个生态库也更加好,这是 Flutter 完全不能比的。
注意:Flutter 并不是在所有平台上,性能都好。
比如:通过 Flutter 程序,导出的 web 页面,性能是非常差的,目前完全不能用于实际项目。
虽然手机端性能比 Flutter 略差,但是采用 ReactNative 开发,所遇到坑会比 Flutter 少很多。
而且手机端性能上的差距,其实并不算大,大家可以安装它们的官方 Demo 亲自体验。
- Android、IOS 【WebApp、ReactNative、Weex】
Web本身(直接嵌入一个“浏览器”)、ReactNative、Weex 等都可以直接来开发手机软件。
虽然 ReactNative、Weex 底层是采用映射原生组件的方式来开发。
但是起码它们的上层是拥抱 Web生态 的。
- Desktop 【electron】
很多我们熟识的软件,都是采用了 electron 开发: vscode、迅雷。
- 小程序
这是一个完全不能忽视的一个平台。
不单单是微信小程序、还有支付宝小程序、抖音、百度 等等。
它们都可以用 Web 技术来开发。
有一堆质量很高的工具,可以直接从 React、Vue 写的代码,生成这些平台的程序。
2. 生态繁荣
各种库应有尽有:加密、压缩、图形处理、网络、深度学习...
你能想到的库,基本都是有的。
至于 Dart, emm...
试想一下:如果我们把 web 在手机端的渲染性能,改的比 Flutter 还要好,那么不就完全没 Flutter 什么事了?!
业内就有这么一个组织 Mozilla ,完全就是一个勤勤恳恳的老父亲形象:儿子没搞好的事情,只能由爸爸出面来摆平。
很多人对于 Mozilla 的了解,可能只限于:FireFox(火狐浏览器)是他家开发的。
其实关于 Mozilla 有很多有趣的事情。
https://developer.mozilla.org/zh-CN/docs/learn
web前端开发者熟悉的 MDN web docs 就是 Mozilla 负责维护的。
2. 你可能不相信,几乎所有的浏览器,都把自己伪装成 Mozilla!
chrome、safari、IE、Opera...的 User-Agent 都是 Mozilla/x.0 开头
它们都把自己伪装成 Mozilla 的样子...
有兴趣了解历史的话,可以查阅这个问题:
为什么所有主要浏览器的 User-Agent 都是 Mozilla/x.0 开头? x.t.u.t.u
https://www.zhihu.com/question/19553117
3. Rust 也是诞生于 Mozilla
除此之外,还有很多,但是篇幅有限,我就不展开说了。
首先需要了解:一个网页显示到屏幕上,笼统的讲,大致分为两步。
Mozilla 早在 2017 年,就开始着手优化这两块的内容。 分别对应两个项目:
1. Quantum CSS (aka Stylo)
主要思路是利用多核,并行计算。
详细介绍可以看这篇文章:https://hacks.mozilla.org/2017/08/inside-a-super-fast-css-engine-quantum-css-aka-stylo/
这个其实就和 Flutter 干的事情有点像,直接从底层重写渲染机制。
WebRender 学习了不少游戏领域的经验,将网页的渲染机制,改成与游戏渲染的方式一致。
目前已经可以在 Firefox 的最新版本中开启这一特性!( Firefox 67 [2019-5月] 正式提供)
这是它的性能概览:https://github.com/servo/webrender/wiki
效果显著!!!
手机端也是效果显著!
3. Pathfinder
尽管 WebRender 在性能上已经有了巨大的提升,但 Mozilla 并没有停下脚步。
传统游戏的字体渲染一般是通过 FreeType 进行光栅化(放在 CPU 中执行),为了进一步利用 GPU 加速,Mozilla 又创建了一个项目:Pathfinder: A fast, practical GPU rasterizer for fonts and vector graphics x.t.u.t.u。虽然目前还没有完全稳定,但是未来可期!
这将给浏览器内核全面采用GPU加速架构铺平道路,在 AR 和 VR 场景下,浏览器页面可以与3D场景无缝结合。
放几张 Demo 截图感受下效果,原文地址:Pathfinder: a first look at the best fonts and vector graphics on VR/AR
VR 场景
放大之后的效果
如果这些事情都做完了,那么对于 ReactNative、Weex 来说,可能也没它们什么事了。
到时候直接用 Web 来渲染组件,性能堪比 Native 。不过好在 ReactNative、Weex 它们现在的技术栈是拥抱 Web 生态的,哪怕之后改底层实现,对上层开发者的影响也并不大。
如果你真的想学一门新的大前端知识。在你掌握基础 Web 开发知识(HTML、CSS、JS)之后, WebAssembly 可能是个更好的选择。
它并不是像 “Flutter 这样属于一家公司(或一个团队)”,WebAssembly 是所有大厂都支持的标准。
WebAssembly 的开发团队分别来自Mozilla、Google、Microsoft、Apple,代表着四大网络浏览器Firefox、Chrome、Microsoft Edge、Safari。
说到 WebAssembly, 这里又不得不再一次提起 Mozilla 这位踏实的老父亲。。。
WebAssembly 的前身 asm.js :也是诞生于 Mozilla。 :)
感觉 Mozilla 应该给我广告费...
知识补充:
WebAssembly 可以理解为:跑在浏览器里的汇编代码。
(其实还可以跑在其它地方,不单单是浏览器里,这个后面会说)
JS作为一门动态脚本语言,哪怕有 V8 引擎加持,其执行效率终究是有瓶颈的。
于是 Mozilla 开始尝试新的技术方案,创造了 asm.js。
结果效果显著,极大的提高了代码的运行效率!
各大厂商一看,居然这么厉害,就想着干脆搞一个统一的标准,这样大家都可以用。
于是大佬们就聚在了一起,WebAssembly 诞生了。
WebAssembly 除了能跑在浏览器里,还能脱离浏览器,放在其它平台上运行!
详见 https://wasi.dev/。
限于精力有限、篇幅有限。很多技术点,并没有深入展开。这里推荐一些 Lin Clark 的科普文。
1. WebRender 相关
https://hacks.mozilla.org/2017/10/the-whole-web-at-maximum-fps-how-webrender-gets-rid-of-jank/
https://hacks.mozilla.org/2017/11/entering-the-quantum-era-how-firefox-got-fast-again-and-where-its-going-to-get-faster/
2. WebAssembly 相关
https://hacks.mozilla.org/2017/02/a-cartoon-intro-to-webassembly/
https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/
希望大家齐心协力,共同把这个 大前端 的圆仔汤给搓好。 :)
关于小程序
评论区对文章中,拿小程序作为对比,很有争议...
说真的,我完全没有get到你们的点...
现在只要是比较常见的产品,比如微博,饿了么,美团,京东,知乎等等等...
他们都是有小程序的。(这里的小程序,主要指微信小程序,但是也包括其它平台的小程序,比如支付宝小程序。饿了么,是同时有微信小程序,以及支付宝小程序的。)
这是公司产品策略上的需求,不是程序员想不想开发的问题。
但是淘宝系的软件,是没有微信小程序的,他们只有支付宝小程序。他们之所以没有微信小程序,肯定不是他们不愿意开发,而是微信不同意他们上线(微信连淘宝的分享链接,都是屏蔽的)
最后我们来看一看,主推flutter技术栈的闲鱼,它的支付宝小程序是什么样子的。
你们可以看下底部的两条导航栏,是不是稍微有点搞笑...闲鱼团队既然有能力推行flutter开发,他们的技术能力,肯定是完全没问题的。那现在这个情况,只可能是因为没有那么多精力,去维护一个技术栈完全不同的平台产品吧...(如果flutter本身是采用ts开发,那维护起来,也许就方便很多。或者闲鱼干脆就用ReactNative开发,那维护支付宝小程序的成本就几乎为0了)
支持Web技术栈的多端转译框架有很多!
比如
uni-app 基于 Vue 开发
的娜娜奇(Nanachi) 基于 React 开发
等等等...
你总能找到一款适合你们团队的,这些框架都是由业内优秀的同行在维护。
Original url: Access
Created at: 2019-09-04 19:39:40
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论