2023的总结

OnlyOffice相关

深入研究了OnlyOffice的源码,期间学习并研究了

  • JavaScript Typed Array的使用

  • 流的使用

  • 字符编码

  • 二维变化矩阵

  • 其他图形学相关

  • 学习OnlyOffice的源码:

    • sdkjs:核心逻辑模块,代码熟悉度40%,目前已熟悉了一些核心动作的代码逻辑,包括文字、输入、渲染、布局等。目前掌握程度可以缓慢修改一些基本需求(因为源码量比较庞大所以未知情况比较多)
    • web-apps: UI模块,负责前端展示,底层调用sdkjs。代码熟悉度50%。目前掌握程度可以修改大部分的基本需求。
    • server: node服务端模块,包含了3个服务,SpellChecker/DocService/FileConverter。整体逻辑复杂度和前端来说算简单很多,代码熟悉度50%。目前掌握程度可以修改一些基本需求。
    • Python-example: Python文件管理模块,用于文件的上传下载保存。代码熟悉度80%。目前掌握程度可以修改大部分需求。

富文本相关

深入研究富文本有几个客观因素:

  • 项目对富文本的高度定制
  • wangEditor停止维护
  • 研究了很久的OnlyOffice

基于上面的原因,看了它的源码,了解了它的代码逻辑、插件机制。学习到了很多slate富文本相关的知识。

并且基于此开发了wangEditor-plugin-docx,用于支持wpsoffice的样式保留。得益于研究OnlyOffice的时候对于docx的研究,在这一块轻松了很多。

web组的Happy Friday

23年基于公司推动的代码审查,在此基础上创立了Friday Plan。顾名思义就是快乐周五。为了创建固定记忆,时间固定在每周五的1点半,web组每个成员轮流代码审查/技术分享。至今已经走到第31期。中间虽然有人员变动、项目变动,都没有停下来。算是今年最有成就感的事情之一。

中间自己也做了很多分享,把我在工作和平时学到的知识都分享给大家,我一直坚信最大的受益者就是分享者本身。

  • 第8期:Antd Mobile源码/用法(源于另一个源码共读计划,目的就是固定web组的技术栈,然后再攻读技术栈中的源码,让工作中没有黑盒子)
  • 第12期:qiankun源码分享01-import-html-entry(源码共读计划,qiankun微前端系列)
  • 第16期:Page Rendering(介绍CSR、SSR、SSG、island、RSC的使用,在CSR之外还有更广阔的渲染世界)
  • 第22期:图形学/脏矩形渲染(图表渲染更新优化方案之一)
  • 第25期:图形学/空间分割之quadtree算法(图表渲染更新优化方案之一)
  • 第26期:React特定场景 API(一些常用API的最佳实践,一些不常用API的使用场景)
  • 第28期:React Performance(React 最佳实践探讨会)

ESBoot V2

ESBoot是我23年全力维护的一个工程化构建工具。理念为:

  • Easy to Use: ESBoot was designed from the ground up to be easily installed and used to get your website up and running quickly.
  • Focus On Your Logic: ESBoot lets you focus on your login code, You don’t need to care about the compile process.
  • Power By Webpack and more: Simple configuration can provide powerful functionality, incorporating the best practices of webpack.

创建动机最主要有3:

  • 我近几年的主要研究方向有三:web工程化、可视化、Python。ESBoot算是web工程化方向研究的结晶。
  • x 历史项目。历史项目有一个特点就是代码老,很难升级。ESBoot会把工程化细节全部封装,历史项目只需要升级ESBoot版本就可以使用上最新最快的工具。
  • 为了提升web组的效率,我一直以来的构思就是将web组的人员分层,一层为业务开发人员、要做的就是上面所说的Focus On Your Logic,专注于写业务(甚至不需要了解业务),ESBoot会提供业务之外的工程化支持。下一层是业务+工具开发人员。这一层的人员需要做的是深读某个模块的业务抽取业务逻辑库提供给业务开发人员使用,产物就是各种lib。再下一层是更加抽象的逻辑支持,比如工程化库、抽象逻辑库。三层对应的是不同的开发水平不同的开发经验,刚进公司的人也可以快速的进入状态,更轻松的开发有更多的时间精进技术让自己进入下一层。

基于上,ESBoot就是抽象逻辑层的产物。提供了我所能认知的工程化最佳实践,用最稳定最快的工具、打包出更小的体积,提升开发速度,用最简单的配置提供更强大的功能 都是它的使命。为此也读了很多优秀同类库的代码,比如umi、next.js等等。

ESBoot也封装了各种lint规则、统一化web组的lint,规则统一化、版本化。

目前ESBoot已经平稳运行了大半年,支撑了公司所有的新的项目 + 历史项目在web组的支持下逐步迁移。

两个模版:

  • esboot-react-mp: 包含了多平台代码的最佳实践,感谢同事给这个模版提供了很多最佳实践。
  • esboot-react-mp: 包含了单平台,如微信公众号页面。

多个插件:

想使用vitest写单元测试?tailwindcss写原子css?又不想看繁琐的文档。ESBoot处理了繁琐的接入逻辑,使用者只需要install @dz-web/esboot-plugin-**就可以开箱即用。

读了很多库的源码

23年是自己阅读源码能力突飞猛进的一年,读了很多优秀仓库的源码,学习到了很多。也尝试给了一些库提了PR。特别是Onlyoffice的源码,代码很老、码量巨大,没有文档,是攻读过最困难的一个。读过它感觉其他仓库都有些简单了。

其他语言的学习和使用

  • Python: 年初抉择了很久,想再深入学习一门语言,在Go/Rust/Python中选择,最终基于各种考虑选择了Python。年底来看效果还不错,现在各种工具都优先使用Python开发巩固语法。
  • Shell:Shell今年也写了很多,写了一个jenkins-tools工具,用于公司的流水线。OnlyOffice中的脚本基本都使用Shell开发。

其他

23年是各方面都挺满意的一年:

  • 全年看了24本书、25部电影,去了5个地方。
  • 注重周末户外活动,包括爬山、运动、羽毛球。
  • 购置了心仪的相机,学到了许多拍照知识,拍摄了许多满意的照片。

2024的期望

  • OnlyOffice: Q1 全面进入改的阶段
  • ESBoot v3: Q1 可以发布全面重构的v3版本,更优秀的源码结构。
  • Python: 全年 寻找更多的实战时机,Q2从0写一个完整的项目。
  • 英语: 全年 英语进入全面写的阶段,写技术博客采用纯英文。
  • AI: Q3~Q4 看一下之前收藏的prompt教程。