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

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

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

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

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

image.png

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

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

作者简介

image.png

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

image.png

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

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

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

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

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

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

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

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

image.png

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

image.png

我将这个库命名为 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:

image.png

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

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

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

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

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

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

<!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 要好得多。

image.png

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

以下是我的一些总结:

  • 学习与成长:开源项目提供了一个学习和成长的平台。通过阅读和理解其他开发者的代码,可以学习到新的编程技巧、设计模式和最佳实践。
  • 社区建设:开源项目帮助建立和增强技术社区。开发者可以通过贡献代码、解决问题和分享知识,与全球的开发者建立联系,共同推动技术的发展。
  • 技术创新:开源项目鼓励技术创新。开发者可以在开源项目中尝试新的想法和技术,如果成功,这些创新可以被广泛应用,从而推动整个技术领域的进步。
  • 解决实际问题:开源项目可以帮助解决实际问题。通过开源,开发者可以将自己的解决方案分享给社区,帮助其他人解决类似的问题。
  • 提升个人品牌:参与开源项目可以提升个人的技术品牌。通过贡献代码和解决问题,开发者可以展示自己的技术能力和专业知识,吸引更多的机会和合作。

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

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

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

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

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

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

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

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

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

最后

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

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

目录
相关文章
|
8天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端框架
【10月更文挑战第34天】在数字化时代,后端开发如同一座桥梁,连接着用户界面与数据处理的两端。本文将通过Node.js这一轻量级、高效的平台,带领读者领略后端框架的魅力。我们将从基础概念出发,逐步深入到实战应用,最后探讨如何通过代码示例来巩固学习成果,使读者能够在理论与实践之间架起自己的桥梁。
|
1月前
|
JavaScript 前端开发 中间件
探索后端技术:Node.js与Express框架的完美融合
【10月更文挑战第7天】 在当今数字化时代,Web应用已成为日常生活不可或缺的一部分。本文将深入探讨后端技术的两大重要角色——Node.js和Express框架,分析它们如何通过其独特的特性和优势,为现代Web开发提供强大支持。我们将从Node.js的非阻塞I/O和事件驱动机制,到Express框架的简洁路由和中间件特性,全面解析它们的工作原理及应用场景。此外,本文还将分享一些实际开发中的小技巧,帮助你更有效地利用这些技术构建高效、可扩展的Web应用。无论你是刚入门的新手,还是经验丰富的开发者,相信这篇文章都能为你带来新的启发和思考。
|
1月前
|
JavaScript 前端开发 API
Vue.js:现代前端开发的强大框架
【10月更文挑战第11天】Vue.js:现代前端开发的强大框架
65 41
|
14天前
|
JavaScript 中间件 API
Node.js进阶:Koa框架下的RESTful API设计与实现
【10月更文挑战第28天】本文介绍了如何在Koa框架下设计与实现RESTful API。首先概述了Koa框架的特点,接着讲解了RESTful API的设计原则,包括无状态和统一接口。最后,通过一个简单的博客系统示例,详细展示了如何使用Koa和koa-router实现常见的CRUD操作,包括获取、创建、更新和删除文章。
35 4
|
21天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的完美结合
【10月更文挑战第21天】本文将引导你走进Node.js和Express框架的世界,探索它们如何共同打造一个高效、可扩展的后端服务。通过深入浅出的解释和实际代码示例,我们将一起理解这一组合的魅力所在,并学习如何利用它们来构建现代Web应用。
40 1
|
1月前
|
设计模式 JavaScript 前端开发
浅谈JavaScript 框架在现代 Web 开发中的作用
浅谈JavaScript 框架在现代 Web 开发中的作用
38 12
|
9天前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实践
【10月更文挑战第33天】在数字化时代的浪潮中,后端服务的效率和可靠性成为企业竞争的关键。本文将深入探讨如何利用Node.js和Express框架构建高效且易于维护的后端服务。通过实践案例和代码示例,我们将揭示这一组合如何简化开发流程、优化性能,并提升用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
11天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的融合之道
【10月更文挑战第31天】在追求快速、灵活和高效的后端开发领域,Node.js与Express框架的结合如同咖啡遇见了奶油——完美融合。本文将带你探索这一组合如何让后端服务搭建变得既轻松又充满乐趣,同时确保你的应用能够以光速运行。
20 0
|
1月前
|
JSON JavaScript 前端开发
Node.js Express 框架
10月更文挑战第7天
27 2
|
1月前
|
JavaScript 前端开发 API