开源专访:Strve.js框架作者Vam

hi, 大家好, 我是徐小夕. 之前在趣谈前端和大家分享了很多前端工程化, 可视化和低代码的技术实践, 最近上线了《小夕朋友圈》栏目, 我会定期采访国内外优秀的开源作者, 独立开发者和创业者, 分享他们的学习成长经验和独立产品开发经验, 让更多热爱技术的小伙伴建立技术自信和技术连接. 同时也让 5w+ 程序员伙伴们看到国内优质的开源项目和技术产品.

如果你也是一名独立开发者, 开源作者, 或者创业者, 欢迎自荐或交流.

今天采访的嘉宾是一位对技术非常热爱的开源作者, 前端方向, 热爱技术创作和开源, 也一直在研究前端框架底层的一些设计思想, 他在 21 年底开源了一款前端框架 strve.js, 目前也一直在持续迭代中, 收获了很多开源社区的反馈和建议, 接下来就来听听这位开源作者在 开源 路上的一些心得体会.

这次采访主要包含如下几个部分:

  • 作者简介
  • 什么机遇让Vam考虑着手做 strve.js 这样一款框架
  • strve.js 框架的设计初衷, 解决的痛点, 设计实现原理, 应用场景, 优缺点
  • 设计 strve.js 框架的一些机遇和挑战, 以及取得的成绩
  • 如何看待开源
  • strve.js 框架目前正在做以及未来的一些规划
  • 对同样准备做, 或者正在做开源的小伙伴一些建议

作者简介

大家好,我是 Vam,专注于前端开发已有 5 年多的经验。我热衷于在 CSDN、掘金、知乎、公众号等社区平台分享我的技术文章,同时也积极参与开源项目的开发。我曾在掘金发表了一篇关于 Strve 的技术文章,累计阅读量达到了 5 万,获得了 300+的点赞。

Strve 是我非常自豪的一个开源项目,它是一个易用、快速、灵活且轻量级的 JavaScript 库,专为构建用户界面而设计。Strve 采用基于标签模板的 HTML 模板引擎,利用 ES6 的模板字符串进行模板编写,并充分利用浏览器的原生能力进行模板渲染。

什么机遇让你考虑着手做 strve.js 这样一款框架

Strve 的诞生源于我对 JSX 语法的热爱,这种在 JavaScript 中编写 HTML 的方式让我觉得非常酷。

我最初的目标是能够在 JavaScript 中编写 HTML, 并通过编写 JavaScript 来改变页面状态。经过两周多的研究,我意识到自己在原地打转,因为 JSX 语法不能直接在浏览器中运行,需要通过编译工具如 Babel 才能执行。

因此,我决定在模板字符串中编写 HTML

然而,我遇到了另一个挑战,那就是如何精确更新 DOM。我的第一个想法是利用虚拟 DOM,于是我开始学习前端框架如何使用虚拟 DOM 来精确更新 DOM。对于不懂的部分,我会去网上查找资料,然后记下来。有人可能会问,为什么要做这样可能没有太大意义的事情。

我没有深思熟虑,只是想做出一些东西来,觉得自己能做出来。有时候,我们在做一件事情之前过于考虑,这往往会阻碍我们的行动。

就这样,驱动着自己的热情,Strve 的第一个版本诞生了。

strve.js 框架的设计初衷, 解决的痛点, 设计实现原理, 应用场景, 优缺点

我将这个库命名为 Strve,这个名字的由来是字符串(String)与视图(View)的名称缩写拼接而成。Strve 的核心功能是在 JavaScript 字符串中编写 HTML 标签,并能够嵌入变量,从而实现数据驱动视图的效果。

我在上面提到,Strve 是一个易用、快速、灵活且轻量级的 JavaScript 库,专为构建用户界面而设计。那么下面我们来展开说一下 Strve 有哪些亮点。

  • 更容易上手: 只要你对 HTML、CSS 和 JavaScript 已经基本熟悉,就可以直接上手。

  • 声明式渲染: 我们可以声明式地描述最终输出的 HTML 和 JavaScript 状态之间的关系,开发者可以更加专注于业务逻辑的开发,不需要过多地关心 DOM 操作的细节。

  • 顺滑的用户体验: 模板字符串来进行模板的书写,在一些场景中代码智能提示、代码格式化方面不是特别友好。所以,我们提供了新的一种编码方式,我们可以使用 JSX 语法编写 Strve,提升用户开发体验。

  • 性能出色: 采用了虚拟 DOM 的模式,虚拟 DOM 使用 diff 算法的方法来计算出真正需要更新的节点,最大限度地减少了 DOM 操作以及 DOM 操作带来的排版与重绘损耗,从而显著提高了性能。另外,我们的 JavaScript 库在全球知名的测评榜单(js-framework-benchmark)上赢得了优秀的成绩。

  • 组件化: 一个函数就是一个组件,可以根据应用规模任意组合。并且组件特有的 "孤岛特性",使得将虚拟 DOM 树计算的级别控制在组件级别。

  • 灵活的应用场景: 有无构建工具都可以使用,并且可以适配到其他前端框架开发的应用项目中去。

  • 轻量级: 压缩后的文件大小不足 10k。另外,可以根据不同应用场景,选择不同类型(完整版、运行时版)的文件。

  • 周边生态丰富:createStrveApp(项目构建工具)、strveRouter(路由管理器)、strveReactivity(独立运行的可响应性 Strve),还有两款 babel 编译插件 babelPluginStrve 和 babelPluginJsxToStrve。

下面展示一下使用它设计的todo list:

设计 strve.js 框架的一些机遇和挑战, 以及取得的成绩

2021 年 11 月左右,Strve 的第一个版本诞生,社区反馈总体上是积极的,尽管也有少数人提出了质疑。这些反馈是开发过程中的常态,每当我们在社区分享自己的作品,都必须接受他人的评价。

东西做出来了,并不是说一定要看它给你回报多少。可能我一直做,短期也做不过 ReactVue 这种已经在前端立足很多年成熟的框架。我经常拿 React 比分也是因为跟好的榜样比,肯定会有进步,总不能拿比自己差的比吧。

我看到有些小伙伴会说,你这么做下去没啥意义,重复造轮子。可能这样对前端生态来说,是的,是这样。前端生态现在平均每段时间都可能出来一个新的东西,这样的话,说的人就多了去了。Strve 做出来,并不是独辟蹊径。也是借鉴了很多优秀框架的思想。因为这样就少走弯路,毕竟只有一个人在开发。它给我最大的收获,就是两年来我在不断地优化框架中,明白了很多日常业务中没有遇到的东西。

业界内基于标签模板的模板引擎大部分都是利用 ES6 的模板字符串进行模板编写,但是在一些场景中代码智能提示、代码格式化方面不是特别友好。所以,Strve 提供了新的一种编码方式,我们可以使用 JSX 语法编写 Strve,提升用户开发体验。

另外,Strve 相对于其他前端框架,对 JavaScript 侵入性更低,只要掌握数据与业务逻辑之间的关系就能轻松上手。

html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Strve.js</title>
  </head>
  <body>
    <script type="module">
      import {
        html,
        defineComponent,
      } from 'https://cdn.jsdelivr.net/npm/strve-js@6.6.6/dist/strve.full-esm.js';

      defineComponent(
        {
          mount: '#app',
        },
        ({ setData }) => {
          let count = 0;

          function add() {
            setData(() => {
              count++;
            });
          }

          return () => html`<h1 onClick=${add}>${count}</h1>`;
        }
      );
    </script>
  </body>
</html>

然后,性能跑分方面,Strvejs-framework-benchmark 中的表现比 React 要好得多。

如何看待开源(开源的价值)

以下是我的一些总结:

  • 学习与成长:开源项目提供了一个学习和成长的平台。通过阅读和理解其他开发者的代码,可以学习到新的编程技巧、设计模式和最佳实践。

  • 社区建设:开源项目帮助建立和增强技术社区。开发者可以通过贡献代码、解决问题和分享知识,与全球的开发者建立联系,共同推动技术的发展。

  • 技术创新:开源项目鼓励技术创新。开发者可以在开源项目中尝试新的想法和技术,如果成功,这些创新可以被广泛应用,从而推动整个技术领域的进步。

  • 解决实际问题:开源项目可以帮助解决实际问题。通过开源,开发者可以将自己的解决方案分享给社区,帮助其他人解决类似的问题。

  • 提升个人品牌:参与开源项目可以提升个人的技术品牌。通过贡献代码和解决问题,开发者可以展示自己的技术能力和专业知识,吸引更多的机会和合作。

strve.js 框架目前正在做以及未来的一些规划

Strve 目前需要优化就是组件配置更加灵活,另外还有周边生态更加完善。未来打算考虑将 Strve 支持跨平台以及无虚拟 DOM。 如果愿意跟我一块做这件有趣的事情,欢迎加入 Strve 大家庭。

  • 支持跨平台
  • 无虚拟 DOM 模式
  • SSR
  • UI组件库

对同样准备做, 或者正在做开源的小伙伴一些建议

根据自身情况而定,如果业务压力大,工作忙,那我建议就不要逼自己。

大家做开源其实都有一个阶段,就是你刚开始有一个想法想把它做出来,刚开始是一种快乐的一种状态,就是把一个想法从 0 到 1 那种快感,其实技术人员都有这种创造一种东西的想法。

但是当你做到从 90%到 100%这个过程其实是很困难的,你就会发现把一个玩具做成真的能用的东西,就需要投入很多很多,当你把它做得真的能用,真的有人用的时候,这些人就会继续给你提不停的要求。

这就说,我得去回应这些人的期待,这又是一种心理压力。 大家刚开始做开源的时候,会被创造一种东西的快感所吸引,没有意识到你以后会有很多的建议。

我对很多想要做开源的朋友的建议是,想清楚你做开源想要做什么,如果你就只是想写一个库觉得很爽,但是我后期不想去做让它耗费我很多精力去维护它,也没有问题,大家要明确这个想法。如果说你想做一个项目想做大做强,想跟 ReactVue 竞争的项目,那这个东西需要极大的投入的。如果你工作本质就很烦忙,那么大概率就没有可能做这个。所以说,适合自己, 找到自己最舒服的模式来做开源是最重要的.

最后

如果你对 strve.js 这款开源项目感兴趣, 也欢迎体验或参与共建.

如果你也是一名独立开发者, 开源作者, 或者创业者, 欢迎自荐或交流.

相关推荐
耶啵奶膘14 分钟前
uniapp-是否删除
linux·前端·uni-app
王哈哈^_^2 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
cs_dn_Jie2 小时前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
开心工作室_kaic3 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿3 小时前
webWorker基本用法
前端·javascript·vue.js
cy玩具4 小时前
点击评论详情,跳到评论页面,携带对象参数写法:
前端
清灵xmf4 小时前
TypeScript 类型进阶指南
javascript·typescript·泛型·t·infer
小白学大数据4 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
qq_390161774 小时前
防抖函数--应用场景及示例
前端·javascript
334554325 小时前
element动态表头合并表格
开发语言·javascript·ecmascript