- 跨端技术
- Node方向(Serverless)
- 工程-安全生产
- 互动&游戏
- 智能化
- 可视化
- 中后台
其他:IDE、国际化、多媒体
并没有使用过 Rxjs,所以只记录一下演讲中提到的一些关键词:
- callbag库
- 传递订阅模式(next)
- 渐进式重构才是最佳方式
移动化办公、华为物联网、苹果跨设备... 都是跨端的趋势。
盒马面临的是更加多元化的中后台场景。
盒马工作台是多端作业任务的主要载体,让各类角色简单高效一致得完成工作。
- 多端多套方案
- 统一方案
业务逻辑一般是要把端有关的特殊逻辑拆掉,这样就没有多端问题了
- 越 37% 的 JS 从未使用,被浪费
- 在chrome开发者工具中使用 lighthouse
- pagespeed insights(网页打开速度分析):https://developers.google.com/speed/pagespeed/insights/?hl=zh-cn
- https://web.dev/
跨端的另外一种思路:逻辑跨端
不同端交互操作不同,但逻辑却相同。
用什么语言?
TypeScript 转 Dark
怎么分离?
React Hooks
使用 react hooks 编写抽象逻辑代码,然后通过 Dart 转化为 Flutter 对应的 hooks 代码
差异化
Dart2提供 Conditional Import,加载相同接口的不同模块
DOM Pipeline
webassembly:https://webassembly.org/
使用 Electron 开发自己业务的 IED
PixelAI:https://pixelai.jrsworld.co/
-
发现问题
发现身体有不舒服状况
-
验证结果
体检化验,得到化验结果
-
深入分析问题
深入分析健康状况,疾病原因,治疗方案
海量数据分析:
- 第一步:设定期望链路
- 第二步:统计分析实际链路
数据分析——构建用户行为树
P2C:PRD 2 Code (产品需求文档到代码)
PRD:Product Requirements Document
imgcook: https://imgcook.taobao.org/
Sketch: https://www.sketch.com/
**TC39:**推动 JS 技术发展的一个组织。
未来新增用法:
-
可选链(?.):目前只作用域对象属性,将来还可以作用于对象方法
-
默认值(??):目前设置默认值比较常见的做法是 let str = xxx || 'default',但这种做法存在的一个问题:若 xxx 不为 true 就会执行 str = ‘default',也就是说 xxx 为 false、""(空字符串)、0 时依然会执行 str = 'default'。而 ?? 新符号的出现,就可以解决这个问题。 let str = xxx ?? 'default',此时 即使 xxx 为 false、0 也不会执行 let str = ’default'。
特别注意,?? 和 ??= 意思相差很多,??= 的意思是 只有左侧为 null或undefined 情况下才会赋值,例如
let obj = {age:18} obj.age ??= 34 //由于 obj.age 有值,所以这行代码并没有真正赋值 console.log(obj.age) // 18 obj.name ??= 'puxiao' // 由于 obj.name 为 undefined,所以这行代码可以真正赋值 console.log(obj.name) // puxiao
-
Bigint:可以将任意数字转化为 Bigint
-
动态引入(import):通过字符串模板、有条件得动态引入
-
Intl.RelativeTimeFormat:新增时区格式化函数
-
Intl.NumberFormat:新增不同地区、类型 格式化数字
-
Intl.Local:新增根据地区名参数,获得该地区的一些特性,该类是为 Intl.RelativeTimeFormat、Intl.NumberFormat 提供参数支持
-
Logical Assignment:允许逻辑赋值,例如 a ??= b,也就是说只有在 b 有值(有运算结果,即使结果为0、false)的情况下才会将 a = b
-
Numeric Separators:使用 _ 来分割数字,以提高 number 数字可阅读性,例如 10000 可以设置为 10_000
-
WeakRefs:创建弱引用,目的是为了更加方便垃圾回收(存在强引用时一定无法存在垃圾回收)
-
Intl.ListFormat:语言相关的列表格式化构造器
-
Intl.DisplayNames:根据地区名,获得该地区(国家)的标准名称
-
dateStyle/timeStyle:格式化日期(dateStyle)、格式化时间(timeStyle)
JS 中 Intl 详细用法:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Intl
**混沌工程:**Thoughtful,planned
混沌工程不是一时的,而是不断持续的。
主要分为:生产阶段(开发阶段)、消费阶段(发布后的运行阶段)
服务器:Server(正式服务)、Drill Server(演练服务)
传统编写测试脚本方式不够方便,阿里直接采用:“流量即用例(测试用例)” 的策略,简单来说就是记录一部分用户的请求、操作、返回结果。然后再后期通过 “用户操作回放” 来分析可能发生的问题。
演讲中提到了 whistle 这个技术
**MidwayJS:**https://www.midwayjs.org/
一个面向未来的云端一体 Node.js 框架
Midway 是一个适用于构建 Serverless 服务,传统应用、微服务,小程序后端的 Node.js 框架。
1、package.json 中配置 type: 'module',可以配置 Nodejs 认为 .js 文件使用 ES6 导入方式,也就是异步导入方式。
Nodejs引入一个模块默认采用的是同步方式
ES6引入一个模块,采用的是 异步方式
2、在以后的 Nodejs 版本中,若 Promise 中没有添加 reject 处理,则会报错。
在之前的版本中是 允许不添加 异步错误处理 (reject) 的
3、node-addon-api:C/C++实现nodejs扩展接口,https://github.com/nodejs/node-addon-api
4、异步钩子 Async Hooks 的进一步优化提升
Async Hooks 是在 Nodejs 8 中就已存在的新特性
前端部署所面临的困境:
- 跟后端代码一起部署
- 放到 CDN 上
- Nginx类的代理
- Lua处理复杂细节
- Node编写的代理
- 灵活
新目标——统一前端部署体系:
- 出发点:把 “部署”这类脏活收敛到一个平台
- 实现前端灵活、统一的灰度体系
Serverlesss给前端部署带来什么
- Fass + Bass 概念和优势
- 给部署带来的变化
- 对流量波动的自动扩缩
- ...
SSR部署:
- 组成:静态代理服务、SSR渲染服务
- SSR渲染:Runtime打包业务渲染逻辑、SPR做一层策略缓存
**Node模块依赖代码压缩:**node minify
BFF部署: 自定义了一套 BFF 部署,前后端代码统一管理、一键发布
**接口定义:**字节跳动公司内部使用 Thrift 或 Protobuf 来定义 API 接口
2020年 D2 大会结束了,明年见。