官方网址
https://svelte.dev/

这个框架还是非常不错的,轻量级,代码量少,没有Virtual DOM高性能,涵盖了非常多的优点。

先来说说轻量级,通过CSS缩小后有约17kb的大小,gzip后更是小到了4kb,可以说是比3大前端框架都小。
代码量少,Svelte直接免去了类和对象的编写,使用Svelte写代码省去30%-40%的代码量。

Svelte 的代码长什么样子呢?

[Java] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

<script>

    let count = 0;

    $: doubled = count * 2;

    function handleClick() {

        count += 1;

    }

</script>

<button on:click={handleClick}>

    Clicked {count} {count === 1 ? 'time' : 'times'}

</button>

有过前端开发经验的朋友第一眼看到这段代码肯定会问,这个 $: 是什么玩意?

其实这个就是相当于Vue中的computed的意思,React的useMemo() 的意思。是不是看上去很简洁?

Svelte的编译器会把这一段代码编译成以下代码,然后再通过webpack编译打包。
细心对比编译前后的代码,我们可以看出Svelte设计的巧妙之处。

import 语句,类声明和export语句是Svelte编译器之后加上的,节约了你去写这些代码的时间。同时因为没有类或对象的编写过程,节约了写this关键字。
编译好的create_fragment方法是用来生成DOM目录树的,它是直接将源代码的html模板编译成了代码去实现响应式变化,最终这个新生成的节点会直接使用到真DOM上,这就是它宣传的没有Virtual DOM和它高性能的原因(因为有了Virtual DOM,还要做Diff之类的算法去做比对)。
Svelte框架在webpack打包前就编译好了纯原生JS库就可以执行代码,它的运行库不用再对类似于计算属性的内容再做额外的库和运算,所以它编译出来的包很小,执行效率也更高。也正因如此,Svelte的打包不再区分dev和prod模式,保证了生产环境和最终产品包的一致性。

[Java] 纯文本查看 复制代码

?

001

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

017

018

019

020

021

022

023

024

025

026

027

028

029

030

031

032

033

034

035

036

037

038

039

040

041

042

043

044

045

046

047

048

049

050

051

052

053

054

055

056

057

058

059

060

061

062

063

064

065

066

067

068

069

070

071

072

073

074

075

076

077

078

079

080

081

082

083

084

085

086

087

088

089

090

091

092

093

094

095

096

097

098

099

100

/* App.svelte generated by Svelte v3.22.2 */

import {

    SvelteComponent,

    append,

    detach,

    element,

    init,

    insert,

    listen,

    noop,

    safe_not_equal,

    set_data,

    space,

    text

} from "svelte/internal";

function create_fragment(ctx) {

    let button;

    let t0;

    let t1;

    let t2;

    let t3_value = (/*count*/ ctx[0] === 1 ? "time" : "times") + "";

    let t3;

    let t4;

    let p;

    let t5;

    let t6;

    let t7;

    let dispose;

    return {

        c() {

            button = element("button");

            t0 = text("Clicked ");

            t1 = text(/*count*/ ctx[0]);

            t2 = space();

            t3 = text(t3_value);

            t4 = space();

            p = element("p");

            t5 = text(/*count*/ ctx[0]);

            t6 = text(" doubled is ");

            t7 = text(/*doubled*/ ctx[1]);

        },

        m(target, anchor, remount) {

            insert(target, button, anchor);

            append(button, t0);

            append(button, t1);

            append(button, t2);

            append(button, t3);

            insert(target, t4, anchor);

            insert(target, p, anchor);

            append(p, t5);

            append(p, t6);

            append(p, t7);

            if (remount) dispose();

            dispose = listen(button, "click", /*handleClick*/ ctx[2]);

        },

        p(ctx, [dirty]) {

            if (dirty & /*count*/ 1) set_data(t1, /*count*/ ctx[0]);

            if (dirty & /*count*/ 1 && t3_value !== (t3_value = (/*count*/ ctx[0] === 1 ? "time" : "times") + "")) set_data(t3, t3_value);

            if (dirty & /*count*/ 1) set_data(t5, /*count*/ ctx[0]);

            if (dirty & /*doubled*/ 2) set_data(t7, /*doubled*/ ctx[1]);

        },

        i: noop,

        o: noop,

        d(detaching) {

            if (detaching) detach(button);

            if (detaching) detach(t4);

            if (detaching) detach(p);

            dispose();

        }

    };

}

function instance($$self, $$props, $$invalidate) {

    let count = 0;

    function handleClick() {

        $$invalidate(0, count += 1);

    }

    let doubled;

    $$self.$$.update = () => {

        if ($$self.$$.dirty & /*count*/ 1) {

            $: $$invalidate(1, doubled = count * 2);

        }

    };

    return [count, doubled, handleClick];

}

class App extends SvelteComponent {

    constructor(options) {

        super();

        init(this, options, instance, create_fragment, safe_not_equal, {});

    }

}

export default App;

Svelte还在发展,目前的缺点也很明显,就是官方还不支持TypeScript,官方还不支持路由,扩展库不多。

对于这种结构编译型的框架,我觉得会是前端框架发展的方向。
因为要做代码结构转换,多支持TypeScript会比其他3大框架的工作量多得多,我想这也是为什么官方迟迟没有退出的原因。

现代前端框架发展至今,本文我还想总结出他们共性。

转自CSDN:https://blog.csdn.net/weixin_36330664/article/details/106022804

谈谈新的前端框架 Svelte 和现代前端框架的特点相关推荐

  1. 新兴前端框架 Svelte 从入门到原理

    在这篇文章中,我们将会介绍 Svelte 框架的特性.优缺点和底层原理. 本文尽量不会涉及 Svelte 的语法,大家可以放心食用.因为 Svelte 的语法极其简单,而且官方教程学习曲线平缓http ...

  2. js新框架 svelte

    文章目录 svelte框架介绍 参考 svelte框架介绍 简介:Svelte是一个客户端/服务器框架,它可以在构建时预先呈现JavaScript,并且可以改变我们开发的方式. 特点: Write l ...

  3. 前端框架Svelte放弃TypeScript,JS赢!

    根据 Svelte repo 中 "TS to JSDoc Conversion" PR 的描述,Svelte 团队将会从目前使用的 TypeScript 迁移到 JSDoc. 前 ...

  4. Vue应用框架整合与实战--前端开发生态圈

    向着阳光,我们意念坚定不移,相信未来属于我们! Javascript Article Article Javascript深浅拷贝 Javascript中的apply和call继承 Javascrip ...

  5. 如何挑选适合的前端框架(去哪儿网前端架构师司徒正美)

    前端框架不断推新,众多IT企业都面临着"如何选择框架","是否需要再造轮子"的抉择.去哪儿网前端架构师司徒正美分析了各主流行框架优劣点.适用场景,并针对不同规模 ...

  6. 从后端到前端的转变:如何选择框架?

    单页面应用程序(SPA)的异步JavaScript为改善Web应用程序的用户体验提供了绝佳的机会.CSS框架(如Bootstrap)使得开发人员能够在处理结构和行为时快速提供样式. 可惜的是,SPA和 ...

  7. 2019年几大主流的前端框架(UI/JS)框架

    如今的前端已经不再像以前一样就是简单的写写页面和调调样式而已,现在的前端越来越复杂,知识点越来越丰富. 要做WEB前端,就需要知道前端到底是什么,需要学习那些知识:前端至少要懂的三个部分:HTML,C ...

  8. 前端新宠 Svelte,呜呜,卷不动了

    这是一篇在掘金上看到的文章,vue后期可能借鉴Svelte,Svelte打包出来的包非常小,没有虚拟dom,Svelte 会监听顶层组件所有变量,一旦某个变量发生变化,就更新使用过该变量的组件.这就仅 ...

  9. 移动端python开发_python前端之移动端库、框架及自动化和优化

    目的:学习移动端场景下的js事件:制作移动端特效常用的js库:介绍移动端常用开发框架Bootstrap:介绍动态样式语言less.sass.stylus的基本使用. 移动端js事件 移动端的操作方式和 ...

最新文章

  1. 使用Base64加密URL
  2. OCCI读写Oracle Spatial的SDO_Geometry
  3. LZW算法PHP实现方法 lzw_decompress php
  4. java 微信请求_Java web微信请求拦截器(微信公众号开发)
  5. 01XC-1: 动态规划
  6. 逆向调试雷电思路总结
  7. HTMLElement对象
  8. C4d模型--电商广告海报三维模型
  9. php返回json套数组_教你PHP怎么不用框架写优雅的中小网站
  10. 一、数字图像处理分析与概述
  11. 5000在线的服务器选择,支持负载5000人10000人在线的服务器的配置及其网络要求!!...
  12. 一只特立独行的猪--当年明月,坚持的力量
  13. 自然数e这家伙怎么蹦跶出来的?
  14. 咕咚APP产品体验报告
  15. XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结。
  16. 在OpenCV里用arrowedLine画箭头图形
  17. C#.多线程 (一)多线程(异步模式)与单线程(同步模式)的应用与区别 举例
  18. 文献阅读-ICRA2020-自由运动下用于术中组织特征描述的自动组织扫描
  19. GITHUB设置代理——解决git clone下载过慢的问题
  20. 如何将OAK相机当作可移除背景的网络摄像头?

热门文章

  1. js 数字转为科学计数法
  2. 通达信欧奈尔RPS指标公式编写和设置方法(完全版)
  3. core dumped
  4. Excel VBA: 提取文本中的数字
  5. 最新软件测试学习资源(小白入门到精通)
  6. Nginx与F5的区别
  7. window7使用pip 安装 TensorFlow 2.0/1.9.0 CPU版本的说明
  8. 无线网络 - 并查集
  9. 河北科技大学计算机属于哪个学院,河北科技大学2020年河北省本科专业录取分数统计,计算机专业最高...
  10. JS+CSS3人物奔跑动画