挑战“三大框架”的解决方案

最近这些年,随着三大框架React、Vue、Angular版本逐渐稳定,前端技术栈的迭代似乎缓慢下来。

如果我们把目光拉伸到未来十年的视角,前端行业会出现哪些框架有可能会挑战React、Vue、Angular呢?

崭露头角的 Svelte 应该是其中的选项之一。

挑战“三大框架”的解决方案

简介

Svelte 是一个构建 web 应用程序的工具。它被预测为未来十年可能取代React和Vue等其他框架的新兴技术。

有一个关键的区别:Svelte 在 构建/编译阶段 将你的应用程序转换为理想的 JavaScript 应用,而不是在 运行阶段 解释应用程序的代码。这意味着你不需要为框架所消耗的性能付出成本,并且在应用程序首次加载时没有额外损失。

你可以使用 Svelte 构建整个应用程序,也可以逐步将其融合到现有的代码中。你还可以将组件作为独立的包(package)交付到任何地方,并且不会有传统框架所带来的额外开销。

发展趋势

开发者满意度

从2019年开始, Svelte出现在榜单中。2020年,Svelte在满意度排行榜中超越了react,跃升到了第一位。在过去的两年里,也是碾压三大框架的存在,还能与最新的 Solid 并驾齐驱(都是90%)。

挑战“三大框架”的解决方案

开发者兴趣度

在开发者兴趣度方面,在过去的四年里,Svelte 一直蝉联了第一。

挑战“三大框架”的解决方案

市场占有率

2020年,Svelte 的市场占有率从第6名跃升到第4名,仅次于 React、Angular、Vue 老牌前端框架。

挑战“三大框架”的解决方案
随着 Svelte 在社区里慢慢流行起来,它的占有率还会提升。

在最新的《State of JS survey》中,Svelte 被预测为未来十年可能取代React和Vue等其他框架的新兴技术。

Svelte 特点

No Runtime —— 无运行时代码

React 和 Vue 都是基于运行时的框架,当用户在你的页面进行各种操作改变组件的状态时,框架的运行时会根据新的组件状态(state)计算(diff)出哪些DOM节点需要被更新,从而更新视图。

而 Svelte 会在编译阶段将代码编译到更加贴近dom操作的代码。或者说,Svelte 生成的是命令式的dom创建过程,直接操作Dom。

Less Code —— 更少的代码

我们直接来看官网的例子:

挑战“三大框架”的解决方案
实现的功能也很简单,就是两个Input的值求和,然后展示出来。图中是用svelte编写的代码。 看下 React 书写的版本:

import React, { useState } from 'react';

export default () => { 

    const [a, setA] = useState(1); 
    const [b, setB] = useState(2); 
    function handleChangeA(event) { setA(+event.target.value); } 
    function handleChangeB(event) { setB(+event.target.value); }

    return ( 

       <div> 
          <input type="number" value={a} onChange={handleChangeA}/> 
          <input type="number" value={b} onChange={handleChangeB}/> 
          <p>{a} + {b} = {a + b}</p> 
       </div> 

    );

}

再来看下 Vue 版本:

<template> 

    <div> 
       <input type="number" v-model.number="a"> 
       <input type="number" v-model.number="b"> 
       <p>{{a}} + {{b}} = {{a + b}}</p> 
   </div> 

</template> 

<script> 

    export default { 
       data: function() { 
          return { a: 1, b: 2 }; 
       } 
    }; 

</script>

三者对比:

框架名称 svelte react vue
demo字符数 145 445 263

单纯从代码字符数上,Svelte比Vue和React少。但就此得出说svelte的编码体积更小,这样是不对的。我们一起来看下编译后的对比:

框架名称 svelte react vue
体积 1.6k 22k 42k

从上述对比中可以看出,svelte 编译后的体积很少,包体积1.6k,对于一般中小型项目而言,整体运行的代码(编译后的代码+包体积)还是比较小的,所以可以说svelte项目的代码较小。

PS: 对于大型项目而言,因为svelte随着业务的进行,代码编译产物陡峭,大型项目体积并不会比react、vue等小,因此需要辩证看待。

svelte 生成的是命令式的dom创建过程,虚拟 dom 的框架生成的是虚拟 dom 结构创建的过程(vdom 渲染函数)。在基于虚拟 DOM 的框架里,虚拟dom到真实dom的转换过程,被封装在运行时里,所以每个组件虚拟 dom 创建过程仅仅是数据结构的表述,更为紧凑,代码产物也就比较少。

Hight-Performance ——高性能

在Virtual Dom已经是前端框架标配的今天, Svelte 声称自己是没有Virtual Dom加持的, 那性能如何呢?

Jacek Schae 在《A RealWorld Comparison of Front-End Frameworks with Benchmarks》中用主流的前端框架来编写 RealWorld 应用,使用 Chrome 的Lighthouse Audit测试性能,得出数据是Svelte 略逊于Vue, 但好于 React。

挑战“三大框架”的解决方案
Svelte 性能还不错,至少没有我们预期的那么糟糕。

PS:sveltedom 是把数据和真实dom之间的映射关系,在编译的时候就通过AST等算出来,保存在p函数中。p函数就是一堆“if(...){...}”判断,直接保证dom的更新。同时,这也说明“如果项目中涉及了dom操作越多,那这个p函数就越大,编译后的代码提交就会增大”。

其他

本文没有涉及 Svelte 的语法,且 Svelte 的语法极其简单,官方教程学习文档也比较详细,相信大家很快就会上手语法的,这里就不做官网搬运工了。附上地址供大家参阅。

官方地址
https://www.sveltejs.cn/

原文链接:https://www.cnblogs.com/tanggoahead/p/17383591.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:挑战“三大框架”的解决方案 - Python技术站

(0)
上一篇 2023年5月8日
下一篇 2023年5月9日

相关文章

  • 一文了解你不知道的JavaScript闭包篇

    一文了解你不知道的JavaScript闭包篇是一篇非常详细的关于JavaScript闭包的介绍和讲解,下面我将为您详细解读。 什么是闭包? 在JavaScript中,闭包(Closure)指的是函数和该函数能够访问到的外部词法环境(Lexical Environment)的组合。通俗地说,闭包是指在函数内部能够访问到函数外部的变量的函数。 闭包的作用 闭包的…

    JavaScript 2023年6月10日
    00
  • 在JavaScript中构建ArrayList示例代码

    在JavaScript中构建ArrayList需要先了解什么是ArrayList。ArrayList是一种动态数组,可以在数组不够长时自动扩展。在JavaScript中,原生数组可以看作是一种最基本的ArrayList,但是缺少了自动扩展的功能。因此,我们需要自己构建一种可以自动扩展的ArrayList。 构建一个ArrayList可以通过定义一个类来实现。…

    JavaScript 2023年5月27日
    00
  • 文件预览PDF.js使用技巧示例总结

    文件预览PDF.js使用技巧示例总结 简介 PDF.js是一个用于在Web平台上显示PDF文档的JavaScript库,其使用Canvas技术实现渲染,使得Web端的PDF浏览成为可能。本文将简要介绍PDF.js的使用技巧,并提供两个示例说明。 安装PDF.js 从GitHub上下载PDF.js源代码,并解压到本地目录 在HTML文件中添加以下标签,引入库文…

    JavaScript 2023年5月27日
    00
  • JavaScript ES6的函数拓展

    下面是关于JavaScript ES6的函数拓展的详细攻略。 什么是函数拓展 函数拓展是ECMAScript 6(简称ES6)中引入的一些新特性,可以让我们编写更简洁、易读、易维护的函数代码,并为函数提供了更多的灵活性和可扩展性。 ES6函数拓展的特点 ES6函数拓展具有以下几个特点: 箭头函数 默认参数 剩余参数 扩展运算符 接下来我们将分别讲解这些特点,…

    JavaScript 2023年5月18日
    00
  • JS实现加载和读取XML文件的方法详解

    JS实现加载和读取XML文件的方法详解 在Web开发中,我们有时会需要从服务器端获取XML文件,然后在前端进行解析和操作。本文将详细讲解JS实现加载和读取XML文件的方法,以及对XML文件进行解析和操作的技巧。 加载XML文件 加载XML文件主要有两种方式,一种是使用AJAX技术,另一种是使用XMLHttpRequest对象。下面分别进行讲解。 AJAX方式…

    JavaScript 2023年5月27日
    00
  • js实例之01支付后的10秒倒计时

    这是一个通过js实现的支付后的页面,点击支付会跳出一个弹窗,提示你是否要确定支付,确定后进入付后界面,该页面有着10秒倒计时,计时结束后便会返回原界面。也可以选择立刻返回,来返回主页面第一个zhifu.html页面<!DOCTYPE html> <html lang=”en”> <head> <meta charse…

    JavaScript 2023年4月18日
    00
  • 使用Vue实现移动端左滑删除效果附源码

    针对“使用Vue实现移动端左滑删除效果附源码”,我可以提供以下完整攻略。 前置知识 实现该功能需要具备以下基础知识: Vue.js基本语法 移动端touch事件基本知识 CSS3动画基本知识 实现步骤 第一步:实现左滑效果 首先,我们需要实现左滑效果。我们可以使用CSS3的transition或animation属性实现。 以使用transition为例,我…

    JavaScript 2023年6月11日
    00
  • 如何使用 JavaScript 操作浏览器历史记录 API

    当我们在浏览器上访问网站的时候,浏览器会自动帮我们记录下我们访问的历史记录。浏览器历史记录 API 可以让我们通过 JavaScript 进行控制这些历史记录。下面是如何使用 JavaScript 操作浏览器历史记录的完整攻略。 1. pushState()方法 使用 pushState() 方法可以在当前浏览器历史记录中添加一个新的状态。新的状态包括一个页…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部