02 | 预习篇 · Dart语言概览
02 | 预习篇 · Dart语言概览
讲述:陈航
时长12:14大小9.80M
Dart 是什么?
Dart 的特性
JIT 与 AOT
内存分配与垃圾回收
单线程模型
无需单独的声明式布局语言
Dart 的未来
总结
思考题
赞 15
提建议
精选留言(41)
- reven4042019-07-01入门简单,精通难. 如何掌握一门语言的精髓呢?
作者回复: 首先明确,我们学习一门编程语言并不是为了成为语言专家,而是为了解决实际问题。我认为通过1-2天的学习,在了解一门语言是如何表达信息和处理信息之后,语言的基本套路就搞懂了,然后可以根据实际问题上手去实践,找相应成熟的框架和库,边做边学,加深理解。
46 - 朱雯2019-07-05这一篇其实我没怎么读懂,说说我的问题吧。 关于单线程问题:一般来说,多线程用于解决并发问题,Isolate这种不共享内存却类似与线程的东西我怎么看都像进程,多线程对比多线程的优势在于它可以节约资源,那么isolate是否是没有多线程优点呢,如果是为什么要放弃多线程的优点,只是线程安全问题吗。2:一个函数必然执行完成的设计,假如在这个语言种加入了io操作,后面的程序要跑,岂不是要等非常长的时间,这不是又要回到多线程上吗展开
作者回复: 我们需要建立起这么一个概念,单线程也是可以异步执行的: 1.App绝大多数时间都在等待(等待用户交互、等待网络请求返回、等待I/O结果) 2.等待行为并不是阻塞的,以I/O和网络访问为例,操作系统均提供了非阻塞型API,事件回调告知状态 如果对这一块内容不清楚的话,可以看下之前我在GMTC 2019上的分享:《Event Loop、Future与Isolate - 单线程模型下的Dart异步编程模式》 后续分享我也会专门介绍Dart的异步和并发。
共 4 条评论13 - 不拘小节2019-07-03大神请教一个问题,一个ListView,里面套了一个Row,Row有两个Container,第一个Container设置宽高,第二个设置高度,想第二个宽度自适应撑满ListView,有什么方案吗
作者回复: 试试IntrinsicHeight,这个组件会根据实际情况把子widget的高度调整它本身实际的高度。 IntrinsicHeight( child: Row(children: [ Container(width: 100,color: Colors.yellow), Expanded(flex:1,child: Container(height:300, color: Colors.amber)), ]), ) );
共 2 条评论13 - 创建昵称2019-07-02flutter现在计量单位是什么dp还是px,屏幕适配怎么解决!
作者回复: 通常是dp
共 3 条评论8 - Geek_a9f9432019-07-02目前网上关于dart资料都还比较少,请问有关于dart学习的书籍推荐嘛?
作者回复: 首先明确,我们学习一门编程语言并不是为了成为语言专家,而是为了解决实际问题。语言的知识体系也有所谓的28原则,我认为通过1-2天的学习,在了解一门语言是如何表达信息和处理信息之后,语言的基本套路就搞懂了,然后可以根据实际问题上手去实践。Dart的精髓在于其简洁而强大的语法特性,在解决问题时顺便去读一些Flutter的源码,了解Dart是如何从语言特性上支持这些功能 边做边学,加深理解就可以了。 所以我不太建议在已经有其他编程语言基础的情况下再去系统的学习Dart,如果对Dart确实很感兴趣,可以参考官方的教程:https://dart.dev/guides/language
7 - YOUNG2019-07-02RN最大的优势就是热更新,Flutter会有支持的可能吗?
作者回复: Flutter高性能的其中一个重要因素就是因为Dart在发布期是AOT,所以Google是不可能改成动态编译的,另外苹果也不允许除了JSCore之外的其他动态编译/解释执行环境。 不过如果你的诉求是希望能够实现动态界面,目前业界已经有在上层封装DSL实现Flutter动态布局的实践了,可以看看GMTC大会上美团和微信的分享
6 - sid2019-08-12Dart VM 的内存分配策略比较简单,创建对象时只需要在堆... 极客时间版权所有: https://time.geekbang.org/column/article/104071 对这句话有所疑问,dart是如何处理堆碎片以及一次分配超大内存的问题呢?
作者回复: 1.GC会在应用的空闲时间进行内存压缩,从而较少内存碎片来优化内存。 2.任何时候只用一半,如果一半要满了,活动的对象将会被复制到另一半空间中,一半就会全部清空。
共 3 条评论4 - LQ2019-07-021. 控件布局,写法和可读性给我感觉还是不怎么习惯。 2. 没有可视化的布局工具,手写布局给人感觉还是比较痛苦。 3. 不同android设备的兼容性,这个也是困扰我的问题之一,在oppo,vivo上还好好的,在华为手机上就显示不出来。
作者回复: 这种情况一般是布局约束写的有问题,建议多试试几种不同的分辨率,也关注下运行时异常
4 - 呼呼2019-07-02在写flutter app的过程中,遇见一个问题,想请教一下。一级页面push到二级页面,或者二级页面pop回去的时候,一级页面都会重新build一次(一级页面和二级页面都是通过provide进行状态管理的),导致页面很卡顿。
作者回复: 有一些通用的改造方法,比如不要直接在根部直接套StatefulWidget,而是把可变部分最小化;引入key,或是重写canUpdate方法
5 - 公众号:业余草2019-07-02Flutter 是不是代表着未来,这是一个后起之秀啊。看的我都想写一些入门教程了!
作者回复: 加油
3 - 宋世通2019-07-02函数式编程可以多介绍一下吗,fish redux就是函数式设计,代码读起来很困难,毕竟不是Java的面向对象
作者回复: 会介绍一些,但不会专门讲。状态管理那节会主要讲Provider
共 4 条评论3 - yu2019-07-02有了原生開發的經驗與概念,使用 flutter 真是有如神助,概念都是互通的。3
- 伊利丹怒风2020-07-18我正好是Golang的开发者,现在再把Dart/Flutter学了,感觉前后端通吃了。。。Google的两大语言确实也是画了很高级的饼啊2
- Shine2019-07-09dart没有多线程,通过不同的isolate共享消息队列,这类似于多进程模型。这样不利于利用手机的多核特性吧
作者回复: 我们的App大多数场景下都是静默状态,单线程对大多数场景已经足够用了: 1.I/O、网络请求操作系统提供了异步的API 2.CPU密集型的操作用Isolate即可 可以看下我之前在GMTC 2019的分享:Event Loop、Future与Isolate - 单线程模型下的Dart异步编程模式
共 2 条评论2 - Spring2019-07-04您好,对于H5+原生以及RN这种框架来说通过webview他们的优势是可以热更新,大量的H5页面都可以动态改变。然而像Flutter这种框架一套代码打包成Android和IOS,但是却失去了热更新这个大的优点。但是往往热更新是很多公司的诉求,我想知道大佬怎么看?
作者回复: Flutter确实不支持动态化,而且目前看从官方层面短期内也不会支持的。理由是发布期AOT是Flutter代码执行效率高的保障,不可能改回JIT;另外苹果也不允许除了JSCore之外还有别的VM可以动态执行逻辑。 这个事情有三个解法: 1.Flutter可以内嵌webview支持原有的H5 2.Flutter提高了迭代效率节省了研发资源,对于一些需要快速上线的功能,用Flutter开发完再发一个新版本就行了 3.业界已经有团队使用JSCore实现动态布局了,预计下半年会有一些较为成熟的方案出现
2 - Aron2019-07-03原生与flutter混合开发会介绍吗?毕竟大多数项目都是原生的。
作者回复: 会的
2 - SHERRAN要好好学习2019-07-02请问网页开发者入手学习flutter有阻碍吗?我是学生,表示context啥的都不太理解。😢
作者回复: 懂的基本的前端概念(视图、组件、状态、生命周期、路由)就可以上手了
2 - Geek_d221c62021-11-24我的语言学习史: 汉语 -> 英语 -> C++ -> Java -> JavaScript -> Python -> Dart1
- 舒大飞2019-09-22想请教下,看了dart的单线程执行异步任务,像future这种执行网络请求的话,直接把任务放进event queue同步执行,那么then的任务如何处理,等网络请求返回再放进event queue?整个过程是怎样的,谢谢
作者回复: 网络调用的执行是由操作系统提供的另外的底层线程做的,和Dart就没关系了。event queue里只会放一个网络调用的最终执行结果(成功或失败)及响应执行结果的处理回调。
1 - 这得从我捡到一个鼠标...2019-08-14为什么说dart写布局可读性好 ,一层层的嵌套,怎么看都感觉阅读困难呀
作者回复: Widget包括了视图、布局、交互、动画等概念,嵌套组装起来会比较方便,如果一开始使用不太适应,可以借助于IDE提供的Editor UI Guides插件辅助阅读/编写。
1