挑戰“三大框架”的解決方案

来源:https://www.cnblogs.com/tanggoahead/archive/2023/05/09/17383591.html
-Advertisement-
Play Games

這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 為了讓頁面保活更加穩定,你們是怎麼做的? 我用一行配置實現了 Vue頁面保活是指在用戶離開當前頁面後,可以在返回時恢覆上一次瀏覽頁面的狀態。這種技術可以讓用戶享受更加流暢自然的瀏覽體驗,而不會被繁瑣的操作打擾。 為什麼需要頁面保活? 頁面 ...


最近這些年,隨著三大框架React、Vue、Angular版本逐漸穩定,前端技術棧的迭代似乎緩慢下來。

如果我們把目光拉伸到未來十年的視角,前端行業會出現哪些框架有可能會挑戰React、Vue、Angular呢?

嶄露頭角的 Svelte 應該是其中的選項之一。

簡介

Svelte 是一個構建 web 應用程式的工具。它被預測為未來十年可能取代React和Vue等其他框架的新興技術。

有一個關鍵的區別:Svelte 在 構建/編譯階段 將你的應用程式轉換為理想的 JavaScript 應用,而不是在 運行階段 解釋應用程式的代碼。這意味著你不需要為框架所消耗的性能付出成本,並且在應用程式首次載入時沒有額外損失。

你可以使用 Svelte 構建整個應用程式,也可以逐步將其融合到現有的代碼中。你還可以將組件作為獨立的包(package)交付到任何地方,並且不會有傳統框架所帶來的額外開銷。

發展趨勢

開發者滿意度

從2019年開始, Svelte出現在榜單中。2020年,Svelte在滿意度排行榜中超越了react,躍升到了第一位。在過去的兩年裡,也是碾壓三大框架的存在,還能與最新的 Solid 並駕齊驅(都是90%)。

開發者興趣度

在開發者興趣度方面,在過去的四年裡,Svelte 一直蟬聯了第一。

市場占有率

2020年,Svelte 的市場占有率從第6名躍升到第4名,僅次於 React、Angular、Vue 老牌前端框架。


隨著 Svelte 在社區里慢慢流行起來,它的占有率還會提升。

在最新的《State of JS survey》中,Svelte 被預測為未來十年可能取代React和Vue等其他框架的新興技術。

Svelte 特點

No Runtime —— 無運行時代碼

React 和 Vue 都是基於運行時的框架,當用戶在你的頁面進行各種操作改變組件的狀態時,框架的運行時會根據新的組件狀態(state)計算(diff)出哪些DOM節點需要被更新,從而更新視圖。

而 Svelte 會在編譯階段將代碼編譯到更加貼近dom操作的代碼。或者說,Svelte 生成的是命令式的dom創建過程,直接操作Dom。

Less Code —— 更少的代碼

我們直接來看官網的例子:


實現的功能也很簡單,就是兩個Input的值求和,然後展示出來。圖中是用svelte編寫的代碼。 看下 React 書寫的版本:

import React, { useState } from 'react';

export default () => { 

    const [a, setA] = useState(1); 
    const [b, setB] = useState(2); 
    function handleChangeA(event) { setA(+event.target.value); } 
    function handleChangeB(event) { setB(+event.target.value); }

    return ( 

       <div> 
          <input type="number" value={a} onChange={handleChangeA}/> 
          <input type="number" value={b} onChange={handleChangeB}/> 
          <p>{a} + {b} = {a + b}</p> 
       </div> 

    );

}

再來看下 Vue 版本:

<template> 

    <div> 
       <input type="number" v-model.number="a"> 
       <input type="number" v-model.number="b"> 
       <p>{{a}} + {{b}} = {{a + b}}</p> 
   </div> 

</template> 

<script> 

    export default { 
       data: function() { 
          return { a: 1, b: 2 }; 
       } 
    }; 

</script>

三者對比:

框架名稱 svelte react vue
demo字元數 145 445 263

單純從代碼字元數上,Svelte比Vue和React少。但就此得出說svelte的編碼體積更小,這樣是不對的。我們一起來看下編譯後的對比:

框架名稱 svelte react vue
體積 1.6k 22k 42k

從上述對比中可以看出,svelte 編譯後的體積很少,包體積1.6k,對於一般中小型項目而言,整體運行的代碼(編譯後的代碼+包體積)還是比較小的,所以可以說svelte項目的代碼較小。

PS: 對於大型項目而言,因為svelte隨著業務的進行,代碼編譯產物陡峭,大型項目體積並不會比react、vue等小,因此需要辯證看待。

svelte 生成的是命令式的dom創建過程,虛擬 dom 的框架生成的是虛擬 dom 結構創建的過程(vdom 渲染函數)。在基於虛擬 DOM 的框架里,虛擬dom到真實dom的轉換過程,被封裝在運行時里,所以每個組件虛擬 dom 創建過程僅僅是數據結構的表述,更為緊湊,代碼產物也就比較少。

Hight-Performance ——高性能

在Virtual Dom已經是前端框架標配的今天, Svelte 聲稱自己是沒有Virtual Dom加持的, 那性能如何呢?

Jacek Schae 在《A RealWorld Comparison of Front-End Frameworks with Benchmarks》中用主流的前端框架來編寫 RealWorld 應用,使用 Chrome 的Lighthouse Audit測試性能,得出數據是Svelte 略遜於Vue, 但好於 React。


Svelte 性能還不錯,至少沒有我們預期的那麼糟糕。

PS:sveltedom 是把數據和真實dom之間的映射關係,在編譯的時候就通過AST等算出來,保存在p函數中。p函數就是一堆“if(...){...}”判斷,直接保證dom的更新。同時,這也說明“如果項目中涉及了dom操作越多,那這個p函數就越大,編譯後的代碼提交就會增大”。

其他

本文沒有涉及 Svelte 的語法,且 Svelte 的語法極其簡單,官方教程學習文檔也比較詳細,相信大家很快就會上手語法的,這裡就不做官網搬運工了。附上地址供大家參閱。

官方地址
https://www.sveltejs.cn/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 業務場景 一般在項目開發中會有很多的統計數據需要進行上報分析,一般在分析過後會在後臺展示出來給運營和產品進行分頁查看,最常見的一種就是根據日期進行篩選。這種統計數據隨著時間的推移數據量會慢慢的變大,達到百萬、千萬條數據只是時間問題。 瓶頸再現 創建了一張user表,給create_time欄位添加了 ...
  • 隨著之家3D虛擬化需求的增加,各產品線使用Unity引擎的項目也越來越多,新老項目共存,代碼維護成本也隨之增加。代碼質量參差加之代碼規範仍沒有完全統一產生高昂學習成本進一步加重了項目維護負擔。 為應對這些問題,我們決定藉助主機廠數科產品線銷冠神器VR版本大升級為契機,開發一套移動端通用Unity代碼... ...
  • 上一篇我介紹瞭如何在VSCode Webview中實現點擊鏈接下載圖片或文件,本文介紹如何在預設瀏覽器中打開一個新的頁面。 在瀏覽器中,如果要實現打開一個新的頁面有許多種不同的方法,例如: window.open("https://www.cnblogs.com/jaxu", "_blank"); ...
  • 大家好,我是DOM哥。 圖譜年年有,今年我來盤! 之前已經盤完了 Vue 的技術圖譜,今天來盤 React 的。不管你是資深 React 用戶,還是剛入門想學習 React 的小白,相信都能幫助到你 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 今天有一個需求,點擊選中某個英文單詞,然後對這個單詞做一些處理,例如高亮背景、查看一些詳細信息等等,今天簡單實現了一下,效果如下:(支持移動端,chrome和sarafi瀏覽器均能正常使用。語言🚀 vue3 + typescript) ...
  • 初識nodejs 19年年底一個偶然的機會接到年會任務,有微信掃碼登錄、投票、彈幕等功能,於是決定用node 來寫幾個服務,結果也比較順利。 當時用看了下koa2的官方文檔,知道怎麼連接資料庫、怎麼映射表實體,怎麼處理http,怎麼處理異常等,就可以直接寫起來了。從應用層面上來說 nodejs 入門 ...
  • jsonp 是前端一種用來解決網站跨域的技術,利用script標簽不受同源策略影響的特性引入一個非同源的js文件,並定義一個回調函數來接收數據,這樣就可以實現跨域獲取數據了,例如: 現在有一個鏈接返回的數據是這樣的: cb({ "name": "swk", "age": 18 }) 這是一個標準的j ...
  • JavaScript 中的記憶體泄漏是指程式中使用的記憶體不再被需要卻沒有被釋放,最終導致瀏覽器或者 Node.js 進程使用的記憶體越來越大,直到程式崩潰或者系統運行緩慢。 在 JavaScript 中,記憶體泄漏通常是由於變數、對象、閉包、事件監聽器等長期存在而沒有被釋放引起的。這些長期存在的引用會阻止 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...