到前端的框架,目前主流最受歡迎三大框架莫屬于Vue、Angular、React。但是在面對90%的中小企業為什么會選擇使用vue呢?
【vue到底是什么呢】
首先Vue.js是一個輕巧、高性能、可組件化的MVVM庫,同時擁有非常容易上手的API。
MVVM分為三部分:View(頁面DOM)、ViewModel(監控者)、Model(數據)
所以簡而言之:Vue.js是一個構建數據驅動的系統 web 界面的漸進式框架。Vue.js 目標是通過盡可能簡單地實現 API 實現響應的數據綁定和組合的視圖組件。核心是一個響應的數據綁定系統。
【Vue具體的特點和優點有哪些呢】
響應式編程:在使用 Vue 實現 SPA,響應式編程是一套最核心的理念,整個系統根據數據對象對頁面進行反向渲染,讓站點避免結構混亂的問題。
組件化:一個站點由不同的多個組件組成, 當數據發生變化,最小顆粒的更新變化的部分,不會整個頁面發生變化,從而大大提高了性能。同時每個組件都有自己獨立的CSS、JS、模板(可理解為就是我們所熟悉的html)
vue的優勢
輕量級的框架+指令:它通過雙向數據綁定把 View 層和 Model 層連接了起來.實際的DOM封裝和輸出。
雙向數據綁定:當數據發生變化的時候,視圖也就發生變化,當視圖發生變化的時候,數據也會跟著同步變化。
組件化開發:就是把頁面拆分成多個組件,每個組件依賴的 CSS、JS、模板、圖片等資源放在一起開發和維護。
單頁面路由:單頁是把原本的多個頁面以組件的形式集成在一個頁面中,頁面跳轉時由vue路由到目標頁面,分別加載不同的組件,而頁面不會刷新,路由在更新
虛擬dom:在Vue的底層實現上, Vue將模板編譯成虛擬DOM渲染函數。結合Vue自帶的響應系統,在狀態改變時 ,Vue能夠智能地計算出重新渲染組件的最小代價并應到DOM操作上。
漸進式框架:用你想用或者能用的功能特性,不想用的部分功能可以先不用,來完成一個開發。
數據和結構的分離:最小粒度更新,vue每次更新會進行虛擬dom和屏幕已有dom對比,只更新有變化的部分,性能更高
插件化:插件的功能范圍沒有嚴格的限制,滿足大多插件可以和vue配合一起使用。
【Vue的缺點有哪些呢】
但是并不是vue.js 只有優點,而沒有缺點,任何東西都沒有十全十美的東西!
支持IE8以下
社區可能沒有Angular和React那么豐富
Vue 不缺入門教程,可是很缺乏高階教程與文檔。同樣的還有書籍
因為是單頁面應用,不利于seo優化
初次加載時耗時多
【vue與Angular、React的異同】
為什么在90%企業選擇vue.js,而不是Angular和React呢?
首先vue.js作者尤雨溪在開發vue.js的時候,不光借鑒了Angular和React的優勢,同時還保留開發了自己獨有的優點!快效地完成一個項目的開發,節約成本,這無疑對于中小企業來講是一大福利,節省了項目開發的周期以及開發成本!
那么我們來看一下vue 與 Angular和React到底有哪些相同點和不同點呢?
相同點
1、都支持指令,內部指令和自定義指令
2、都支持過濾器,內置過濾器和自定義過濾器
3、都支持雙向綁定
4、都不支持低端瀏覽器
不同點
1、Angular學習成本高,增加了依賴注入,Vue本身提供的API比較簡單,直觀
2、在性能上,Angular依賴對數據做臟檢查,所以watcher越多越慢
相同點
1、React采用了JSX語法,Vue也可使用特殊文件格式
2、都不內置Ajax,Router等功能的核心包,而是以插件的形式加載
3、在組件開發中都支持mixins的特性
4、利用虛擬DOM實現快速渲染
不同點
1、vue在模板中提供了指令,過濾器等,可以非常方便地操作DOM
2、渲染過程不同
3、vue實現了數據的雙向綁定,react數據流動是單向的
軟件系統發展到今天已經很復雜了,特別是服務器端軟件,涉及到的知識,內容,非常廣泛。這樣開發出完善健壯的軟件,對程序員的要求將會非常高。如果采用成熟,穩健的框架,那么一些基礎的通用工作,比如,事物處理,安全性,數據流控制等都可以交給框架處理,那么程序員只需要集中精力完成系統的業務邏輯設計,可以降低開發難度。
CSS 框架是一系列 CSS 文件的集合體,包含了基本的元素重置,頁面排版、網格布局、 表單樣式、通用規則等代碼塊,用于簡化web 前端開發的工作,提高工作效率。
其實有些朋友在做項目的時候,首先會選擇采用原始方法寫CSS。 在項目之中最讓人頭疼的就是類的命名,大多數人會根據功能去命名,這就造成了很多的冗余,相同的組件可能寫很多次。簡單舉一個例子,如下圖,個人中心的登錄界面。
很多人包括我剛開始的時候可能會選擇下面的類命名及布局方式,其通用性非常差
然而了解 Bootstrap 的人應該一眼就發現上圖就是一個 media 對象,無非一些小細節需要調整一下
為了讓文字與圖片居中對齊,我們可以使用 Bootstrap 的 .media-middle 的輔助類。如果在工作中還要根據需求自定義一些輔助類調整細節,當然這是一個移動端的例子,可以選擇移動端框架相關的 media 對象。
另外,在項目改版的時候,原始的方法的修改更是慘不忍睹,可以說是噩夢,冗長的 CSS 文件、混亂的功能劃分、類名、色值等等。最后也只能硬著頭皮一點一點修改。那一刻才體會到框架的意義以及前端工具的重要性。從工作中總結出,要么你可以熟練的使用某一個框架,要么就自己實現一個框架。
目前市面上前端框架主要分重量級與輕量級。重量級主要有 Bootstrap、Semantic、UIkit、Foundation 等,輕量級有 Pure、Skeleton、Miligram 等。經常關注前端動態的工程師會發現輕量級框架每年都層出不窮。在上面提到的主流輕量級框架之外還有很多類似的框架。我一直問自己,為什么要重復造輪子。經過研究,我發現這些輕量級框架其實大多都不能勝任工作需求,而且模仿的痕跡很重,基本上都或多或少的有 Bootstrap 的影子。那么這些輕量級框架有沒有意義呢?當然有。但是就我個人觀點,選擇輕量級框架反倒不如自己實現一個框架。因為大多輕量級框架就像是工作總結,是根據自己的業務需求實現的。所以大多不具有通用性。
前端框架的對比主要以 Bootstrap、Semantic、UIkit 為主,因為我個人感覺這三個最具有代表性,而且設計風格各有特色。Foundation 也有很多大公司在用,但以我個人觀點,無論是框架的易用性還是設計風格,相比其它幾個框架稍遜一籌。
其中 Bootstrap 和 Semantic 是面向對象的最好體現。
我先說一下 Bootstrap 的優勢,不是設計風格,不是模塊,不是特效,而是柵格,響應式柵格。Bootstrap 的柵格在與其它框架對比中占有絕對優勢,無論是柵格的劃分還是類名的風格都堪稱經典。如果讀者有心看一下 Bootstrap 的 Less 源文件,就會感受到 Bootstrap 對于響應式柵格的獨具匠心。其實在 Bootstrap 之前也有很多柵格方案,但是給人的感覺就是不夠利索,類名繁瑣不好記。而后來的很多框架,尤其輕量級的框架大多都有 Bootstrap 的影子。
下面我們通過對比幾個框架的柵格和按鈕來看一下類命名的策略。
Bootstrap
Semantic
FFoundation
UIkit
通過上面的對比,大家應該已經發現了這些框架的命名策略的不同。不可否認,Bootstrap 的命名最經典。
之前在網上看到有人討論關于框架的易用性,有人說 Bootstrap 的類名太長,然而通過上面幾個框架的對比,Bootstrap 的類并不繁瑣,而且用預處理器編寫框架時嵌套會比較靈活。
Semantic 的類名最簡潔,通過多個定語的修飾組成一句話,確實很有意思。但是過多的修飾類在編寫框架時會稍顯凌亂,有利有弊,因人而異吧。
Foundation 的柵格應該是最豐富的,策略上類似 Bootstrap,只是對公共屬性進行了拆分,大家也可以看看其中的具體細節。
UIkit 和 Pure 的策略相同,都加了前綴以區分其他框架,但是很顯然類名過于冗長了。我在編寫框架時也這樣想過,但是最終放棄了這種方式。
CSS 預處理器早已不是什么新鮮事,但是真正能夠在工作中運用的人有多少呢?熟練使用預處理器特性的人又有多少呢?
我之前工作的時候也沒有用預處理器,因為不用,所以也意識不到預處理器的好處。主要是覺得麻煩,因為要使用編譯器編譯一下,還不如直接寫 CSS 方便。但是在項目維護的時候就意識到預處理器的好處。后來在幾個項目中嘗試了預處理器,但是對于模塊化的寫法不太明確。預處理器作為工具,可以實現模塊化編寫 CSS,那么應該如何劃分模塊?另外,預處理器有很多特性,但是大多數人剛開始只用到變量和嵌套,其它的特性幾乎很少用到。我相信在自己動手實現一個輕量級框架的過程中,我們可以對預處理器有一個全面的了解。
目前流行的預處理器有 Less,Sass,Stylus 三個,選擇哪個完全是看自己的習慣。我最開始因為 Bootstrap 了解的 Less,但是因為習慣選擇了 Sass,其次 Sass 的功能要更全面一些。
無論是工作還是自己寫項目,都要搭建一個項目環境,也就是安裝一系列的 npm 包。相比刀耕火種的開發方式,使用工具開發的前期準備過程稍顯麻煩,然而一旦環境建好,后期的開發將會游刃有余。
Miligram 這個輕量級框架在 Github 上有很高人氣,但是說實話,用處并不大。不過這個框架的構建方式非常值得學習。雖然 CSS 對于很多人來說很簡單,但是真要去寫一個框架,還是非常棘手,這時候就需要借鑒一些優秀的框架。
編寫框架大致會用到的 npm 如下:
其實最主要的就是一個 node-sass,其它的都是輔助 CSS 文件的生成修改,大家感興趣的話可以去 npm 官網搜索這些插件,了解具體用法,如有不懂可以給我留言,我就不啰嗦了。
終于到了本篇文章的重頭戲。
大多數的輕量級框架只是 CSS 框架,不涉及 JS 部分,主要用于網頁的布局。我之所以打算自己編寫框架,是因為工作中重復的東西太多,通過框架可以很好的將這些零散組件整合到一起。另一方面,寫個小項目,學點新知識是一件趣事。
編寫框架的第一步就是要確定框架應該包含哪些模塊。因為是輕量級框架,所以模塊肯定沒有重量級框架那么全面,只有核心的一些組件。通過比較一些輕量級框架以及工作總結,大致常用的模塊包括柵格、媒體、按鈕、排版、表單、表格、面板以及輔助工具。
在常用的這幾個組件中,需要重點關注的是柵格、表單及面板,媒體組件也很重要,但是自由發揮的空間不大,我直接用了 Bootstrap 的媒體組件。
首先是類命名的層次與結構。類命名一直是我比較糾結的地方,剛開始工作的時候為了起一個見名知意又簡潔的類名總是抓耳撓腮。我在編寫框架時盡量避免與 Bootstrap 的類名重疊,但也不能完全避免。對比其他框架會發現,這種情況不可避免的會出現,畢竟類名會有一定的規律性以及層次性。在這一點上我比較喜歡 Bootstrap 的風格。下面和 Bootstrap 的表單做一個對比。
Bootstrap 的表單結構及類名
--div.form-horizontal
--div.form-group
--label.control-label
--input.form-control
Snack 的表單結構及類名
--div.form-row
--div.form-item
--label.form-label
--input.form-field
這個表單結構整體而言還算不錯,只是個別地方需要修改。有一些框架不給 input 等元素起類名,而是給父元素一個類名,個人對這種做法表示疑問,不起類名會降低框架編寫及使用的靈活性。
第二個策略是組件的修飾,比如按鈕及面板都存在多個語境(顏色、大小等),在這一點上我編寫框架時做了一些簡化,風格上有些 Semantic 的影子。
關于修飾類的策略是一個仁者見仁智者見智的問題,至于哪種方法更好,還需要在編寫框架的過程中摸索。
任何框架必須建立在柵格的基礎上才能靈活布局。我在前面提到了 Bootstrap 的精華就是柵格系統。柵格系統的編寫需要使用預處理器的循環功能,否則就要做無謂的重復勞動了。
柵格的使用和 Bootstrap 是一樣的,除了 12 列柵格外,10 列柵格以及均分柵格都要添加 .cols- 類
這個柵格并沒有響應式,只有一個斷點,小屏手機上的話所有柵格都會單行顯示。一方面,這樣的設計符合大多數輕量級框架的初衷;另一方面,我打算再寫一個針對移動端的框架,畢竟 Web 端和移動端的風格差距較大,按照業務需求分開會更好。不過最近我更改了源文件,為響應式預留了擴展方式。
在上面的命名策略中已經展示了 Snack 表單的基本結構,基本表單除了結構之外,樣式上并沒有太多可以討論的地方。在此說一下表單中 checkbox 的結構調整,先看一下 Bootstrap 的 checkbox 結構。
以上兩種結構不能有偏差,稍有偏差樣式就會錯亂,靈活性較差。其次我在想兩種結構能不能整合在一起,增強靈活性。想了很久,找到了方法,Snack 結構如下:
也可以將樣式直接加到 label 標簽上。另外,如果將 input 移到 label 標簽外也是沒有問題的,如下:
這種結構有一個好處,就是可以自定義
這種結構有一個好處,就是可以自定義 input 樣式,詳見下面的 CodePen 的 scss 文件。radio 的設置和 checkBox 是一樣的。
輔助類是一系列類的組合,比如字號大小、顏色值、padding、margin 以及左右浮動等。在一些 Bootstrap 搭建的后臺管理系統中尤為常見,這樣布局起來就會比較靈活。以下是一個邊框的輔助類。
對編程感興趣,想了解更多的編程知識,關注頭條號一起玩轉編程
更多編程資訊、干貨持續更新中~
者 | Tim Anderson
譯者 | 王強
策劃 | Tina
AI 大模型超全落地場景&金融應用實踐,8 月 16 - 19 日 FCon x AICon 大會聯訣來襲、干貨翻倍!
用于擴展 HTML 規范的 Htmx 項目發布了 2.0 版,這是該項目自 2020 年 11 月 發布 1.0 版以來的第一個主要版本。
Htmx 2.0 取消了對 Internet Explorer 的支持,并將擴展項移出了核心存儲庫,這樣每個擴展都可以按照自己的節奏發布更新了。新版本還刪除了一些已棄用的屬性,并將 HTTP DELETE 請求更改為使用參數。
新版還加入了一些新特性,包括 htmx.swap() 方法,該方法用新內容替換現有內容。它替換并改進了現有的內部 selectAndSwap() 方法。新版還改進了與 Web 組件、可重復使用的自定義元素的集成。
新版發布博文解釋說,為了避免破壞現有項目,1.x 版本將在 NPM(節點包管理器)中繼續標注為為“latest”,2.x 還是“next”,直到 2025 年 1 月 1 日為止。遷移到 2.0 版并不困難,但根據遷移指南,用戶可能需要做一些工作。
Htmx 是一種新的前端開發方法,側重于 HTML 而非 JavaScript(盡管它是作為 JavaScript 庫實現的)。Htmx 是從之前的一個項目 intercooler.js 發展而來的,后者是由 Htmx 發明者 Carson Gross 于 2013 年創建。這兩個項目的靈感都來自于這樣一種觀點:HTML 的特性一直因為行業對 JavaScript 框架的關注而被限制住了,而 JavaScript 框架的復雜性卻一直在增長。Gross 在 2020 年推出 1.0 版時寫道:“HTML 導向的 Web 開發范式被拋棄,不是因為超文本是個壞主意,而是因為 HTML 沒有足夠的表達能力。htmx 旨在解決這個問題,并讓你可以使用 Web 的原始超文本模型實現許多常見的現代 Web UI 模式。”
Htmx 現在支持包括異步請求、CSS 轉換和使用 HTML 屬性的 WebSocket 通信在內的特性。
盡管 Htmx 仍然不如 React 或 Angular 等框架那么出名,但它還是收獲了開發人員的贊賞。之前就有人提到,“我絞盡腦汁想找出一個沒有過度設計的 js 框架,找到 htmx 讓我非常高興”。另一個人則表示“Htmx 簡直太棒了。我們正用它來完成一個重大項目。”
Gross 參與了 Hacker News 上的討論并回答了問題。有人問他,是否在設法將 Htmx 的一些特性推向 HTML 標準?“我們正在與 Chrome 開發人員討論這些想法,我持謹慎樂觀的態度”,Gross 說。
Htmx 使用的是 XMLHttpRequest,而非更新、更強大的 fetch API。有人問,團隊是否考慮過改用 fetch?“看過了,不幸的是 fetch() 和 xhr 有一組不相交的特性(特別是 xhr 的上傳進度),所以我們決定不碰它”,Gross 回答道。
該項目在 GitHub 上根據 Zero-Clause BSD 許可開源。
原文鏈接:
https://devclass.com/2024/06/18/htmx-2-0-released-aims-to-replace-complex-javascript-frameworks-with-easily-understood-html-attributes/
聲明:本文為 InfoQ 翻譯,未經許可禁止轉載。
原文鏈接:Htmx 2.0 發布:用易懂的 HTML 屬性取代復雜 JavaScript 框架_架構_InfoQ精選文章
*請認真填寫需求信息,我們會在24小時內與您取得聯系。