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做吧

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 MacOS 上为 LM Studio 更换镜像源

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

Linux:基础开发工具

1. 软件包管理器 (1) 什么是软件包 在Linux下安装软件&#xff0c;主要有以下方法 1. 下载到程序的源代码&#xff0c;并进行编译得到可执行程序。 2. 软件包安装-- 获取rpm安装包&#xff0c;用rpm指令安装 3. 包管理器 yum(centos) apt/apt-get(ubuntu) 进行安装。&am…

并发框架disruptor实现生产-消费者模式

Disruptor是LMAX公司开源的高性能内存消息队列&#xff0c;单线程处理能力可达600w订单/秒。本文将使用该框架实现生产-消费者模式。一、框架的maven依赖 <!-- https://mvnrepository.com/artifact/com.lmax/disruptor --><dependency><groupId>com.lmax<…

「Mac玩转仓颉内测版42」小学奥数篇5 - 圆和矩形的面积计算

本篇将通过 Python 和 Cangjie 双语解决简单的几何问题&#xff1a;计算圆的面积和矩形的面积。通过这道题&#xff0c;学生将掌握如何使用公式解决几何问题&#xff0c;并学会用编程实现数学公式。 关键词 小学奥数Python Cangjie几何计算 一、题目描述 编写一个程序&#…

unordered系列容器模拟实现

1.哈希桶 hash.h #pragma once #include<iostream> #include<vector> using namespace std;template<class T> struct HashNode {HashNode(const T& data):_data(data),_next(nullptr){}T _data;HashNode<T>* _next; }; template<class K>…

基于Transformer的编码器-解码器图像描述模型在AMD GPU上的应用

Transformer based Encoder-Decoder models for image-captioning on AMD GPUs — ROCm Blogs 图像描述&#xff0c;即基于生成式人工智能&#xff08;GenAI&#xff09;自动生成简洁的图像文本描述&#xff0c;在现实世界中有着非常重要的应用。例如&#xff0c;图像描述可以为…

Linux命令行解释器的模拟实现

欢迎拜访&#xff1a;羑悻的小杀马特.-CSDN博客 本篇主题&#xff1a;Linux命令行解释器 制作日期&#xff1a;2024.12.04 隶属专栏&#xff1a;linux之旅 本篇简介&#xff1a; 主线带你用ubuntu版系统步步分析实现基础版本的shell&#xff1b;比如支持重定向操作&#xff0…

Language Translation with TorchText

前言&#xff1a; 利用torchtext类来处理一个著名的数据集&#xff0c;包含了一些英文和德文句子。利用该数据处理sequence-to-sequence模型&#xff0c;通过注意力机制&#xff0c;可以将德语翻译成英语。Torchtext&#xff1a;它是 PyTorch 生态系统中的一个库&#xff0c;主…

【Redis篇】 List 列表

在 Redis 中&#xff0c;List 是一种非常常见的数据类型&#xff0c;用于表示一个有序的字符串集合。与传统的链表结构类似&#xff0c;Redis 的 List 支持在两端进行高效的插入和删除操作&#xff0c;因此非常适合实现队列&#xff08;Queue&#xff09;和栈&#xff08;Stack…

11.爬虫

前言&#xff1a; 正则表达式的作用&#xff1a; 作用一&#xff1a;校验字符串是否满足规则 作用二&#xff1a;在一段文本中查找满足要求的内容 一.Pattern类和Matcher类&#xff1a; 1.Pattern类&#xff1a;表示正则表达式 a.因此获取Pattern对象就相当于获取正则表达式…

【Linux篇】权限管理 - 用户与组权限详解

一. 什么是权限&#xff1f; 首先权限是限制人的。人 真实的人 身份角色 权限 角色 事物属性 二. 认识人–用户 Linux下的用户分为超级用户和普通用户 root :超级管理员&#xff0c;几乎不受权限的约束普通用户 :受权限的约束超级用户的命令提示符是#&#xff0c;普通用…

【RDMA】RDMA read和write编程实例(verbs API)

WRITE|READ编程&#xff08;RDMA read and write with IB verbs&#xff09; &#xff08;本文讲解的示例代码在&#xff1a;RDMA read and write with IB verbs | The Geek in the Corner&#xff09; 将 RDMA 与verbs一起使用非常简单&#xff1a;首先注册内存块&#xff0c…

UE5 C++ 不规则按钮识别,复选框不规则识别 UPIrregularWidgets

插件名称&#xff1a;UPIrregularWidgets 插件包含以下功能 你可以点击任何图片&#xff0c;而不仅限于矩形图片。 UPButton、UPCheckbox 基于原始的 Button、Checkbox 扩展。 复选框增加了不规则图像识别功能&#xff0c;复选框增加了悬停事件。 欢迎来到我的博客 记录学习过…

洛谷P2670扫雷游戏(Java)

三.P2670 [NOIP2015 普及组] 扫雷游戏 题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n 行 m列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。玩…

如何加强游戏安全,防止定制外挂影响游戏公平性

在现如今的游戏环境中&#xff0c;外挂始终是一个困扰玩家和开发者的问题。尤其是定制挂&#xff08;Customized Cheats&#xff09;&#xff0c;它不仅复杂且隐蔽&#xff0c;更能针对性地绕过传统的反作弊系统&#xff0c;对游戏安全带来极大威胁。定制挂通常是根据玩家的需求…

概率论相关知识随记

作为基础知识的补充&#xff0c;随学随记&#xff0c;方便以后查阅。 概率论相关知识随记 期望&#xff08;Expectation&#xff09;期望的定义离散型随机变量的期望示例&#xff1a;掷骰子的期望 连续型随机变量的期望示例&#xff1a;均匀分布的期望 期望的性质线性性质期望的…

DICOM MPPS详细介绍

文章目录 前言一、常规检查业务流程二、MPPS的作用三、MPPS的原理1、MPPS与MWL2、MPPS服务过程 四、MPPS的实现步骤1、创建实例2、传递状态 五、总结 前言 医院中现有的DICOM MWL(Modality Worklist)已开始逐渐得到应用&#xff0c;借助它可以实现病人信息的自动录入&#xff0…

Secured Finance 推出 TVL 激励计划以及基于 FIL 的稳定币

Secured Finance 是新一代 DeFi 2.0 协议&#xff0c;其正在推出基于 FIL 的稳定币、固定收益市场以及具有吸引力的 TVL 激励计划&#xff0c;以助力 Filecoin 构建更强大的去中心化金融生态体系&#xff0c;并为 2025 年初 Secured Finance 协议代币的推出铺平道路。Secure Fi…

FPGA Xilinx维特比译码器实现卷积码译码

FPGA Xilinx维特比译码器实现卷积码译码 文章目录 FPGA Xilinx维特比译码器实现卷积码译码1 Xilinx维特比译码器实现2 完整代码3 仿真结果 MATLAB &#xff08;n,k,m&#xff09;卷积码原理及仿真代码&#xff08;你值得拥有&#xff09;_matlab仿真后代码-CSDN博客 MATLAB 仿真…

Linux 权限管理:用户分类、权限解读与常见问题剖析

&#x1f31f; 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。&#x1f31f; &#x1f6a9;用通俗易懂且不失专业性的文字&#xff0c;讲解计算机领域那些看似枯燥的知识点&#x1f6a9; 目录 &#x1f4af;L…