首页 > 其他分享 >【学习】【Svelte】新一代前端框架Svelte会不会成为一地鸡毛呢?居然打破常规抛弃掉虚拟DOM

【学习】【Svelte】新一代前端框架Svelte会不会成为一地鸡毛呢?居然打破常规抛弃掉虚拟DOM

时间:2024-09-10 18:48:53浏览次数:10  
标签:框架 DOM 前端 JavaScript 开发者 组件 Svelte 打破常规

原创 前端欧巴

原本以为是Agular、React和Vue三足鼎立的前端框架新时代,居然有那么几个国外的前端框架在默默地攻城略地,比如:Svelte、Solid等前端框架。
今天我们重点来说一说Svelte这个前端框架。

一、Svelte的发展史

1.1 初创与实验阶段(2016-2017)

诞生背景:Svelte最初由Rich Harris于2016年开发。Harris是一位有着多年经验的前端开发人员,他在创建Svelte之前曾为The Guardian等知名公司工作。Harris对当时流行的前端框架(如React和Vue)在性能和体积方面的问题感到不满意,特别是这些框架在运行时需要花费大量时间解析和处理虚拟DOM,导致页面渲染延迟和性能瓶颈。

目标:为了解决这些问题,Harris决定进行一项实验性的开发,旨在通过编译器将组件转换为原生JavaScript代码,并直接插入到页面中,以提高性能和速度。

成果:最初的Svelte版本是一个简单的实验性项目,功能有限,但已经展示了其基于编译思想的潜力。

1.2 扩展与成熟阶段(2017-2018)

社区关注:随着第一阶段的成功,Svelte开始吸引越来越多的开发者关注。

功能扩展:Harris和其他贡献者开始扩展Svelte的功能,并加入了更多的生态系统支持,如路由管理和状态管理等。这使得Svelte逐渐成为一个更加成熟和完整的框架。

版本更新:在这个阶段,Svelte可能发布了多个小版本更新,以修复bug、优化性能和增加新功能。

1.3 快速发展阶段(2018年至今)

重大更新:自2018年以来,Svelte迅速发展,并发布了一系列重要的更新和改进。例如,Svelte 2.0引入了更好的错误处理和CSS支持,以及新的编译器API,使开发人员可以更轻松地自定义编译器行为。随后,Svelte 3.0更是使用了全新的编译器,使得框架更加快速和轻量级。

生态系统扩展:Svelte的生态系统也在逐渐扩展,出现了更多的插件和工具,如SvelteKit等,使得开发者能够更加方便地使用Svelte来构建Web应用程序。

社区增长:随着Svelte在开发者和社区中的增长,其知名度和普及度也在不断提高。越来越多的开发者开始选择Svelte作为他们的首选框架。

1.4 未来展望

持续优化:未来,Svelte可能会继续优化其编译器和生态系统,以提高性能和兼容性。

扩展功能:随着社区的不断壮大和技术的不断发展,Svelte可能会引入更多的新功能和改进,以满足开发者的需求。

提高开发者体验:Svelte可能会通过提供更好的文档、教程和工具来提高开发者体验,吸引更多开发者加入其生态系统。

总之,Svelte作为一种新兴的前端框架,在过去几年里取得了显著的发展成果,并展现出了巨大的潜力。
未来,我们可以期待Svelte在功能和生态系统方面的进一步扩展和完善。

二、Svelte何方神圣

Svelte是一种现代的前端框架,它以其独特的编译型特性和高性能在前端领域脱颖而出。
以下是对Svelte的深入了解:

2.1 Svelte简介

Svelte(通常写作Svelte.js或Svelte)是由Rich Harris开发的一种构建Web应用程序的新方法。
它不同于传统的前端框架,如React和Vue,后者在浏览器中运行时需要维护一个虚拟DOM,而Svelte则在构建过程中将组件代码转换为高效的原生JavaScript代码,从而实现了更小的体积和更快的性能。

2.2 特点与优势

编译型框架:

    Svelte在构建时将组件代码转换为高效的原生JavaScript代码,无需额外的运行时库,减少了代码体积和运行时开销。

    这种方式使得Svelte的应用具有更小的包大小和更快的加载速度,特别适用于需要快速加载的应用。

响应式编程:

    Svelte支持响应式声明,开发人员只需在组件内部声明变量并进行赋值,Svelte会自动追踪变量的变化并更新相关的视图。

    这种机制简化了状态管理,使得开发者能够以更简洁的方式处理数据变化。

组件化开发:

    Svelte鼓励使用组件化的开发方式,将应用程序拆分为可重用的组件,提高了代码的可维护性和复用性。

    组件可以包含HTML、CSS和JavaScript,使得开发者能够将各个方面的功能整合到一个文件中,便于管理和维护。

        import { cubicOut } from 'svelte/easing';

        export function expand(node, params) {
          const {
            delay = 0,
            duration = 400,
            easing = cubicOut
          } = params;

          const w = parseFloat(getComputedStyle(node).strokeWidth);

          return {
            delay,
            duration,
            easing,
            css: t => `opacity: ${t}; stroke-width: ${t * w}`
          };
        }

简洁的语法:

    Svelte的语法简洁明了,与传统的HTML、CSS和JavaScript紧密结合,使得开发者可以快速上手并高效开发。

    例如,使用{}包裹JavaScript表达式,通过on:eventname实现事件绑定等。
        <script>
          let count = 0;

          function handleClick() {
            count += 1;
          }
        </script>

        <button on:click={handleClick}>
          Clicked {count} {count === 1 ? 'time' : 'times'}
        </button>
高性能:

    由于编译时生成优化的原生JavaScript代码,Svelte的应用在性能方面表现优异。

    无需运行时进行虚拟DOM比对,减少了不必要的计算和资源消耗。

易学易用:

    Svelte的语法和概念相对简单直观,减少了学习新框架的难度。

    同时,Svelte社区提供了丰富的文档和教程资源,帮助开发者快速掌握和使用Svelte。

    <script>
      let name = 'world';
    </script>

    <h1>Hello {name}!</h1>

2.2 应用场景

Svelte适用于各种Web应用程序的开发,包括但不限于:

单页面应用(SPA):对于需要高性能和响应式的单页面应用,Svelte是一个理想的选择。

移动端应用:由于Svelte具有优秀的性能和体验,它也适用于移动端应用的开发。

动态网页:Svelte可以轻松处理动态内容更新和交互,为动态网页提供流畅的用户体验。

数据可视化:Svelte的响应式特性和高性能使得它成为数据可视化应用的良好选择。

2.4 开发与部署

Svelte的开发和部署过程相对简单。开发者可以通过官方推荐的SvelteKit或Vite等工具快速搭建项目。
SvelteKit是Svelte团队的官方应用程序框架,提供了路由、构建和部署等一站式解决方案。
而Vite则是一个现代化的前端构建工具,支持Svelte等多种前端框架。

在开发过程中,Svelte的组件化特性使得代码更加模块化和可维护。
开发者可以创建可重用的组件并在应用程序中组合它们以构建复杂的用户界面。
同时,Svelte还提供了丰富的API和插件支持,帮助开发者实现更多高级功能。

部署时,Svelte的应用可以轻松地与各种后端框架和数据库进行集成,实现全栈开发。
此外,Svelte还提供了丰富的构建和部署选项,如静态网站生成(SSG)和服务器端渲染(SSR)等,以满足不同场景下的需求。

2.5 总结

Svelte作为一种新兴的前端框架,以其独特的编译型特性和高性能在前端领域展现出巨大的潜力。
它简化了前端开发过程,提高了应用性能和用户体验。
随着Svelte社区的不断壮大和技术的不断完善,相信Svelte将在未来成为更多开发者的首选框架之一。

三、Svelte与其他主流框架的横向对比

下面是一个简化的对比表格,展示了Svelte、React和Vue三者的一些关键特性:


请注意,这个表格只是一个简化的对比,每个框架都有其独特的优势和适用场景。
选择哪个框架往往取决于项目需求、团队熟悉度以及特定情况下的性能要求。
此外,框架的选择也可能随着时间和社区发展而变化。

参考资料:

[1] Svelte中文官网:https://www.svelte.cn

[2] 发展史:https://wenku.baidu.com/view/f0df38e7aa8271fe910ef12d2af90242a995ab34.html?wkts=1725767783173

标签:框架,DOM,前端,JavaScript,开发者,组件,Svelte,打破常规
From: https://www.cnblogs.com/o-O-oO/p/18406594

相关文章

  • Svelte
    0x01概述(1)关于官网:英文版:https://svelte.dev/中文版:https://www.svelte.cn/介绍:开源的JavaScript框架增强型网络应用程序(Cyberneticallyenhancedwebapps)在编译时加载框架,无需运行时(runtime)特点:减少代码量无虚拟DOM提供响应式优点:内置动画专......
  • dominant和predominant的区别
    dominant是主宰,决定predominant是占据优势(这种优势通常是一时的)显然,占据优势并不一定能主宰一切。dominant语气更强。 来源:What'sthedifferencebetweendominantandpredominantinEnglish?-Quorameaning-Whatisthedifferencebetween"dominant"and"predomi......
  • JavaScript操作DOM节点
    1.操作DOM2.节点和节点的关系3.访问节点3.1使用getElement系列方法访问指定节点getElementById()、getElementsByName()、getElementsByTagName()3.2根据层次关系访问节点节点属性属性名称描述parentNode返回节点的父节点childNodes返回子节点集合,childNodes[i]fir......
  • .Learning.Domain-Driven.Design.
    《学习领域驱动设计》是一本深入探讨领域驱动设计(Domain-DrivenDesign,DDD)的书籍,旨在帮助读者理解并应用DDD的原则和实践。本书通过详细的章节结构和丰富的示例,从战略设计到战术设计,再到实际应用中的演变和关系,为读者提供了一条完整的学习路径。战略设计:本章介绍了如......
  • JQuery的DOM操作
    JQuery基础教程第四版 第五章:DOM操作方法的简单归纳使用JQuery的DOM操作实现以下功能   1.创建新元素   2.插入新元素   3.移动元素   4.包装元素   5.复制元素相关代码HTML文件 <!DOCTYPEhtml><htmllang="en"><head>  <meta......
  • react16之前的虚拟dom数据结构简单简介
    在react16之前的版本中,虚拟dom节点的数据结构看起来大致如下constVitrualDom={type:'div',props:{class:'title'},children:[{type:'span',children:'HelloConardLi'},{type:'ul',......
  • 系统设计思想之Domain驱动
    一、DDD从放弃到入门   希望了解一套微服务框架的;希望学习到新技术的;开发的系统不复杂,模块少而独立的;当前自己设计的架构已满足拓展性,可复用性,技术与业务复杂度已分离的;   这几类人群不是DDD的目标人群,建议尽早放弃,学习领域驱动设计能得到的收获概括起来大致如下:  ......
  • DOMContentLoaded 与 load 事件的区别
     DOMContentLoaded 事件:当文档DOM完全加载并解析完成时触发,但不包括样式表、图片、脚本等资源的加载。此时可以立即访问到页面上的所有元素,并且可以对它们进行操作。适用于大多数需要在页面加载后立即执行的操作,如绑定事件、修改DOM等。load 事件:当整个页面(包......
  • 探秘JavaScript深度领域:精通面向对象编程、虚拟DOM等核心技术
    JaScript作为前端开发的核心技术之一,凭借其强大的灵活性和广泛的应用场景,吸引了大量开发者深入学习。在探秘JaScript的深度领域时,面向对象编程和虚拟DOM等核心技术无疑是两个重要的学习方向。面向对象编程(OOP)在JaScript中扮演着重要角色。虽然JaScript是一种基于原型的语言,而非传......
  • 牛逼!Vue3.5的useTemplateRef让ref操作DOM更加丝滑
    前言vue3中想要访问DOM和子组件可以使用ref进行模版引用,但是这个ref有一些让人迷惑的地方。比如定义的ref变量到底是一个响应式数据还是DOM元素?还有template中ref属性的值明明是一个字符串,比如ref="inputEl",怎么就和script中同名的inputEl变量绑到一块了呢?所以Vue3.5推出了一个us......