2017年前端框架、類庫、工具大比拼

来源:http://www.cnblogs.com/jiaoyu121/archive/2017/06/23/7071941.html
-Advertisement-
Play Games

相比於JavaScript開發人員的數量,目前JavaScript框架、類庫和工具的數量似乎更多一些。截至2017年5月,GitHub上的快速搜索顯示,有超過110萬個JavaScript項目。npmjs.org有50萬個可用的軟體包,每月下載量近100億次。 本文將會討論目前最為流行的客戶端Jav ...


相比於JavaScript開發人員的數量,目前JavaScript框架、類庫和工具的數量似乎更多一些。截至2017年5月,GitHub上的快速搜索顯示,有超過110萬個JavaScript項目。npmjs.org有50萬個可用的軟體包,每月下載量近100億次。

本文將會討論目前最為流行的客戶端JavaScript框架、類庫和工具以及它們之間的基本差異。也許本文無法告訴你哪個是最好的,但是最適合自己項目的,就是最好的。

類庫

類庫是一個有組織的功能集合。典型的類庫包括字元串處理、日期、HTML DOM元素、事件、Cookie、動畫、網路請求等功能。你可以自己實現一個函數,以便選擇該函數被調用時是否需要返回一個值。

類庫通常提供一種高級別的抽象方法,能夠幫助順利實現項目的細節部分。例如,Ajax通常依賴於XMLHttpRequest API,只需要幾行代碼就實現功能,只是瀏覽器之間存在細微的差異。類庫提供了更簡單的ajax()函數,因此開發者可以專註於更高級別的業務邏輯上。

類庫能夠使將開發時間縮短20%,開發者不必擔心細節實現。

但是也有缺點:

  • 類庫中的錯誤難以定位和修複

  • 開發團隊不能保證快速發佈補丁

  • 補丁程式可能會更改API,導致大量代碼必須更改

  • 學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入學習交流群
    343599877,我們一起學前端!

框架

框架是應用程式的骨架。它要求以特定的方式來進行軟體設計,在某些節點上實現自己的邏輯。框架通常提供了事件、存儲和數據綁定等功能。

框架通常提供了比類庫更高層次的抽象,幫助快速構建項目的前80%。

框架的缺點:

  • 如果你的應用程式超出了框架的範圍,最後20%可能會很難

  • 框架更新很困難

  • 核心框架代碼和概念很少更新

工具

工具會幫助開發工作,但卻不是項目的組成部分。工具包括構建系統、編譯器、轉譯器、代碼分割器、圖像壓縮器、部署機制等。

工具幫助實現一個更容易的開發過程。例如,對比於CSS,許多編碼者更喜歡Sass,因為它提供了代碼分離、嵌套、渲染時變數、迴圈和函數。瀏覽器不瞭解Sass / SCSS語法,因此在測試和部署之前,必須使用適當的工具將代碼編譯為CSS。

類庫、框架和工具的區別

類庫、框架和工具之間的區別很小。框架可以包括一個類庫,類庫可以實現類似框架的方法,項目中任何一種工具都是必不可少的。所以不需要明確的區分類庫、框架和工具。

JavaScript框架和類庫

以下是按照流行程度進行的排序:

jQuery

jQuery  
類型 類庫
網站 jquery.com
知識庫 github.com/jquery/jquery
當前版本 3.2.1
開發人員 jQuery團隊
發佈日期 2006年8月
大小 最小30kb
用途 通用
使用度 72.4%的網站

隨著WordPress、ASP.NET和一些其它框架的發佈,jQuery仍然是最常用的JavaScript類庫。它通過將CSS選擇器引入到DOM節點檢索加鏈來應用事件處理程式、動畫和Ajax調用,這徹底改變了客戶端的開發。

jQuery近年來備受青睞,對於需要少量JavaScript功能的項目來說,仍然是一個好選擇。

優點:

  • 分佈規模小

  • 學習曲線平緩,豐富的線上幫助

  • 簡潔的語法

  • 容易拓展

缺點:

  • 增加了原生API的速度開銷

  • 瀏覽器相容性不好,但已得到改善

  • 用法扁平

  • 一些行業反對使用

Lodash 和 Underscore

Lodash  
類型 類庫
網站 lodash.com/
知識庫 github.com/lodash/lodash/
當前版本 4.17.4
開發人員 John-David Dalton
發佈日期 2012年4月
大小 最小4kb – 24kb
用途 通用
使用度
Underscore  
類型 類庫
網站 underscorejs.org/
知識庫 github.com/jashkenas/underscore
當前版本 1.8.3
開發人員 Jeremy Ashkenas
發佈日期 2009年10月
大小 最小6kb
用途 通用
使用度

Lodash和Underscore在本節一起談論。它們提供了數百個功能性的JavaScript實用程式來補充原生字元串、數字、數組和其它原始對象方法。雖然兩個類庫之間有一些重疊,但是不太可能在一個項目中同時使用這兩個類庫。

雖然兩個類庫在客戶端使用率很低,但是卻可以在伺服器端的Node.js應用程式中使用這兩個類庫。

優點:

  • 小而簡單

  • 良好的文檔易於學習

  • 與大多數類庫和框架相容

  • 不擴展內置對象

  • 可以在客戶端或伺服器上使用

缺點:

  • 有些方法只在ES2015及更高版本的JavaScript中可用。

AngularJS 1.x

AngularJS  
類型 框架
網站 angularjs.org
知識庫 github.com/angular/angular.js
當前版本 1.6.4
開發人員 Google
發佈日期 2010年10月
大小 144KB
用途 單頁應用程式
使用度

Angular是框架(或MVC應用程式框架)類列表中的第一個。目前最流行的Angular版本是1.x,它使用雙向數據綁定擴展HTML,同時解耦了DOM操作和應用程式邏輯。

儘管版本2(現在是版本4!)已經發佈了,但是Angular 1.x仍在開發中。

優點:

  • 一些大公司正在使用的流行框架

  • 開發現代Web應用程式的解決方案

  • 是標準MEAN棧(MongoDB,Express.JS,AngularJS,NodeJS)的一部分,有許多文章和教程可用

缺點:

  • 學習曲線陡峭

  • 大的代碼庫

  • 無法升級到Angular 2.x

Angular 2.x(現在是Angular 4.x)

Angular  
類型 框架
網站 angular.io
知識庫 github.com/angular/angular.js
當前版本 4.1
開發人員 Google
發佈日期 2016年9月
大小 最小450kb
用途 單頁面應用
使用度

Angular 2.0於2016年9月發佈。這是一個完整的重寫,它引入了使用TypeScript創建的基於模塊化組件的模型。Angular 4.0於2017年3月發佈。

Angular 2.x與v1版本截然不同,也不與其它版本相容 – 也許Google應該給項目起一個不同的名字!

優點:

  • 開發現代Web應用程式的解決方案

  • 是標準MEAN棧的一部分,儘管只有少量的教程可用

  • 對於熟悉靜態類型語言(如C#和Java)的開發人員,TypeScript提供了一些優勢。

缺點:

  • 學習曲線陡峭

  • 大的代碼庫

  • 不能從Angular 1.x升級

  • 與1.x相比,Angular 2.x較難理解


  • 學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入學習交流群
    343599877,我們一起學前端!

React

React  
類型 框架
網站 facebook.github.io/react/
知識庫 github.com/facebook/react
當前版本 15.5.4
開發人員 Facebook和貢獻者
發佈日期 2013年3月
大小 21kb分鐘
用途 單頁應用程式
使用度

React是一個用於構建用戶界面的JavaScript類庫,也是去年最受關註的類庫。它專註於Model-View-Controller(MVC)開發的“View”部分,使用它可以輕鬆創建保留狀態的UI組件。它是實現虛擬DOM的首選類庫之一, 它的記憶體結構能夠有效地計算差異,頁面更新也更加有效。

統計顯示React的使用度似乎很低,因為它是在應用程式中使用而不是在網站。

優點:

  • 小巧,高效,快捷靈活

  • 簡單的組件模型

  • 良好的文檔和線上資源

  • 可實現伺服器端渲染

  • 目前受歡迎,經歷了快速增長

缺點:

  • 需要學習新的概念和語法

  • 構建工具很重要

  • 需要其它類庫或框架提供model和Controller部分

  • 與修改DOM的代碼和其它類庫不相容

瞭解更多關於React the ES6 Way

Vue.js

Vue.js  
類型 框架
網站 vuejs.org
知識庫 github.com/vuejs/vue
當前版本 2.0
開發人員 Evan You
發佈日期 2014年2月
大小 最小19kb
用途 單頁面應用
使用度

Vue.js是一個用於構建用戶界面的輕量級漸進框架。它提供了一個類似React的虛擬DOM驅動視圖層,可以與其它類庫集成,用於構建強大的單頁面應用。該框架是由之前在AngularJS工作過的Evan You創建的,他提取了AngularJS中自己喜歡的部分。

Vue.js使用HTML模板語法將DOM綁定到實例數據。Model是在數據改變時更新view的純JavaScript對象。

優點:

  • 可以快速使用,並且日益普及

  • 很容易提高高水平開發人員的滿意度

  • 依賴性小,性能好

缺點:

  • 一個較新的項目 – 風險可能會更大

  • 部分依賴開發人員進行更新

  • 相比於其它框架,資源較少

Backbone.js

Backbone.js  
類型 框架
網站 backbonejs.org
知識庫 github.com/jashkenas/backbone/
當前版本 1.3.3
開發人員 Jeremy Ashkenas
發佈日期 2010年10月
大小 最小8kb
用途 單頁面應用
使用度

Backbone.js是提供伺服器端框架中常見的MVC結構的最早客戶端選項之一。它唯一的依賴是Underscore.js。

Backbone.js聲稱是一個類庫,因為它可以與其它項目集成,但是我覺得大多數開發人員都認為它是一個框架。

優點:

  • 體積小,重量輕,複雜度低

  • 不添加HTML邏輯

  • 文件豐富

  • 採用了許多應用,包括Trello、WordPress.com、LinkedIn和Groupon

缺點:

  • 與AngularJS等其它框架相比,抽象度較低

  • 需要額外的組件來實現數據綁定等功能

  • 最新的框架已經不採用MVC架構了

Ember.js

Ember.js  
類型 框架
網站 emberjs.com
知識庫 github.com/emberjs/ember.js
當前版本 2.15.0
開發人員 Ember team
發佈日期 2011年12月
大小 最小95kb
用途 單頁面應用
使用度

Ember.js是基於Model-View-ViewModel(MVVM)模式的框架之一。它在單個包中實現模板化、數據綁定和類庫。

優點:

  • 為客戶端應用程式提供了單一解決方案

  • 開發人員可以立刻提高開發效率 – 它使用jQuery

  • 良好的向後相容性和升級選項

  • 採用了現代Web開發標準

缺點:

  • 大型分配式

  • 與其它正在向較小組件結構發展的框架相比,它十分的龐大

  • 學習曲線陡峭

Knockout.js

Knockout.js  
類型 框架
網站 knockoutjs.com
知識庫 github.com/knockout/knockout
當前版本 3.4.2
開發人員 Steve Sanderson
發佈日期 2010年7月
大小 最小59kb
用途 單頁面應用
使用度

Knockout.js是最早的MVVM框架之一,它確保了UI與底層數據保持同步,具有模板和依賴關係跟蹤。

優點:

  • 小而輕便,無依賴

  • 優秀的瀏覽器支持,可以支持到IE6

  • 良好的文檔資源

缺點:

  • 較大的項目可能變得很複雜

  • 發展已經放緩

  • 使用情況似乎在減弱

更多的框架和類庫

以下項目雖然不是特別流行,但值得考慮:

  • Polymer – 可以跨瀏覽器支持HTML5網頁組件的類庫

  • Meteor – 一個用於Web應用程式的全棧平臺

  • Aurelia  – 一種相對較新的,輕量級的跨平臺框架

  • Svelte – 一個將框架源代碼轉換為乾凈JavaScript的新項目

  • Conditioner.js  – 一個基於狀態自動載入和卸載模塊的類庫

工具:執行通用任務

構建工具自動執行各種Web開發任務,例如預處理、編譯、優化圖像、縮小代碼、代碼分析和運行測試等。任務可以在一個可執行包中統一管理。

目前最受歡迎的工具如下:

Gulp.js

Gulp.js  
網站 gulpjs.com
知識庫 github.com/gulpjs/gulp
當前版本 3.9.1
每月下載 300萬

雖然Gulp不是第一個任務執行工具,它卻很快成為了最受歡迎的。Gulp使用易於閱讀的JavaScript代碼,將源文件載入到流中,併在將數據輸出到構建文件夾之前,通過各種插件管理數據。在任何其它選項之前檢查Gulp.js是簡單、快速和有趣的。

NPM

NPM  
網站 npmjs.com
知識庫 github.com/npm/npm
當前版本 4.5.0
每月下載 300萬

npm是Node.js包管理器,但其腳本工具可用於運行通用任務。對於具有少量依賴關係的簡單項目來說,這是一個很好的選擇。然而,更複雜的任務可能會變得不太適用。

Grunt

Grunt  
網站 gruntjs.com
知識庫 github.com/gruntjs/grunt
當前版本 1.0.1
每月下載 200萬

Grunt是第一批被大規模採用的JavaScript任務執行工具之一,但其速度和複雜的JSON配置卻導致了Gulp的興起。現在這些問題已經得到瞭解決,Grunt仍然是一個受歡迎的選擇。

工具:模塊綁定

多個JavaScript文件的管理已經成為了一件繁瑣的事情。預設情況下,瀏覽器文件不會被編譯,因此其依賴關係必須以適當的順序進行載入或連接。雖然有像ES6模塊和CommonJS這樣的選項,但是瀏覽器支持是有限的,因此模塊綁定變得十分重要。

WebPack

WebPack  
網站 webpack.js.org
知識庫 github.com/webpack/webpack
當前版本 2.5.1
每月下載 600萬

Webpack支持所有流行的模塊選項,並已成為React開發的代名詞。雖然Webpack聲稱是一個模塊捆綁程式,但是已經可以用作通用任務運行程式了。

Browserify

Browserify  
網站 browserify.org
知識庫 github.com/substack/node-browserify
當前版本 14.3.0
每月下載 260萬

Browserify支持Node.js正在使用的CommonJS模塊,它將所有模塊編譯成單個瀏覽器相容的文件。

RequireJS

RequireJS  
網站 requirejs.org
知識庫 github.com/jrburke/r.js
當前版本 2.3.3
每月下載 百萬

RequireJS是一種瀏覽器中的模塊載入器,它也可以在Node.js中使用。

工具:代碼分析

代碼分析工具用於分析代碼中潛在錯誤或偏離語法的標準。一個未閉合括弧或未聲明的變數一定會被檢測出。

ESLint

ESLint  
網站 eslint.org
知識庫 github.com/eslint/eslint
當前版本 3.19.0
每月下載 600萬

ESLint是一種可插拔的代碼分析工具。每個規則都是一個插件,因此可以根據個人喜好進行配置。

JSHint

JSHint  
網站 jshint.com
知識庫 github.com/jshint/jshint
當前版本 2.9.4
每月下載 200萬

JSHint是一個靈活的JavaScript代碼分析工具,它很好的平衡了真正的錯誤和老舊的語法。

JSLint

JSLint  
網站 jslint.com
知識庫 github.com/reid/node-jslint
當前版本 0.10.3
每月下載 50000

JSLint是最早的代碼分析工具之一,它實現了一套嚴格的預設規則。

工具:單元測試

測試驅動開發的任務要求需要編寫代碼來測試自己的代碼。目前有許多選擇,包括Ava, Tape 和Jest ,但目前最流行的三個工具是:

Mocha

Mocha  
網站 mochajs.org
知識庫 github.com/mochajs/mocha
當前版本 3.3.0
每月下載 500萬

Mocha是一個JavaScript測試框架,可以在Node.js或瀏覽器中運行測試。它支持非同步測試,並且經常與Chai配合使用,這樣可以使測試代碼以可讀取的方式表達。

Jasmine

Jasmine  
網站 jasmine.github.io
知識庫 github.com/jasmine/jasmine-npm
當前版本 2.6.0
每月下載 200萬

Jasmine是一個行為驅動的測試工具,可以在瀏覽器中自動測試UI和交互。

QUnit

QUnit  
網站 https://qunitjs.com/
知識庫 github.com/kof/node-qunit
當前版本 1.0.0
每月下載 25000

QUnit是一個單元測試框架,可以在輸入特定參數時,檢查函數結果。它還上報測試結果,確保沒有錯過特定的代碼分支。

總結與建議

目前最為流程的框架是React,同時其它的框架也在向著流行的趨勢發展。

如果需要一個安全的、通用的Web應用程式,可以考慮使用Vue.js。

整體框架已經不再受歡迎了,如果你需要對一個較大型項目進行嚴格的結構管理,AngularJS是一個不錯的選擇。目前大多數人堅持使用Angular 1.0版本,但是長遠來講,如果你願意學習TypeScript,Angular 4.x版本是個更好的選擇。

jQuery雖然現在並不十分流行,在技術新聞中也很少會被提到,但不可否認它是積極開發的,同時也是網站和應用程式的有力工具。jQuery具有平緩的學習曲線,全球許多開發人員能夠很好地理解。

如果你想要冒險,可以試試Svelte這是一個有趣的客戶端/伺服器框架,它可以在構建時預先呈現JavaScript,並且可以改變我們開發的方式。

工具的選擇因項目而異。雖然目前使用Gulp的開發者占大多數,但WebPack卻越來越受歡迎。同時你也不能錯過ESLint和Mocha等測試工具。


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

-Advertisement-
Play Games
更多相關文章
  • 1.Clone()方法產生一個object,使用方法後必須產生的object賦值。 Vector v2 = (Vector)v.clone(); 2.Clone()方法在object中是保護類型方法,如果自己創建的類需要使用Clone()方法的話需要自己重新寫一個,並且繼承Cloneable介面。 ... ...
  • 瞭解dto概念 此博文收集整理了一些主流的文章對於DTO模式的解讀,他們大體相似而又各有所不同。對於設計模式的解讀也是一個仁者見仁智者見智的事情,不過設計模式往往都是前輩們在遇到一類特定的問題下而總結的經驗和智慧。看不同大牛對同一概念的解讀,對比思考,本身就是對於我們思維的一次洗禮。(所有文章均貼有 ...
  • 設計模式概念 引用《設計模式-可復用的面相對像設計》對模式的定義是這樣的:【Christopher Alexander 說過: “每一個模式描述了一個在我們周圍不斷重覆發生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重覆勞動”, 儘管Alexander所指的是城市和 ...
  • java 企業網站源碼 前後臺都有 靜態模版引擎, 代碼生成器大大提高開發效率 前臺: 支持三套模版, 可以在後臺切換 系統介紹: 1.網站後臺採用主流的 SSM 框架 jsp JSTL,網站後臺採用freemaker靜態化模版引擎生成html 2.因為是生成的html,所以訪問速度快,輕便,對服務 ...
  • 每個框架都不可避免會有自己的一些特點,從而會對使用者有一定的要求,這些要求就是主張,主張有強有弱,它的強勢程度會影響在業務開發中的使用方式。 一、Angular,它兩個版本都是強主張的,如果你用它,必須接受以下東西:- 必須使用它的模塊機制- 必須使用它的依賴註入- 必須使用它的特殊形式定義組件(這 ...
  • ++++++++++++++++++++++++++++++++++++++++++Nginx反向代理+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 環境:os centos7.3tengine 2.2.0本案例:兩台Web伺服器, ...
  • 英文:Martin Heller 譯文:葡萄城控制項 學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入學習交流群343599877,我們一起學前端! 對於JavaScript程式員來說,目前有很多很棒的工具可供選擇。本文將會討論10個優秀的支持JavaScript,HTML5和CSS開發,並且可 ...
  • HTML form標簽小結 最近研究 form標簽,有一些小心得寫下來與大家分享分享,共勉。在小結的最後有一個form表單的小例子,可以作為參考。 DanlV form是HTML的一個極為重要的功能標簽之一。 輸入域input input type屬性有如下屬性值: 1.button按鈕(具體接下來 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...