Tuax 技术周刊 2021-09-10 期

236 阅读5分钟

1、捕获所有异步 error

捕获异常,让代码更加健壮,对于线上业务是非常重要的。异步错误不像同步错误一样,需要更加注意异常的捕获。同时,在coding时,如何尽可能的保证异常错误都被捕获,也是一门“手艺”

2、你的程序中可能存在内存泄漏

容易引起内存泄漏:

  • 闭包使用不正确
  • 使用全局变量
  • 游离DOM引用:父节点删除后,子节点仍然存在引用
  • 遗忘的定时器
  • 遗忘的事件监听器
  • 遗忘的Map、Set对象
  • 未清理的Console输出,浏览器保存了我们输出对象的信息数据引用,也正是因此未清理的 console 如果输出了对象也会造成内存泄漏

内存泄漏排查、定位与修复Chrome Devtool:

  • Memory面板
  • Performance Monitor
  • 多次使用工具录制,快照之间进行对比

3、低代码逻辑编排

image.png借助node-red,采用可视化的UI方式,拖拽即可编排代码逻辑,最终生成部署前端页面

node-red:

  • 低代码平台,可视化UI编排
  • 截止目前共有 42 个逻辑节点,按照通用、功能、网络、序列、解析、存储分为六大类
  • 采用Node.js作为底层框架,充分发挥事件驱动、非阻塞模型的有点
  • 支持硬件设备,如树莓派
  • 采用JSON格式的数据进行存储,快捷在其他框架下导入&导出

4、高性能表格

表格的主流实现方案:

  • Canvas:渲染效率比 DOM 高,这是浏览器实现导致的。(腾讯文档是用canvas)
  • DOM: 可拓展性比 Canvas 好,渲染自定义内容首选 DOM 而非 Canvas。

优化方案:

  • 所有单元格位置都要提前计算,这里可以利用 web worker 做并行计算
  • 采用模拟滚动而非原生滚动,避免渲染速度跟不上滚动导致的白屏
  • 零 buffer 区域:采用模拟滚动方案时,相当于采用了在滚动时 “高频渲染” 的方案,因此不需要使用截留,更不要使用 Buffer 区域,节省开销
  • 预计算:单元格合并、行列隐藏、单元格格式化等计算逻辑,最好在滚动前提前算掉,否则在快速滚动时实时计算必然会带来额外的计算成本损耗
  • 局部预计算:对于不影响全局结果的渲染,仅针对可见区域的进行计算绘制,保证流畅度
  • Map Reduce&web-woker:将一个计算拆分为多个计算,并行计算,最后进行合并处理

5、「可视化搭建系统」——从设计到架构,探索前端的领域和意义

探索分位两个阶段,分别使用了Markdown和Draft.js

Markdown:

优点:

  • 自定义 Markdown 语法解析器,扩展灵活,支持自定义业务
  • 利用 React 服务端渲染能力得到特殊组件的富文本内容

缺点:

  • 编辑器内 Markdown 语法内容,对于运营仍然较为晦涩难懂
  • 运营还是需要一定的学习和使用成本
  • 依赖实时解析和渲染的“所见即所得”
  • 对于每一种新的组件,都要创建一种新的 Markdown 语法

Draft.js(知乎方案):

选用Draft.js为底层框架

解析中输出以下内容:

  • rawContent:不可变数据 contentState 进行序列化后的结果,rawContent 可以通过数据表示出当前编辑器内所有内容。目的是用于编辑还原。当运营再次打开编辑器时,编辑器可以根据 rawContent 迅速渲染出上一次提交的所有内容,以供编辑。
  • renderTreeData:经过计算并处理后提交的数据,它的目的是存储到数据库中,用于后端返回给 C 端页面,C 端页面最终根据 渲染器渲染出完整的活动运营页面

6、新一代Web技术栈的演进:SSR/SSG/ISR/DPR都在做什么?

  • CSR:Client Side Rendering,客户端(通常是浏览器)渲染
  • SSR:Server Side Rendering,服务端渲染
  • SSG:Static Site Generation,静态网站生成
  • ISR:Incremental Site Rendering,增量式的网站渲染
  • DPR:Distributed Persistent Rendering,分布式的持续渲染
  • ESR:Edge Side Render,边缘渲染

7、Flutter 2.5

  • 性能:iOS着色器预热、异步任务、GC和消息传递
  • Dart 2.14:格式化、语言特性、pub和linting开箱即用
  • 框架。安卓全屏、Material You和文本编辑快捷键
  • 插件:相机、图像选取器和附加插件
  • Flutter DevTools:性能,Widget inspector,和polish
  • IntelliJ/Android Studio:集成测试、测试覆盖率和图标预览
  • Visual Studio Code:依赖性、全部修复和测试运行器
  • 工具:例外情况、新的应用模板和Pigeon 1.0

8、WasmEdge 0.8.2 发布

曾用名 SSVM,是一个开源 WebAssembly 虚拟机,针对边缘设备进行了优化。可以应用于 severless 云函数、SaaS、区块链智能合约、物联网、汽车实时软件应用等多种场景。

  • 更好的跨平台兼容性。在 Mac OS X(Intel 和 M1)、Windows 10 以及配备 ARM 32 位芯片的 IoT 设备上运行 WasmEdge 应用程序。
  • Networking 支持。可以从 WasmEdge 应用程序发出网络请求并运行 HTTP 服务器。
  • 新的和改进的 API。在 C、Rust 和 Golang 应用程序中嵌入 WasmEdge 函数。
  • WasmEdge 的 AoT 编译器的通用二进制输出。在云原生平台可以利用 AOT 增进性能。
  • 支持 proxy-wasm 规范,WasmEdge 为服务网格带来了高性能 API 路由。