这些前端新技术你很难再忽视了 —— Svelte

简介: Svelte 是一个构建 web 应用程序的工具。

image.png

新系列《这些前端新技术你很难再忽视了》,包括:SolidJS、Svelte、Tauri、Bun、Schema等。每一个都引领前端技术演变趋势,很有必要了解。

咱们将采用 5W1H 分析法,即 What(何事)、Why(何因)、Where(何地)、When(何时)、何人(Who)、How(何法)6 个维度来解析这些“新玩意儿”。

本篇带来 —— Svelte,或许很多工友已经很熟悉了,还不认识的工友赶快来学、卷起来~


闲话少说,冲了~

  • 点赞收藏关注,今晚一夜暴富 👍👍👍


🤔What



什么是 Svelte?

答:Svelte 是一个构建 web 应用程序的工具。

Svelte 与诸如 React 和 Vue 等 JavaScript 框架类似,关键区别有 3 点:

  1. 编译时间不一样;
  2. 无虚拟 Dom;
  3. 响应式原理不一样;

image.png


哈~ React、Vue、Svelte、SolidJS 到底是什么关系?

答:用 LOL 英雄来打个比方吧~

Vue 像 LOL 中的 寒冰射手·艾希,上手简单明快,小白萌新只会平A的也可以上手,要玩的好那必须要有一定的意识,上限是有天花板的,而且最好是带上一个辅助配合—— Vuex,Vue-router等。

Svelte 像 LOL 中的 暗夜猎手·薇恩,虽然身板也很脆弱,但异常灵活 ,能有很大的秀的空间、门槛偏高,适合高手。

React 像 LOL 中的 皮城女警·凯瑟琳,看起来好玩,其实对操作者的要求挺高的,会玩的能玩出天际,不会的基本就是不会,萌新想要玩的动,需要比较多时间的练习;用起来还比较吃队友(社区插件)

SolidJS 像 LOL 的 皮城执法官·蔚,和皮城女警是 couple,还有个说法:“目前 React、Vue、Svelte 没人能接住 SolidJS 这一拳”,蔚就是拳师,“先打一拳,再把问题问个遍。”

image.png


可以粗暴简单这样记忆,Svelte 和 Vue 是一对,SolidJS 和 React 是一对。书写风格 Svelte 和 Vue 很像;而 SolidJS 和 React 很像;


🧐Why



总在说预编译,为什么要预编译?

答:Svelte 的核心思想在于 通过静态编译减少框架运行时的代码量。打包出来的项目就几乎是原生JS代码,不会再像 React、Vue 那样在代码运行的时候再执行 虚拟 dom 那些。

那咱好不容易学会了虚拟 Dom,现在又跟我说取消虚拟 Dom,为什么?

答:Svelte 的编译策略决定了它跟 Virtual DOM 绝缘。它将 HTML 直接编译成 JavaScript;

举个栗子:

// 编译前
<a>{{ msg }}</a>
// 编译后
function renderMainFragment ( root, component, target ) {
  var a = document.createElement( 'a' );
  var text = document.createTextNode( root.msg );
  a.appendChild( text );
  target.appendChild( a )
  return {
    update: function ( changed, root ) {
      text.data = root.msg;
    },
    teardown: function ( detach ) {
      if ( detach ) a.parentNode.removeChild( a );
    }
  };
}

Svelte 将<a>{{ msg }}</a>这个模板片段 AOT 编译成很精简的一段 JavaScript 模块,这个模块主要的操作有四个部分:create、mount、update、unmount。create 顾名思义就是创建 HTML 片段,把模板中的各个用 HTML 元素用 Vanilla API 创建出来,然后 mount 就可以将这个片段添加到页面的 DOM 中。比较重要的就是 update,它是将新数据绑定到视图的操作。

如果用 React.js 来实现的话,先渲染成 element 然后与 V-Dom 做 diff 操作,然后 patch,bla bla bla,中间还要经过几个 event loop,是不是很多余?

所以这就是 Svelte 的精髓,用最少的操作(代码、CPU Cycle)去实现我们的目标,所以它生成的代码又小运行起来又快。


🤫Where



官方文档地址?还是看文档更准确。

答:www.sveltejs.cn/tutorial/ba…

image.png

左边是文档解释、右边是在线运行的代码,学起来真方便!!


🙄When



Svelte 什么时候诞生的?

答:2016年。


那回想这几个框架的诞生时间线先后是:

  • Angular(2009 年)
  • React (2013 年 3 月)
  • Vue (2014 年 2 月)
  • Svelte(2016 年)
  • SolidJS(2018 年)


再分享几个有意思的数据:Svelte 在 2020 前端框架满意度排行榜中超越了react,跃升到了第一位,但在 2021 又被 solidJS 给超越了。


image.png


在开发者兴趣度方面,连续 3 年 Svelte 位列第一。

image.png



😄Who



Svelte 作者 Rich Harris 是个什么级别的人物?

答:Rich Harris,也就是 Ractive, Rollup 和 Buble 的作者,堪称前端界的轮子哥。

image.png


😁How



怎么使用?

答:来看一段 Svelte 代码片段,感受感受~

<!-- App.svelte -->
<script lang="ts">
import { onMount } from 'svelte';
// 1:变量、双向绑定、事件处理
let name = 'world';
const onClick = () => name = 'Rex';
// 2:`if` 块、Watch
let x = 0;
const incX = () => x++;
// 这就像 Vue 中的 `watch` 功能
// 语法很奇怪,但是是合法的
$: doubleX = x * 2;
// 3:`each` 块
let characters = [
    { name: 'Aroma White' },
    { name: 'Neko Asakura' },
    { name: 'ROBO Head' }
];
const append = (name: string) => {
    if (!characters.find(t => t.name === name)) {
        characters = [...characters, { name }];
    }
};
// 生命周期
onMount(async () => {
    const res = await fetch(`/photos`);
    const photos = await res.json();
    console.log(photos);
});
</script>
<main>
    <section class="my-section-1">
        <h1>Hello {name}!</h1>
        <input bind:value={name}>
        <button on:click={onClick}>I'm Rex</button>
    </section>
    <section class="my-section-2">
        {#if x > 10}
            <p>{x} is greater than 10</p>
        {:else if x < 5}
            <p>{x} is less than 5</p>
        {:else}
            <p>{x} is between 5 and 10</p>
        {/if}
        <p>Double x is {doubleX}</p>
        <button on:click={incX}>x++</button>
    </section>
    <section class="my-section-3">
        <button on:click={() => append('Simon Jackson')}>
            Add Simon
        </button>
        <ul>
            {#each characters as c, i}
                <li>{i + 1}: {c.name}</li>
            {/each}
        </ul>
    </section>
</main>
<style>
main {
    font-size: 18px;
}
</style>


每个 .svelte 文件就是一个组件,并且也完整支持 Props、Context、Slot;

有完整的生命周期:onMountonDestroybeforeUpdateafterUpdate


小结:先学 Svelte ,再学 SolidJS,紧跟趋势,太卷了吧?!




相关文章
|
7月前
|
前端开发 JavaScript UED
Svelte:下一代前端框架的革命性选择
Svelte:下一代前端框架的革命性选择
136 0
Svelte:下一代前端框架的革命性选择
|
7月前
|
JavaScript 前端开发
初识Svelte前端框架,据说比Vue还好用!
初识Svelte前端框架,据说比Vue还好用!
|
1月前
|
人工智能 Rust 前端开发
前端界的未来趋势:掌握这些新技术,让你的作品走在时代前沿!
【10月更文挑战第30天】前端开发正以前所未有的速度发展,新技术层出不穷。本文探讨了AI助手(如GitHub Copilot)、低代码/无代码平台、跨平台技术(如React Native)和WebAssembly等未来主流技术,并附上示例代码,帮助你走在时代前沿。
82 1
|
1月前
|
前端开发 JavaScript
前端界的革命:掌握这些新技术,让你的代码简洁到让人惊叹!
前端技术的快速发展带来了许多令人惊叹的新特性。ES6及其后续版本引入了箭头函数、模板字符串等简洁语法,极大减少了代码冗余。React通过虚拟DOM和组件化思想,提高了代码的可维护性和效率。Webpack等构建工具通过模块化和代码分割,优化了应用性能和加载速度。这些新技术正引领前端开发的革命,使代码更加简洁、高效、可维护。
27 2
|
1月前
|
前端开发 开发者 C++
独家揭秘:前端大牛们如何高效学习新技术,保持竞争力!
【10月更文挑战第31天】前端技术飞速发展,如何高效学习新技术成为关键。本文通过对比普通开发者与大牛们的策略,揭示了高效学习的秘诀:明确目标、主动探索、系统资源、实践应用和持续学习。通过这些方法,大牛们能更好地掌握新技术,保持竞争力。示例代码展示了如何通过实践加深理解。
46 4
|
1月前
|
前端开发 JavaScript API
前端界的革命性突破:掌握这些新技术,让你的作品引领潮流!
【10月更文挑战第30天】前端技术日新月异,从传统的HTML、CSS、JavaScript到现代的React、Vue、Angular等框架,以及Webpack、Sass等工具,前端开发经历了巨大变革。本文通过对比新旧技术,展示如何高效掌握这些新技术,助你作品引领潮流。
49 2
|
1月前
|
前端开发 JavaScript API
前端框架新探索:Svelte在构建高性能Web应用中的优势
【10月更文挑战第26天】近年来,前端技术飞速发展,Svelte凭借独特的编译时优化和简洁的API设计,成为构建高性能Web应用的优选。本文介绍Svelte的特点和优势,包括编译而非虚拟DOM、组件化开发、状态管理及响应式更新机制,并通过示例代码展示其使用方法。
50 2
|
2月前
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。
|
6月前
|
前端开发 JavaScript 编译器
Svelte框架:编译时优化的高性能前端框架
Svelte是一款由Rich Harris于2016年创建的高性能前端框架,以其编译时优化著称。它将复杂UI逻辑转化为高效的JavaScript,减少运行时开销。Svelte的核心理念是将编译时和运行时的复杂性分离,通过模板语法、组件系统、响应式系统和编译器实现高性能。关键优化策略包括声明式更新、模板内联、计算属性缓存、事件处理优化和代码分割。Svelte提供热模块替换、类型检查和丰富的生态系统,如SvelteKit。其响应式系统基于Reactive Statements,自动更新组件。
207 0
|
7月前
|
前端开发 JavaScript vr&ar
前端新技术探索:WebAssembly、Web Components与WebVR/AR
【4月更文挑战第12天】WebAssembly、Web Components和WebVR/AR正重塑Web应用的未来。WebAssembly允许C/C++等语言在Web上高效运行,提供接近原生的性能,如游戏引擎。Web Components通过Custom Elements和Shadow DOM实现可复用的自定义UI组件,提升模块化开发。WebVR/AR(现WebXR)则让VR/AR体验无需额外应用,直接在浏览器中实现。掌握这些技术对前端开发者至关重要。
104 3