2024前端框架年度总结报告(二):新生qwik+solid和次新生svelte+Astro对比 -各自盯着前端的哪些个痛点 - 前端的区域发展差异

引言

2024年,前端开发依然是技术领域的热点之一。随着 Web 应用的日益复杂,前端框架的更新换代也加速了。尽管 React、Vue 和 Angular 老牌框架年度总结 等“老牌”框架仍然占据着主流市场,但一些新兴的框架在不断挑战这些“巨头”的地位,它们带来了更加高效、灵活的开发体验,特别是在性能优化、开发效率和用户体验方面。

本篇文章将对 2024 年新生和次新生的前端框架进行详细对比,分析这些框架如何针对前端开发中的常见痛点提供创新解决方案。

新生框架:Qwik 和 Solid.js

1. Qwik:专注性能的“零 JavaScript”框架

star 20.9k 最新版本2.0-alpha

Qwik 是一个刚刚崭露头角的前端框架,特别适合用于构建超高性能的 Web 应用。它的核心卖点是 零 JavaScript 初始加载,这使得用户在首次访问时几乎不需要等待 JavaScript 加载,页面可以在浏览器中直接渲染。

痛点解决:

  • 首次加载慢:传统框架通常会在页面加载时执行大量的 JavaScript 来初始化组件。Qwik 通过 懒激活(Lazy Hydration)技术,只有在用户与页面交互时才会加载相应的 JavaScript,显著提升首次加载速度。
  • 大规模应用的性能瓶颈:Qwik 使用 细粒度懒加载 来加载 JavaScript,仅在必要时加载相关代码块,避免了传统框架的庞大 JavaScript 文件。

适用场景:

  • Qwik 特别适合用于构建 内容密集型、交互性较少的静态页面,例如博客、产品展示页面等。
  • 对于需要高 SEO 性能快速响应时间 的应用,Qwik 是一个理想的选择。

Qwik 示例:

import { component$, useStore } from '@builder.io/qwik';

export const Counter = component$(() => {
  const state = useStore({ count: 0 });

  return (
    <div>
      <p>计数器: {state.count}</p>
      <button onClick$={() => state.count++}>增加</button>
    </div>
  );
});

Qwik 采用 懒激活,只有在用户点击按钮时才加载 onClick$ 相关的 JavaScript 代码。

官网加载数据(shift+F5强刷新):
298 次请求
已传输163 kB
1.4 MB 条资源
完成:1.5 分钟
DOMContentLoaded:569 毫秒
加载:754 毫秒

初始化加载速度在569ms内完成


2. Solid.js:纯渲染效率的极致追求

star 32.9k 最新版本 1.9

Solid.js 是一个比 Qwik 稍微成熟的框架,尽管它依然被视为“次新生”,但它的设计理念和性能表现无疑令人震撼。Solid.js 聚焦于 声明式 UI最小化渲染开销,采用了类似 React 的组件化开发模式,但在内部使用了更为精细的 编译时优化

痛点解决:

  • 虚拟 DOM 的性能瓶颈:React 和 Vue 等框架通常依赖虚拟 DOM 来优化更新性能,但这也会引入一些额外的性能开销。Solid.js 去除了虚拟 DOM,通过直接操作 DOM 节点来实现 高效的渲染,使得它的更新速度比 React 更快。
  • 更新渲染的同步性:Solid.js 采用了更加高效的响应式编程模型,能够使数据更新与 UI 渲染更加 紧密同步,避免了传统框架中 渲染不一致 的问题。

适用场景:

  • Solid.js 非常适合用于 需要高度响应式和复杂交互的应用,如动态数据展示的仪表盘、实时消息推送、游戏等。

Solid.js 示例:

import { createSignal } from 'solid-js';

const Counter = () => {
  const [count, setCount] = createSignal(0);

  return (
    <div>
      <p>计数器: {count()}</p>
      <button onClick={() => setCount(count() + 1)}>增加</button>
    </div>
  );
};

export default Counter;

Solid.js 采用 响应式编程,通过 createSignal 实现状态管理和组件更新,直接操作 DOM 来避免虚拟 DOM 的开销。

官网强刷新数据:
32 次请求
已传输459 kB
1.3 MB 条资源
完成:12.45 秒
DOMContentLoaded:1.18 秒
加载:1.21 秒

可以明显看到首次加载和显示的时间慢一点,其实网络情况差不多,但是qwik的懒加载更多

3 热度对比

谷歌趋势,qwik
在这里插入图片描述
区域热度- 中俄solid关注高于qwik
在这里插入图片描述

总的来说,solidjs的关注度是高于qwik,尤其国内,大概率是应用场景的差异
solid.js相对来说比较稳定,但qwik商业化支持比较好,后者ssr和性能表现优秀

次新生框架:Svelte 和 Astro

1. Svelte:编译型框架的创新

虽然 Svelte 并不算是 2024 年发布的新框架,但它的影响力不断扩大。与 React、Vue 等框架不同,Svelte 采用 编译时框架 的设计,即在编译阶段将组件转换成原生的 JavaScript 代码,减少了运行时的开销。

痛点解决:

  • 运行时性能差:传统框架需要在浏览器中执行 JavaScript 代码,导致页面加载和渲染性能受限。Svelte 将这些工作提前到编译阶段,使得生成的代码运行时非常轻量和高效。
  • 复杂的状态管理:Svelte 通过 声明式的反应性(reactivity)机制,使得状态管理非常简洁而直观,减少了不必要的 useStateuseEffect 等复杂操作。

适用场景:

  • Svelte 非常适合用于 小型和中型项目,尤其是那些 不需要大型生态系统 支持的应用。对于需要高度响应性、简洁 API 的应用,Svelte 是一个非常不错的选择。

Svelte 示例:

<script>
  let count = 0;
</script>

<p>计数器: {count}</p>
<button on:click={() => count++}>增加</button>

Svelte 的核心特点是它将 所有状态管理和更新逻辑 通过编译器处理,生成的 JavaScript 代码非常简洁且高效。


2. Astro:静态站点生成的未来

Astro 是一个相对较新的框架,专注于 构建静态网站。Astro 的最大亮点在于它可以与多种前端框架(如 React、Vue、Svelte)结合使用,但它的默认行为是 无 JavaScript 的页面,只有在需要时才加载 JavaScript,最大化提升性能。

痛点解决:

  • 冗余的 JavaScript:Astro 可以与多种前端框架搭配使用,但 只在需要时加载 JavaScript,避免了传统 SPA 中一次性加载大量 JS 文件的情况,从而实现了 快速加载和极致性能
  • 静态站点的灵活性:Astro 提供了简单的 API 来生成静态内容,同时支持动态功能,这使得它成为构建 内容密集型网站(如博客、电商网站)的理想框架。

适用场景:

  • Astro 是 构建静态内容丰富的站点(如个人博客、产品展示页、营销网站)的理想选择,同时也支持与 React、Vue 等现代框架的无缝集成。

Astro 示例:

---
import Counter from './components/Counter.astro';
---

<html>
  <body>
    <h1>欢迎来到我的网站</h1>
    <Counter />
  </body>
</html>

Astro 允许你在一个页面中使用 不同的框架组件,比如 React、Vue、Svelte 等,而这些框架的 JavaScript 只有在必要时才会加载,最大限度地优化了性能。


总结:如何选择适合的框架?

在 2024 年,前端框架的创新使得开发者有了更多选择。然而,这些框架针对的痛点各不相同,选择框架时要考虑以下几点:

  • 性能优先:如果你的应用需要极致的性能,Qwik 和 Solid.js 都是值得考虑的选择。Qwik 的零 JavaScript 初始加载和 Solid.js 的虚拟 DOM 替代方案都能有效提升应用的响应速度。
  • 开发效率:如果你更看重开发效率,Svelte 和 Astro 可能会更合适。Svelte 的编译时优化和 Astro 的静态网站生成能力都能减少开发时的复杂度和维护成本。
  • 静态站点:如果你主要构建静态站点,Astro 可能是你的最佳选择,它支持多种框架并且能够轻松生成无 JavaScript 的快速

我打算出一点qwik的实践文章,并做点benchmark的东西,自己的主站也打算基于此,同时打算做的lowcode框架也用qwik+webcomponent做吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/928910.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多模态大语言模型的对比

简介 文章主要对比了包括 VideoLLaMA 2 、CogVLM2-video 、MiniCPM-V等模型 目前主流的多模态视觉问答大模型&#xff0c;大部分采用视觉编码器、大语言模型、图像到文本特征的投影模块 目录 简介1. VideoLLaMA 21.1 网络结构1.2 STC connector具体的架构 2. MiniCPM-V 2.62.…

美畅物联丨智能监控,高效运维:视频汇聚平台在储能领域的实践探索

在当今全球能源格局不断变化的大背景下&#xff0c;对清洁能源的需求正以惊人的速度增长。储能项目作为平衡能源供需、提升能源利用效率的关键环节&#xff0c;其规模和复杂度也在不断攀升。在储能项目的运营管理过程中&#xff0c;安全监控、设备运维以及数据管理等方面面临着…

node.js实现分页,jwt鉴权机制,token,cookie和session的区别

文章目录 1. 分⻚功能2. jwt鉴权机制1.jwt是什么2.jwt的应用3.优缺点 3. cookie&#xff0c;token&#xff0c;session的对比 1. 分⻚功能 为什么要分页 如果数据量很⼤&#xff0c;⽐如⼏万条数据&#xff0c;放在⼀个⻚⾯显⽰的话显然不友好&#xff0c;这时候就需要采⽤分⻚…

消息中间件-Kafka2-3.9.0源码构建

消息中间件-Kafka2-3.9.0源码构建 1、软件环境 JDK Version 1.8Scala Version 2.12.0Kafka-3.9.0 源码包 下载地址&#xff1a;https://downloads.apache.org/kafka/3.9.0/kafka-3.9.0-src.tgzGradle Version > 8.8Apache Zookeeper 3.7.0 2、源码编译 打开源码根目录修改…

修复docker启动失败:Failed to start Docker Application Container Engine

配置了镜像源之后&#xff0c;运行sudo systemctl restart docker.service失败&#xff0c;提示让运行systemctl status docker.service或journalctl -xeu docker.service查看详细信息。 运行后者发现有如下日志&#xff1a; 红色区域是我设置的一个镜像源这个日志的意思就是…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-43

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…

遗传算法与深度学习实战(26)——编码卷积神经网络架构

遗传算法与深度学习实战&#xff08;26&#xff09;——编码卷积神经网络架构 0. 前言1. EvoCNN 原理1.1 工作原理1.2 基因编码 2. 编码卷积神经网络架构小结系列链接 0. 前言 我们已经学习了如何构建卷积神经网络 (Convolutional Neural Network, CNN)&#xff0c;在本节中&a…

react 路由鉴权

权限路由一般两种 1中接口中返回菜单 2 接口中返回权限&#xff0c;前端做匹配 一般都是那种结合&#xff0c;react中没有vue那种钩子函数如何做&#xff1f; 在项目中写一个高阶函数&#xff0c;在高阶函数中判断权限、是否登录等操作app.tsx或者man.tsx中使用 《AuthRouter》…

Ansys Maxwell:电机中的磁芯和磁体损耗

了解磁体中的涡流损耗和电动机叠片中的磁芯损耗 磁体中的涡流损耗会影响电动机的效率和热性能。当交变磁场在导电材料&#xff08;例如电动机中使用的磁铁&#xff09;内感应出电流回路时&#xff0c;就会发生这种现象。这些电流会产生热量&#xff0c;导致效率降低和磁热点。…

EtherCAT转ProfiNet网关实现西门子1200PLC与伺服电机连接的通讯案例

一. 案例背景 西门子1200PLC通过捷米特JM-ECTM-PN(EtherCAT转ProfiNet)网关将松下伺服电机(包括不限于型号MHMFO22D1U2M)或EtherCAT协议的其它设备或连接到ProfiNetPLC上&#xff0c;并在正常运行中支持EtherCAT协议。本产品可作为EtherCAT主站&#xff0c;做为西门子S7-1200系…

在 MacOS 上为 LM Studio 更换镜像源

在 MacOS 之中使用 LM Studio 部署本地 LLM时&#xff0c;用户可能会遇到无法下载模型的问题。 一般的解决方法是在 huggingface.co 或者国内的镜像站 hf-mirror.com 的项目介绍卡页面下载模型后拖入 LM Studio 的模型文件夹。这样无法利用 LM Studio 本身的搜索功能。 本文将…

AI开发:用模型来识别手写数字的完整教程含源码 - Python 机器学习

今天一起来学习scikit-learn 。 scikit-learn 是一个强大的 Python 机器学习库&#xff0c;提供多种分类、回归、聚类算法&#xff0c;适用于从数据预处理到模型评估的全流程。它支持简单一致的 API&#xff0c;适合快速构建和测试模型。 官方地址在这里&#xff0c;记得Mark…

快速上手 RabbitMQ:使用 Docker 轻松搭建消息队列系统

在现代的分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件、提高系统可扩展性和可靠性的重要工具。RabbitMQ 是一个广泛使用的开源消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;&#xf…

任务管理法宝:甘特图详解

在项目管理中&#xff0c;如何清晰、直观地展示项目的进度和任务分配&#xff1f; 甘特图作为一种经典的项目管理工具&#xff0c;提供了有效的解决方案。无论是团队合作还是个人项目管理&#xff0c;甘特图都能帮助你轻松追踪各项任务的进展。今天&#xff0c;我们将详细介绍…

Keil5配色方案修改为类似VSCode配色

1. 为什么修改Keil5配色方案 视觉习惯&#xff1a;如果你已经习惯了VSCode的配色方案&#xff0c;尤其是在使用ESP-IDF开发ESP32时&#xff0c;Keil5的默认配色可能会让你感到不习惯。减少视觉疲劳&#xff1a;Keil5的默认背景可能过于明亮&#xff0c;长时间使用可能会导致视…

电子病历静态数据脱敏路径探索

一、引言 数据脱敏&#xff08;Data Masking&#xff09;&#xff0c;屏蔽敏感数据&#xff0c;对某些敏感信息&#xff08;比如patient_name、ip_no、ad、no、icd11、drug等等 &#xff09;通过脱敏规则进行数据的变形&#xff0c;实现隐私数据的可靠保护。电子病历作为医疗领…

【Linux | 计网】TCP协议深度解析:从连接管理到流量控制与滑动窗口

目录 前言&#xff1a; 1、三次握手和四次挥手的联系&#xff1a; 为什么挥手必须要将ACK和FIN分开呢&#xff1f; 2.理解 CLOSE_WAIT 状态 CLOSE_WAIT状态的特点 3.FIN_WAIT状态讲解 3.1、FIN_WAIT_1状态 3.2、FIN_WAIT_2状态 3.3、FIN_WAIT状态的作用与意义 4.理解…

矩阵加法        ‌‍‎‏

矩阵加法 C语言代码C 语言代码Java语言代码Python语言代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输入两个n行m列的矩阵A和B&#xff0c;输出它们的和AB。 输入 第一行包含两个整数n和m&#xff0c;表示矩阵的行数和列数。1 <…

当大的div中有六个小的div,上面三个下面三个,当外层div高变大的时候我希望里面的小的div的高也变大

问&#xff1a; 当大的div中有六个小的div&#xff0c;上面三个下面三个&#xff0c;当外层div高变大的时候我希望里面的小的div的高也变大 回答&#xff1a; 这时候我们就不能写死六个小的div的高度&#xff0c;否则上下的小的div的间距就会变大&#xff0c;因为他们的高度…

C++打造局域网聊天室第一课:编程环境及准备知识

文章目录 前言一、使用环境二、基础知识1.MFC&#xff08;Microsoft Foundation Class&#xff09;2.API&#xff08;Application Programming Interface&#xff09;3.Unicode编码4.简单的比较5.WinSock6.多线程知识 总结 前言 C打造局域网聊天室第一课&#xff1a;编程环境及…