# 每个前端同学都可以拥有自己的框架,然后去完善它——Strvejs@3.1.0正式发布 #

简介: # 每个前端同学都可以拥有自己的框架,然后去完善它——Strvejs@3.1.0正式发布 #

微信截图_20220506214317.png

不忘初心


从 Strve.js 正式发布到现在已经将近半年了,收到很多建议,也收到很多赞扬,谢谢大家!平时抽空的时候,我也在不断地完善这个框架,希望可以更加的健壮。


我提到很多次,大家也经常问我。为什么要开发这个框架?你的初衷是什么?其实,我的动机特别简单,完全受 JSX 语法的影响。刚接触 JSX 语法的时候,就被它那种魔法深深地吸引住了,可以在 JS 中写 HTML。所以,我就想我自己可不可以也搞一个类似 JSX 语法的库或者框架呢!一方面可以锻炼自己的代码能力,另一方面体验开发框架的整个流程,也方便我以后更全面的学习其他框架(Vue.js、React.js 等)。


我刚开始开发 Strve.js 时,借鉴了一个迷你 JSX 的库,但是做着做着就觉得做不下去了。感觉还是偏离了方向,我决定用简单的方式去实现我所想要的效果。


在 JS 中可以写 HTML,除了借助 Babel 来转译 JSX 语法外,还有一种就是利用 ES6 语法中 的模板字符串。利用模板字符串可以做到直接渲染到页面中,如果是改变数据的话,也能实现。但是问题是,它并不那么灵活,并且需要操作大量 DOM 节点。


减少操作真实 Dom 带来的性能代价,目前合理的方案是利用虚拟 Dom,将 HTML 标签对象化,转化成一个 JS 对象。最后利用 Diff 算法进行新旧 Dom 对比,来更新差异。虽然这样也会操作真实 Dom,但是比起之前的量级少了太多。


虚拟 Dom 的量级也得控制一定范围,不然计算量太大,页面也会卡顿。Vue2 相比于 Vue1 引入了虚拟 Dom,组件内利用虚拟 Dom 来进行更新数据,把虚拟 Dom 的量级控制在组件级别;而 React.js 则引入 Fiber 架构,借鉴了操作系统时间分片的概念,利用空闲时间计算 Diff。所以,针对于 Strve.js,如果引入虚拟 Dom 的话,虚拟 Dom 的量级必须在考虑范围之内。


Strve.js@3.x之前的版本都没有解决虚拟 Dom 量级的问题,都是全量的对比。另外,如果想操作 Dom,必须要为其创建一个 Dom 对象,绑定到虚拟 Dom 上,这样才能调用 Dom API,之前的版本都是为每一个 Dom 节点都创建一个 Dom 对象,一些静态节点没有必要,还有它也不会进行 Diff 算法。


Strve.js@3.1.0是 3.x 正式版本中第一个版本,也是之前 2.x 版本之后的第一次重大升级。算是给自己在 2022 年第一个礼物吧!之前听过尤大的一次分享,他说:“做开源从 90%到 100%这个过程中,是特别难的”。是的,这次我亲身体会到了。Strve.js 我会继续维护下去,但是我不会逼自己去一定要做成什么样,保持一颗初心就够了。


Strve.js@3.1.0升级了什么


这次大方面一方面是修改了 API,更简短也容易记,减轻了心智负担;另一方面是上面提到了 Diff 算法的优化。


以下是更新日志:


  • 修改 API:


旧 API 新 API
Strve createApp
render h
updateView setData
watchDOMChange watchDom
emitEvent emit
strveVersion version
deepCloneData clone


  • 调整createAppAPI;
  • useFkey标记改为useFirstKey
  • 添加标记$key$name
  • 加入组件标签<component>、空节点标签<null>
  • 调整setDataAPI;
  • 优化 Diff 算法;
  • TypeScript 重构代码;


官方文档又更新了


此次对文档内容进行了大的改动,主要是对使用项。


微信截图_20220506214337.png


除了对文档中内容的改写,还加入了实时代码的功能,你可以在线编辑代码,看到自己想看到的效果。


微信截图_20220506214349.png


Strve Router 也更新了


Strve Router 这次更新也算是大版本升级,升级到 2.1.0,可以通过下面这个示例简单了解下 Strve Router。


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>strve-router</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module">
      import {
        h,
        createApp,
        setData,
      } from 'https://cdn.jsdelivr.net/npm/strvejs@3.1.0/dist/strve.esm.min.js';
      import {
        initRouter,
        linkTo,
      } from 'https://cdn.jsdelivr.net/npm/strve-router@2.1.0/dist/strve-router.esm.js';
      class Home {
        constructor() {
          this.state = {
            count: 0,
          };
        }
        useAdd = () => {
          setData(() => {
            this.state.count++;
          });
        };
        goAbout = () => {
          linkTo('/about');
        };
        render = () => {
          return h`
                    <button onClick=${this.goAbout}>goAbout</button>
                    <h1 onClick=${this.useAdd} $key>${this.state.count}</h1>
                `;
        };
      }
      class About {
        constructor() {
          this.state = {
            msg: 'About',
          };
        }
        render = () => {
          return h`
                    <button onClick=${this.goHome}>goHome</button>
                    <h1 onClick=${this.useChange} $key>${this.state.msg}</h1>
                `;
        };
        useChange = () => {
          setData(() => {
            this.state.msg = 'Changed';
          });
        };
        goHome = () => {
          linkTo('/');
        };
      }
      const router = initRouter(
        [
          {
            path: '/',
            template: [Home, 'render'],
          },
          {
            path: '/about',
            template: [About, 'render'],
          },
        ],
        setData
      );
      function App() {
        return h`
            <div class="main">
                ${router.view()}
            </div>
            `;
      }
      const app = createApp(App);
      app.mount('#app');
    </script>
  </body>
</html>


其他详情更新


还有很多更新,详情内容可以访问下面官方文档地址:


maomincoding.gitee.io/strvejs-doc…



相关文章
|
1月前
|
前端开发 JavaScript Java
前端 NUXT框架
前端 NUXT框架
24 0
|
2月前
|
人工智能 前端开发 搜索推荐
前端UI框架的发展:从混沌到秩序的演变
前端UI框架的发展:从混沌到秩序的演变
|
2月前
|
移动开发 前端开发 Android开发
mPaaS 常见问题之移动开发平台 mpaas的H5 前端 Kylin 框架引入vant后包特别大如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
47 0
|
5天前
|
开发框架 前端开发 JavaScript
我们是否对现代前端开发框架过于崇拜了?
在当前环境下,前端的开发由于框架的限制,导致代码变差。我们应该如何破除代码差的困境,如何正确使用前端架构,提升自己的代码质量。
|
11天前
|
Dart 数据处理 开发者
【Flutter前端技术开发专栏】Flutter是谷歌的开源移动框架,以其高性能和跨平台能力受开发者青睐。
【4月更文挑战第30天】Flutter是谷歌的开源移动框架,以其高性能和跨平台能力受开发者青睐。本文聚焦Flutter开发关键知识点:1) Dart语言和Flutter框架基础,如Widget和State;2) 路由管理,包括基本和命名路由,以及路由传值;3) 使用http、dio等库进行网络请求和数据处理;4) ThemeData定义应用主题,实现样式主题化。掌握这些技能将提升Flutter开发效率和应用质量。
|
11天前
|
存储 JavaScript 前端开发
【Flutter 前端技术开发专栏】Flutter 中的状态管理框架(如 Provider、Redux 等)
【4月更文挑战第30天】本文探讨了 Flutter 开发中的状态管理,重点介绍了 Provider 和 Redux 两种框架。Provider 以其简单易用性适合初学者和小项目,而 Redux 则适用于大型复杂应用,保证状态一致性。此外,还提到了 Riverpod 和 BLoC 等其他框架。选择框架时要考虑项目规模、团队技术水平和个人偏好。文章通过购物车应用示例展示了不同框架的使用,并展望了状态管理框架的未来发展。
【Flutter 前端技术开发专栏】Flutter 中的状态管理框架(如 Provider、Redux 等)
|
12天前
|
机器学习/深度学习 前端开发 数据可视化
数据分析web可视化神器---streamlit框架,无需懂前端也能搭建出精美的web网站页面
数据分析web可视化神器---streamlit框架,无需懂前端也能搭建出精美的web网站页面
|
12天前
|
开发框架 前端开发 JavaScript
学会Web UI框架--Bootstrap,快速搭建出漂亮的前端界面
学会Web UI框架--Bootstrap,快速搭建出漂亮的前端界面
|
12天前
|
JavaScript 前端开发 开发者
前端框架(Vue.js&&vue-cli项目框架&&element-ui使用)
前端框架(Vue.js&&vue-cli项目框架&&element-ui使用)
|
15天前
|
机器学习/深度学习 前端开发 JavaScript
探寻前端巨变:从HTML到现代框架的发展历程
探寻前端巨变:从HTML到现代框架的发展历程
21 2