精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Web 框架能解決什么問題?

開發 架構
本文將深入探討一些框架的共性技術特性,并介紹幾種不同的框架是怎樣實現這些特性的,我還要看一下使用這些框架的成本。

最近,我對對比框架和普通的 JavaScript 產生了濃厚的興趣。這始于我在一些自由職業項目中使用 React 時遇到的一些挫折,以及我最近作為規范編輯,對 Web 標準有了更多的認識。

我希望了解一下這些框架的共性和差異,Web 平臺作為一種更精簡的選擇,能提供什么,以及它是否足夠。我的目標并非要抨擊這些框架,而是要了解成本和效益,找出有沒有其他選擇,甚至當我們決定采用框架時,我們也能從中吸取教訓。

在本系列文章的第一部分中,我將深入探討一些框架的共性技術特性,并介紹幾種不同的框架是怎樣實現這些特性的。我還要看一下使用這些框架的成本。

框架

我選取四種架構進行研究。React 是當今的主流框架,還有三個較新的競爭者,它們聲稱自己的工作方式與 React 不同。

  • React:“React 使創建交互式用戶界面變得不費力。聲明性視圖使你的代碼更可預測,更容易調試。”
  • SolidJS:“Solid 遵循與 React 相同的理念……但它的實現方式完全不同,放棄了使用虛擬 DOM。”
  • Svelte:“Svelte 是一種全新的構建用戶界面的方式……是一個在你構建應用時發生的編譯步驟。Svelte 不使用虛擬 DOM diffing 之類的技術,而是編寫代碼,當你的應用程序的狀態發生變化時,外科手術式地更新 DOM。”
  • Lit:“在 Web Components 標準的基礎上,Lit 增加了……反應性、聲明性模板,以及一些深思熟慮的特性。”

總結一下這些框架對其差異化的說法:

  • React 通過聲明式視圖使構建 UI 更容易。
  • SolidJS 遵循 React 的理念,但是采用了另一種技術。
  • Svelte 處理用戶界面采用了一種編譯時的方式。
  • Lit 使用現有的標準,并增加了一些輕量級的特性。

框架能解決什么問題?

框架自身也提及了諸如聲明性、反應性和虛擬 DOM 等詞。讓我們深入了解它們的含義。

聲明性編程

聲明性編程是一種范式,在這種范式中,邏輯被定義,而沒有指定控制流。我們描述需要的結果是什么,而不是我們會采取什么步驟。

在 2010 年左右,聲明性框架的早期,DOM 的 API 更加簡單,更加冗長。而使用命令式的 JavaScript 編寫 Web 應用程序則需要大量的模板代碼。這時,“模型 - 視圖 - 視圖模型”(model-view-viewmodel,MVVM)的概念開始盛行,當時具有劃時代意義的 Knockout 和 AngularJS 框架,提供了一個 JavaScript 聲明層,在庫內處理這種復雜性。

今天,MVVM 并不是一個廣泛使用的術語,它在某種程度上是舊術語“數據綁定”的變種。

數據綁定

數據綁定是一種聲明性的方式,用來表示數據如何在模型和用戶界面之間同步。所有流行的 UI 框架都提供了某種形式的數據綁定,它們的教程都以數據綁定的例子開始。

以下是 JSX(SolidJS 和 React)中的數據綁定:

function HelloWorld() {
const name = "Solid or React";

return (
<div>Hello {name}!</div>
)
}

Lit 中的數據綁定:

class HelloWorld extends LitElement {
@property()
name = 'lit';

render() {
return html`<p>Hello ${this.name}!</p>`;
}
}

Svelte 中的數據綁定:

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

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

反應性

反應性是一種聲明性的方式來表達更改的傳播。

如果我們能夠用一種聲明的方式來表示數據綁定,那么我們就必須要有一個使框架能夠傳播更改的高效方法。

  • React 引擎會把渲染的結果與之前的結果相比較,并將差異應用于 DOM 本身。這種處理更改傳播的方式,被稱為虛擬 DOM。
  • 在 SolidJS 中,這是以其存儲和內置元素更明確地完成的。例如,Show 元素將跟蹤內部的變化,而不是虛擬 DOM。
  • 在 Svelte 中,生成“active”代碼。Svelte 知道哪些事件會導致變化,它會生成直接的代碼,區分事件和 DOM 更改。
  • 在 Lit 中,反應性是通過元素屬性來實現的,基本上是依賴 HTML 自定義元素的內置反應性。

邏輯

如果框架為數據綁定提供了聲明性的接口,并且能夠實現反應性,那么就必須提供一些方法來表達一些傳統意義上的邏輯,這些邏輯是以命令的方式寫的。邏輯的基本構件是 “if” 和 “for”,而所有的主流框架都提供了這些構件的一些表達。

(1) 條件句

除了綁定數字和字符串等基本數據外,每個框架都提供了一個“條件”原語。在 React 中,它看起來如下所示:

const [hasError, setHasError] = useState(false);  
return hasError ? <label>Message</label> : null;

setHasError(true);

SolidJS 提供了內置的條件組件。

<Show when={state.error}>
<label>Message</label>
</Show>

Svelte 提供了 #if 指令:

{#if state.error}
<label>Message</label>
{/if}

在 Lit 中,你將在 render 函數中使用顯式三元運算:

render() {
return this.error ? html`<label>Message</label>`: null;
}

(2) 列表

另一個常見的框架基元是列表處理。列表是用戶界面的一個關鍵部分——如聯系人列表、通知等——要想高效工作,就必須有反應性,而不是在一個數據項發生變化時,對整個列表進行更新。

在 React 中,列表處理看起來像這樣:

contacts.map((contact, index) =>
<li key={index}>
{contact.name}
</li>)

React 使用特殊的 key 屬性來區分列表項,它確保整個列表不會在每次渲染時被替換。

在 SolidJS 中,使用了 for 和 index 內置元素:

<For each={state.contacts}>
{contact => <DIV>{contact.name}</DIV> }
</For>

在內部,SolidJS 將自身的存儲與 for 和 index 相結合,以確定在項目發生個更改時要更新哪些元素。它比 React 更清晰,使我們能夠避免虛擬 DOM 的復雜性。

Svelte 使用 each 指令,該指令根據其更新器被轉譯:

{#each contacts as contact}
<div>{contact.name}</div>
{/each}

Lit 提供了一個 repeat 函數,它的工作原理類似于 React 的基于鍵的列表映射:

repeat(contacts, contact => contact.id,
(contact, index) => html`<div>${contact.name}</div>`

組件模型

有一件事超出了本文的范圍,那就是不同框架中的組件模型,以及如何使用自定義 HTML 元素來處理它。

注意:這是一個很大的主題,我想在以后的文章里討論這個主題,因為這個主題會讓這篇文章變得太長。

成本

框架提供了聲明性的數據綁定、控制流原語(條件和列表),以及傳播更改的反應性機制。它們還提供了其他重要的東西,比如重用組件的方法,但這就是另一篇文章的主題了。

框架有用嗎?是的。它們帶給了我們所有這些方便的特性。但這是一個正確的問題嗎?使用框架需要付出一定的成本。讓我們來看一下這些成本。

包大小

在查看包大小時,我更愿意看到非 Gzip 的縮減大小。這個尺寸與 JavaScript 的 CPU 開銷有很大關系:

  • ReactDOM 大約是 120 KB。
  • SolidJS 大約是 18KB。
  • Lit 大約是 16KB。
  • Svelte 約為 2KB,但生成的代碼大小不同。

現在看來,在保持包大小上,現在的框架要優于 React。虛擬 DOM 要求使用很多 JavaScript。

構建

不知何故,我們習慣了“構建” Web 應用。如果不設置 Node.js 和 Webpack 這樣的捆綁器,不處理 Babel-TypeScript 啟動包中最近的一些配置更改,以及所有這些事情,就不可能啟動一個前端項目。

越是有表達力的框架,包大小就會變得更小,但構建工具和轉譯時間的負擔就越大。

Svelte 宣稱,虛擬 DOM 完全是一種開銷。我同意,但是可能像 Svelte 和 SolidJS 這樣的“構建”以及像 Lit 這樣的自定義客戶端模板引擎都只是單純的開銷嗎?

調試

在構建和轉譯過程中,需要付出的成本也是不同的。

我們在使用和調試 Web 應用程序時,所見到的代碼和我們所編寫的完全不一樣。我們現在依靠同樣品質的調試工具,逆向設計出一個站點,并把它和我們自己的代碼中的 bug 相關聯。

在 React 中,調用棧從來不是“你的”事情——React 會為你處理調度。這一特性在沒有 bug 的時候非常好用。但是,如果你試圖找出無限循環重現的原因,你將會陷入痛苦的境地。

在 Svelte 中,庫本身的包大小很小,但你要傳輸和調試一大堆神秘的生成代碼,這些代碼是 Svelte 對反應性的實現,根據你的應用需求定制。

Lit 并不需要進行大量的構建,但是要想有效地進行調試,你就必須熟悉其模板引擎。這也許是我對框架持懷疑態度的最大原因。

當你尋求自定義的聲明式解決方案時,你將面對更加困難的命令調試。本文中的示例采用了 TypeScript 來對 API 進行規范,但是該代碼本身并不需要轉譯。

升級

在本文中,我討論了四個框架,但是還有許多其他的框架,多得數不清(AngularJS、Ember.js 和 Vue.js,僅舉幾例)。你能指望框架、它的開發者、它的思想和它的生態系統在開發過程中為你工作?

除了修補自己的 bug 之外,還有一個更讓人沮喪的事情,就是必須為框架的錯誤找到變通方法。而且,還有一個更加令人沮喪的事情,那就是在沒有修改你的代碼的情況下,將框架升級為新的版本,會出現 bug。

誠然,瀏覽器中也有這樣的問題,但是這種問題一旦出現,就會影響到所有人,而且在大多數情況下,修復或者發布一個解決方案,都是迫在眉睫的。此外,本文提到的大部分模式都建立在成熟的 Web 平臺 API 之上,并不一定都需要采用尖端技術。

總結

我們對框架所要處理的核心問題有了更深刻的理解,并且著重于數據綁定、反應性、條件和列表。我們也對成本進行了討論。

在本系列的第二部分中,我們將會了解到,在沒有框架的情況下,我們是怎樣處理這些問題的,以及我們可以從中學習到什么。敬請關注!

原文鏈接:https://www.smashingmagazine.com/2022/01/web-frameworks-guide-part1/

責任編輯:趙寧寧 來源: 前端之巔
相關推薦

2024-12-27 15:28:01

CQRS架構方式

2022-06-29 07:49:42

云存儲架構DevOps

2020-06-15 08:06:25

ES數據

2019-04-26 13:01:16

ServiceMesh微服務架構

2021-07-16 06:56:50

邊緣計算分布式

2025-08-28 08:02:00

2020-05-22 10:02:43

Python語言編程

2021-10-16 12:52:17

Builder模式生成器

2021-05-11 10:56:07

DevOps開發工具

2011-11-30 15:28:32

在線協作系統

2024-11-04 10:28:08

2023-11-08 14:03:47

數據可視化數字化轉型

2014-09-28 10:28:59

Docker云計算

2024-12-09 09:30:00

適配器模式設計模式代碼

2020-11-02 13:25:45

Redis數據庫開源

2024-11-05 08:16:04

HTTP/3HTTP 2.0QUIC

2023-05-31 07:32:37

2013-12-18 10:09:12

SVCHOST進程Windows Upd

2020-03-23 07:15:35

物聯網IOT物聯網技術

2009-08-04 17:27:18

Actor模型
點贊
收藏

51CTO技術棧公眾號

国产精品免费小视频| 亚洲欧美日韩中文在线| av一区二区三区免费观看| 亚洲精品一区二区三区新线路| 亚洲狠狠婷婷| 一本色道久久88亚洲综合88| 网站在线你懂的| 国产精品yjizz视频网| 久久精品亚洲麻豆av一区二区 | 国产午夜在线播放| 欧美日韩一二| 亚洲福利视频在线| 成年人三级黄色片| 咪咪网在线视频| 亚洲免费在线观看| 欧美日韩精品免费在线观看视频| 国产免费一区二区三区最新不卡| 国产情侣久久| 欧美成人免费全部| 91资源在线播放| 国产劲爆久久| 91精品国产综合久久久久久漫画| 大肉大捧一进一出好爽视频| 中文在线免费| 国产精品人妖ts系列视频| 精品亚洲欧美日韩| 国产av无码专区亚洲a∨毛片| 久久久夜精品| 午夜精品www| 朝桐光av在线| 欧美激情国产在线| 国产亚洲视频在线| 亚洲一区二区乱码| 91精品啪在线观看国产手机| 欧美日韩黄色影视| 无码少妇一区二区三区芒果| 999精品网| 亚洲一级电影视频| 国产免费内射又粗又爽密桃视频| 91在线网址| 国产亚洲欧洲一区高清在线观看| 国产精品日韩欧美一区二区三区| 国产美女精品视频国产| 蜜臀av性久久久久av蜜臀妖精 | 亚洲性猛交xxxxwww| 久久精品女同亚洲女同13| 蜜桃精品视频| 欧美一区二区国产| 韩国三级与黑人| 电影中文字幕一区二区| 777午夜精品免费视频| 奇米影音第四色| 91精品店在线| 欧美日韩国产影片| 黄大色黄女片18第一次| 久久久免费人体| 欧美日韩国产小视频在线观看| 男女啪啪网站视频| 成人日韩在线观看| 在线亚洲+欧美+日本专区| 欧洲熟妇精品视频| 91av一区| 69久久夜色精品国产69蝌蚪网| 手机免费av片| 日本免费一区二区视频| 日韩精品一区二区在线观看| 中文字幕18页| 久久男人av| 亚洲美女在线看| 亚洲一区视频在线播放| 久久精品国产大片免费观看| 俺也去精品视频在线观看| 天天操天天操天天操天天操天天操| 91精品推荐| 欧美极品欧美精品欧美视频 | 91网免费观看| 日韩在线观看视频一区| 久久综合网色—综合色88| 欧美日韩精品综合| 日本电影在线观看网站| 成人欧美一区二区三区视频网页| 波多野结衣 作品| av毛片午夜不卡高**水| 91国产成人在线| 日本高清一区二区视频| 日韩精品亚洲专区在线观看| 日韩av在线免费观看一区| 国产精品密蕾丝袜| 综合av在线| 欧美性做爰毛片| 日批视频免费观看| 国产成人在线观看| 欧美日韩精品久久| 亚洲无线看天堂av| 一本色道久久综合精品竹菊| 日韩欧美理论片| 亚洲欧美日本伦理| 久久国产精品网站| 国产99免费视频| 成人免费毛片片v| 三级三级久久三级久久18| 怡红院av在线| 91国产免费看| 最近中文字幕无免费| 日韩一区电影| 777午夜精品福利在线观看| 一级黄色小视频| 91啪亚洲精品| 欧美亚洲色图视频| 国产精品久久久久77777丨| 精品国产露脸精彩对白| 91ts人妖另类精品系列| 亚洲一区不卡| www 成人av com| 中文日本在线观看| 欧美日韩亚洲一区二区| 亚洲性图第一页| 日韩精品91| 日本精品免费观看| 亚洲国产精品久久人人爱潘金莲| 中文字幕 久热精品 视频在线| 久操网在线观看| 韩国三级大全久久网站| 中文字幕久久久| 在线观看 亚洲| www.性欧美| 999久久欧美人妻一区二区| 国产全是老熟女太爽了| 日韩av自拍偷拍| 北岛玲heyzo一区二区| 欧美一区二区视频在线观看 | 91农村精品一区二区在线| 亚洲天堂第一区| 色综合久久久| 自拍偷拍免费精品| 高潮无码精品色欲av午夜福利| 不卡的av网站| 久青草视频在线播放| 国产亚洲字幕| 久久视频在线看| 91丨porny丨在线中文 | 国产一级爱c视频| 日韩在线视频一区二区三区| 久久亚洲成人精品| 91国偷自产中文字幕久久| 国产精品入口麻豆原神| 天堂网在线免费观看| 成人午夜国产| 国产精品一区二区三区久久久| 国产精品一级伦理| 色婷婷久久99综合精品jk白丝| 亚洲精品女人久久久| 亚洲欧美日韩精品一区二区| 农村寡妇一区二区三区| 免费看男女www网站入口在线| 欧美videos中文字幕| 精品少妇theporn| 成人高清免费观看| 好吊妞无缓冲视频观看| 丝袜av一区| 国产成人精品免高潮费视频| 国产午夜精品一区理论片| 欧美亚男人的天堂| 很污很黄的网站| 国产一区二区看久久| www.xxx麻豆| 欧美精品中文| 日韩免费在线免费观看| 国产视频网站在线| 欧美人伦禁忌dvd放荡欲情| www.97视频| 成人一区二区视频| 国产免费毛卡片| 日本精品黄色| 99精品国产一区二区| av免费不卡| 亚洲午夜小视频| 国产日本精品视频| 午夜电影网亚洲视频| 亚洲色成人网站www永久四虎| 蜜臀99久久精品久久久久久软件| 欧美日韩视频免费在线观看| 91国内精品| 国产精品高精视频免费| www红色一片_亚洲成a人片在线观看_| 精品国产成人系列| 日韩在线视频不卡| 亚洲人成网站影音先锋播放| 国产免费a级片| 日韩成人一区二区| 青青视频免费在线| 精品中文字幕一区二区三区av| 国产精品欧美亚洲777777 | 国产成人精品一区| 米奇精品一区二区三区| 欧美精品一区二区三区在线播放| 国产精品久久久久久人| 亚洲三级在线播放| 青青草成人免费视频| 久草这里只有精品视频| 91猫先生在线| 中文字幕亚洲精品乱码| 欧美日韩一区二区三区在线视频| 精品一区二区三区中文字幕在线 | av久久久久久| 欧美日韩在线二区| 国产一区免费视频| 国产精品亚洲欧美日韩一区在线 | 视频在线观看99| 完全免费av在线播放| 国产精品12p| 蜜臀91精品国产高清在线观看| 亚洲va欧美va国产综合剧情| 亚洲成人不卡| 久久久久五月天| 麻豆tv在线| 中文字幕日韩欧美在线视频| 视频污在线观看| 日韩精品一区二区三区在线播放| 国产裸体美女永久免费无遮挡| 午夜av一区二区| 国产女人被狂躁到高潮小说| 国产精品久久久久婷婷二区次| 国产麻豆天美果冻无码视频| 国产999精品久久| 亚洲自拍第三页| 另类的小说在线视频另类成人小视频在线 | 色婷婷国产精品久久包臀| 久久精品一级片| 亚洲欧美电影院| 欧美美女性生活视频| 久久精品视频一区二区| 波多野结衣有码| www.色精品| 亚洲av成人片无码| 粉嫩久久99精品久久久久久夜| 五月六月丁香婷婷| 九九九久久久精品| 超碰人人草人人| 美日韩一区二区| wwwwwxxxx日本| 另类人妖一区二区av| 五月婷婷丁香色| 蜜芽一区二区三区| 色呦色呦色精品| 激情欧美日韩一区二区| 在线观看日本www| 国产精品亚洲一区二区三区在线 | 久久综合伊人77777蜜臀| 日本高清中文字幕在线| 爱福利视频一区| h片在线播放| 欧美黑人狂野猛交老妇| 日韩少妇视频| 韩国精品美女www爽爽爽视频| 97在线视频免费观看完整版| 2019av中文字幕| 亚洲精品一级二级| 国产精品小说在线| av一级久久| 不卡一区二区三区视频| 国产精品zjzjzj在线观看| 精品久久久久久一区| 亚洲欧洲av| 一区不卡字幕| 欧美激情偷拍| 黄色一级视频在线播放| 玖玖视频精品| 深夜黄色小视频| 国产一区激情在线| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 国产5g成人5g天天爽| 成人午夜碰碰视频| 国产女主播喷水高潮网红在线| 中文av字幕一区| 可以直接看的黄色网址| 天天影视网天天综合色在线播放| 日韩电影在线观看一区二区| 欧美日本韩国一区二区三区视频| 性一交一乱一乱一视频| 日韩久久精品成人| 五月天婷婷在线视频| 久久久久久久久久久亚洲| 亚洲女同av| 91在线免费视频| 奇米777国产一区国产二区| 日韩一区二区三区高清| 欧美成人精品| 成人在线激情网| 国产精品456露脸| 亚洲区自拍偷拍| 亚洲综合一区二区| 波多野结衣不卡| 日韩欧美国产精品一区| 国产私人尤物无码不卡| 欧美激情一区二区三级高清视频 | 在线观看区一区二| www.久久综合| 一区二区中文字幕| 波多野结衣在线观看| 国产精品日韩在线一区| 精品久久ai电影| 综合色婷婷一区二区亚洲欧美国产| 亚洲国产日本| 在线一区二区不卡| 国产农村妇女毛片精品久久麻豆 | 日欧美一区二区| 亚洲女则毛耸耸bbw| 中文字幕在线一区免费| 久久艹免费视频| 日韩精品自拍偷拍| 日本中文在线观看| 国产97在线|亚洲| 荡女精品导航| 黄色一级视频播放| 免费人成网站在线观看欧美高清| 怡红院一区二区| 亚洲精品伦理在线| 亚洲中文字幕在线一区| 亚洲精品日韩欧美| 97人澡人人添人人爽欧美| 成人自拍性视频| 日韩在线综合| 国产一区视频免费观看| 91色porny在线视频| 久久视频免费在线观看| 日韩一区二区麻豆国产| 黄色网页在线免费观看| 国产精品狠色婷| 精品国产乱码久久久久久1区2匹| 欧美极品欧美精品欧美| 成人午夜激情视频| 欧美日韩一级大片| 91精品国产综合久久小美女| 日本中文字幕伦在线观看| 国产精品久久久久久久久久尿| 亚洲精华一区二区三区| 无码精品a∨在线观看中文| 成人综合在线观看| 久久久久久久福利| 欧美第一区第二区| 国产精品69xx| 国产女人水真多18毛片18精品| 欧美99在线视频观看| 欧美性受xxxx黒人xyx性爽| 亚洲手机成人高清视频| 国产精品九九九九| 欧美成人黄色小视频| 九色精品蝌蚪| 国产女主播av| 成人免费不卡视频| 日韩成年人视频| 日韩国产一区三区| 午夜影院在线观看国产主播| 欧美精彩一区二区三区| 麻豆91精品| 欧美性受xxxx黑人| 欧美另类一区二区三区| 黄色网页在线播放| 国产精品av一区| 国产一区二区三区成人欧美日韩在线观看| 伊人网综合视频| 日本精品一区二区三区高清| 韩国中文字幕2020精品| 国产精品亚洲欧美导航| 国产国产精品| 波多野结衣三级视频| 精品久久久久久亚洲国产300 | 国产精品chinese在线观看| 黄色av网址在线播放| 国产人成一区二区三区影院| 一级做a爱片久久毛片| 九色精品美女在线| 日韩欧美中文字幕电影| 黄色国产小视频| 自拍偷拍亚洲激情| 亚洲男人第一天堂| 国产成人91久久精品| 99久久亚洲精品| 国产一线在线观看| 欧美亚洲高清一区二区三区不卡| 二区在线播放| 久久99精品久久久久久久青青日本 | 亚洲欧洲在线观看av| 亚洲精品一区二区三区蜜桃 | 欧州一区二区三区| heyzo亚洲| 国产精品欧美一区二区三区| 亚洲成人77777| 国产精品大片wwwwww| 欧美黄色免费| avhd101老司机| 精品日本一线二线三线不卡| 欧美日韩精品免费观看视完整| 欧美亚洲视频一区| 91免费观看视频在线| 97视频免费在线| 青草成人免费视频| 你懂的国产精品| 日本一区二区视频在线播放|