邁向全棧開(kāi)發(fā),程序員必須知道的19個(gè)框架和庫(kù)
全棧開(kāi)發(fā)是程序員圈子中最炙手可熱的話(huà)題之一,關(guān)于全棧應(yīng)用程序開(kāi)發(fā)需要掌握哪些技能的討論從未間斷過(guò)。全棧開(kāi)發(fā)者是指具有綜合能力的開(kāi)發(fā)人員,他們掌握各種技能并使用這些技能來(lái)獨(dú)立完成產(chǎn)品。
那么,程序員就需要了解各種堆棧流,包括移動(dòng)堆棧,Web堆棧或本機(jī)應(yīng)用程序堆棧。如果你是初學(xué)者,需要對(duì)編程語(yǔ)言有基本的了解,才能開(kāi)始使用框架和庫(kù)。在本文中,我們將討論可用于創(chuàng)建商業(yè)用途的、功能全面的Web和移動(dòng)應(yīng)用程序的各種框架或庫(kù),也許有的已經(jīng)位于你的常用堆棧序列,有的或可為你所用。
一、前端開(kāi)發(fā)
如果僅需要某些Web組件的可重用性,則小型js庫(kù)可能是你的最佳選擇。隨著前端的發(fā)展,庫(kù)可以節(jié)省編程時(shí)間并有助于代碼維護(hù)。當(dāng)然,作為全棧應(yīng)用程序開(kāi)發(fā)人員,你不能忽略時(shí)間管理和代碼的可伸縮性。
1. Mustache
當(dāng)遇到復(fù)雜的項(xiàng)目時(shí),你可能希望使用這個(gè)框架。大多數(shù)項(xiàng)目都需要在客戶(hù)端加載HTML和JavaScript操作。例如,一家發(fā)展迅速的代理商,希望將新的服務(wù)或產(chǎn)品組合動(dòng)態(tài)添加到你的應(yīng)用中。可能想嘗試安全地修改DOM,類(lèi)和屬性,以免其他組件自行移位。最好的辦法是創(chuàng)建可放入任何項(xiàng)目或頁(yè)面中的超輕DOM庫(kù)。這就是Mustache JS庫(kù)發(fā)揮作用的地方。
由于Mustache鼓勵(lì)使用多種語(yǔ)言,因此我們?cè)诜?wù)器端不需要單獨(dú)的模板系統(tǒng)。
2. EJS
當(dāng)你必須使用很多JavaScript輸出HTML時(shí),或者要處理動(dòng)態(tài)內(nèi)容時(shí),或者提供與實(shí)時(shí)更新有關(guān)的內(nèi)容時(shí),EJS可能是最佳選擇。
3. HandleBars
如果通過(guò)REST API從服務(wù)器獲得的數(shù)據(jù)增長(zhǎng)很快,或者從客戶(hù)端獲得的數(shù)據(jù)增長(zhǎng)很快,可使用HandleBars.js。
現(xiàn)在,需要進(jìn)行巨大的DOM操作才能實(shí)現(xiàn)更改。為了輕松管理HTML內(nèi)容,你不需要JavaScript代碼即可保留較大的HTML標(biāo)記。一個(gè)好主意是保持JavaScript和HTML充分的分離,并使用客戶(hù)端模板,因?yàn)樗ǔ1确?wù)器端模板執(zhí)行得更快。
4. Svelte
代碼越長(zhǎng),理解代碼所需的精力就越大,并且出現(xiàn)錯(cuò)誤的機(jī)會(huì)也就越高。任何有助于以更少的代碼添加更多功能的工具,對(duì)于經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員來(lái)說(shuō)都是很好的助手。
Svelte是在構(gòu)建步驟中向下編譯組件的工具和框架。這樣,你就可以在單個(gè)頁(yè)面上加載每個(gè)組件以呈現(xiàn)你的應(yīng)用程序。這意味著沒(méi)有虛擬DOM,沒(méi)有框架之上的框架,并且在運(yùn)行時(shí)沒(méi)有額外的負(fù)載。
二、服務(wù)器端渲染
眾所周知,“JavaScript太多,你的應(yīng)用程序加載就會(huì)緩慢。” 當(dāng)應(yīng)用同時(shí)接收大量流量時(shí),情況更加糟糕。
現(xiàn)在,用戶(hù)可沒(méi)有更多時(shí)間等待應(yīng)用程序長(zhǎng)時(shí)間來(lái)加載。針對(duì)類(lèi)似情況,開(kāi)發(fā)人員可以使用服務(wù)器端的解決方案。有了這個(gè)概念,JavaScript應(yīng)用程序就可以在服務(wù)器而不是瀏覽器上運(yùn)行。
從技術(shù)上講,應(yīng)該在后端編程模板中實(shí)現(xiàn)這些庫(kù)。這樣,頁(yè)面是在服務(wù)器端生成的,但是與頁(yè)面的所有交互一旦加載,都將在客戶(hù)端進(jìn)行處理。
5. Next.js
Next.js使事情變得簡(jiǎn)單。盡管是客戶(hù)端平臺(tái),React應(yīng)用程序仍存在一些與在客戶(hù)端上呈現(xiàn)所有內(nèi)容有關(guān)的問(wèn)題。與應(yīng)用質(zhì)量相關(guān)的突出因素之一是你遇到了SEO的問(wèn)題。
盡管搜索引擎在運(yùn)行和索引JavaScript應(yīng)用方面變得越來(lái)越有能力,但是如果可以更進(jìn)一步呢?使用Next.js后,可以在將HTML發(fā)送到客戶(hù)端之前在服務(wù)器端呈現(xiàn)React組件。此外,Link用于將多個(gè)頁(yè)面鏈接在一起的組件還支持prefetch道具,該道具隱藏地預(yù)讀取頁(yè)面資源。
6. Nuxt.js
如果你是Vue.js開(kāi)發(fā)者,現(xiàn)在你應(yīng)該可能已經(jīng)發(fā)現(xiàn)了Nuxt.js。你可以將Nuxt.js用作Vue編程的堆疊層。它簡(jiǎn)化了通用或單頁(yè)Vue應(yīng)用程序的開(kāi)發(fā)。那是Nuxt.js的獨(dú)特賣(mài)點(diǎn)-創(chuàng)建通用應(yīng)用程序的過(guò)程變得更加容易。JavaScript代碼可以在客戶(hù)端和服務(wù)器端執(zhí)行。通用應(yīng)用程序與單頁(yè)應(yīng)用程序(SPA)有關(guān)。
使用SPA,必須在服務(wù)器端和客戶(hù)端都進(jìn)行大量配置,Nuxt.js能解決Vue應(yīng)用程序的瓶頸。這看起來(lái)很簡(jiǎn)單,讓框架完成其在客戶(hù)端和服務(wù)器之間共享代碼的工作,然后你專(zhuān)注于應(yīng)用程序的邏輯。
Nuxt.js的架構(gòu)圖如下:
三、CSS框架和庫(kù)
使用CSS框架的目的就是流暢,整潔地構(gòu)造布局。
7. Semantic UI
Semantic UI在兩個(gè)方面是獨(dú)特的:—是獲得結(jié)構(gòu)化的布局,并且它使用五個(gè)描述性類(lèi)別來(lái)定義可重復(fù)使用的UI組件。如果你能夠以某種期望的方式操作組件的格式,那么將很快獲得真正的效果,而不必為創(chuàng)建組件本身而進(jìn)行編程。
另一個(gè)優(yōu)點(diǎn)是,它不僅在命名類(lèi)方面而且在命名,定義和描述其組件方面都有優(yōu)勢(shì)。其次,你將獲得當(dāng)代框架中不存在的各種現(xiàn)成的組件。例如,可以在UI Views組件中獲得Feed和Comment,或者從UI Modules獲得側(cè)邊欄和圖形。
8. Bulma
Bulma是基于Flexbox構(gòu)建的現(xiàn)代CSS框架。
9. Bootstrap
Bootstrap是專(zhuān)注于移動(dòng)優(yōu)先的開(kāi)發(fā)者。當(dāng)CDN或在本地下載庫(kù)文件以使它們?cè)贖TML文件中排隊(duì)時(shí),就可以訪(fǎng)問(wèn)大量的預(yù)先編寫(xiě)的類(lèi)和屬性。要做的就是根據(jù)需要自定義它們。
四、后端開(kāi)發(fā)
后端編程的一個(gè)典型示例是當(dāng)你在博客上閱讀文章時(shí)。字體,顏色,設(shè)計(jì)等構(gòu)成了頁(yè)面的前端。文章的內(nèi)容是從服務(wù)器中提取的,并是從數(shù)據(jù)庫(kù)中提取的,這就是應(yīng)用程序的后端。如圖所示:
10. Django
Django是高級(jí)Python Web框架,可促進(jìn)干凈的開(kāi)發(fā)過(guò)程和實(shí)用的設(shè)計(jì)。以下是入門(mén)的基本要求:
- Python(最新版本)
- easy_install和Pip
- Git
- 虛擬環(huán)境
- Django
- 數(shù)據(jù)庫(kù)(SQLite,MySQL,PostgreSQL,MongoDB等)
- South(適用于1.7之前的Django版本)
- 文本編輯器(Sublime,vim,Komodo,gedit)
easy_install和pip是Python包管理器。這些使安裝和升級(jí)Python軟件包以及軟件包依賴(lài)關(guān)系變得更加簡(jiǎn)單。通過(guò)Python Package Index獲取設(shè)置工具。找到packaged egg(.egg),然后直接從文件中安裝。然后,對(duì)于版本控制,可能需要利用到Git。
11. Laravel
Laravel是一個(gè)基于PHP的框架,它表現(xiàn)力強(qiáng),優(yōu)雅。使用Laravel服務(wù)器管理不再是頭疼的事。已經(jīng)與DigitalOcean,Linode,Vultr和Amazon合作,以幫助你實(shí)現(xiàn)這一目標(biāo)。所要做的就是提交Laravel forge。
諸如Artisan的CLI這樣的功能,對(duì)多個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的支持以及遷移功能增加了框架的無(wú)縫性,使其在后端開(kāi)發(fā)人員中倍受歡迎。此外,打包系統(tǒng)很強(qiáng)大,它具有多種支持軟件或庫(kù),可幫助Web應(yīng)用程序?qū)崿F(xiàn)流程自動(dòng)化。這樣,可以加快開(kāi)發(fā)速度以提供快速功能。Laravel帶有一個(gè)稱(chēng)為Blade Template Engine的內(nèi)置模板引擎。
所有這些使Laravel框架具有開(kāi)箱即用的功能,并且適合于各種應(yīng)用程序開(kāi)發(fā)。
12. Android SDK
從技術(shù)上講,它不是框架,而是完整的操作系統(tǒng)。它具有存儲(chǔ)訪(fǎng)問(wèn)框架(SAF),使用戶(hù)可以在其所有首選的文檔存儲(chǔ)提供程序中輕松瀏覽和打開(kāi)文檔,文件和其他圖像。SDK中包含以下內(nèi)容:
- Android API:這部分構(gòu)成了SDK的核心。該API是一堆庫(kù),可為開(kāi)發(fā)人員提供對(duì)Android堆棧的訪(fǎng)問(wèn)權(quán)限,這些庫(kù)與創(chuàng)建本機(jī)android應(yīng)用程序的庫(kù)相同。
- 開(kāi)發(fā)工具:為了將Android源代碼轉(zhuǎn)換為可運(yùn)行的Android應(yīng)用程序,SDK利用了一些開(kāi)發(fā)工具。這些使你可以編譯和調(diào)試Android應(yīng)用程序。
- Android模擬器:該仿真器具有許多其他外觀(guān),可以通過(guò)它們查看真實(shí)設(shè)備中應(yīng)用程序的外觀(guān)和行為。
- 在線(xiàn)支持:可以利用Google網(wǎng)上論壇,通過(guò)Google Android開(kāi)發(fā)團(tuán)隊(duì)的定期輸入得到更新。
13. Phoenix
Phoenix框架與另一個(gè)Web開(kāi)發(fā)工具Elixir結(jié)合使用,可提供最佳的后端體驗(yàn),有助于構(gòu)建具有高可用性,并發(fā)性和低延遲的解決方案。
Elixir基于Erlang VM(BEAM),這使得Elixir和Phoenix都非常耐用。另外,語(yǔ)法確實(shí)變得清晰易讀。此外,Phoenix最令人興奮的部分之一是它使與數(shù)百萬(wàn)個(gè)已連接客戶(hù)端之間以及彼此之間的軟實(shí)時(shí)通信成為可能。有聊天室和用于消息以及更多內(nèi)容的API。
14. Spring
如果查看下圖的Edureka,則表明Spring具有一個(gè)分層的體系結(jié)構(gòu),該體系結(jié)構(gòu)由具有其功能的不同模塊組成。
創(chuàng)建Java應(yīng)用程序的最佳選擇。分層結(jié)構(gòu)具有巨大的優(yōu)勢(shì),可以有效地組織你的中間層對(duì)象。這使配置在整個(gè)應(yīng)用程序中保持一致。
首先,必須創(chuàng)建一個(gè)Spring Boot,該Boot提供了一種快速的方式來(lái)創(chuàng)建可用于生產(chǎn)的基于Spring的應(yīng)用程序。對(duì)于執(zhí)行,所要做的就是構(gòu)建一個(gè)bean類(lèi),在其中將顯示最終輸出,生成XML文件,主類(lèi),并加載少量jar文件。此外,可以考慮start.spring.io來(lái)組成一個(gè)基本項(xiàng)目。
15. Rails
Ruby on Rails與Twitter,Basecamp,Airbnb,Github等眾多公司使用的框架相同。基礎(chǔ)知識(shí)包括有關(guān)變量,控制流語(yǔ)句,循環(huán),通過(guò)數(shù)據(jù)結(jié)構(gòu)的數(shù)組以及其他類(lèi)和對(duì)象函數(shù)的學(xué)習(xí)。
當(dāng)打算組成一個(gè)Rails應(yīng)用程序時(shí),并且要放棄配置和其他任務(wù)時(shí),必須執(zhí)行三個(gè)主要任務(wù):
描述應(yīng)用程序的模型:這可能是音樂(lè)商店,大學(xué),地址簿或硬件清單。
確定此域可能發(fā)生的情況:這意味著使應(yīng)用程序動(dòng)態(tài)化,可以將地址添加到地址簿中,從音樂(lè)商店購(gòu)買(mǎi)樂(lè)譜。
確定視圖的公共可用性:這意味著為用戶(hù)定制應(yīng)用程序的頁(yè)面視圖。
16. Tornado
Python結(jié)構(gòu)分為三部分:
- 全棧框架,可為服務(wù)器和客戶(hù)端提供開(kāi)箱即用的功能。
- Microframeworks,主要提供服務(wù)器端支持,有時(shí)還提供客戶(hù)端支持。這樣就可以?xún)H使用一個(gè)Python文件來(lái)創(chuàng)建Web應(yīng)用程序。
- 異步框架,用于異步處理請(qǐng)求。
Tornado屬于python框架的最后一類(lèi)。
可以使用它來(lái)創(chuàng)建諸如Router或WebSockets的SocketHandler之類(lèi)的應(yīng)用程序。該文檔非常清楚,可以利用它來(lái)構(gòu)建下一個(gè)完整堆棧的移動(dòng)應(yīng)用程序。
17. Grails
Grails是一個(gè)受Groovy和Java啟發(fā)的Web框架。開(kāi)發(fā)人員可以將此框架部署到任何現(xiàn)有的Java Web服務(wù)器上,例如Tomcat或Jetty。關(guān)于grails的一件事很重要,那就是它采用了不合常規(guī)的方法,而不是通過(guò)配置思維。與使用XML文件之類(lèi)的配置文件相比,這使應(yīng)用程序可以根據(jù)命名方案自動(dòng)連接自身。
五、數(shù)據(jù)庫(kù)
18. MongoDB
如果想成為MEAN(MongoDB,Express,AngularJS和Node.js)的全棧開(kāi)發(fā)人員,則需要學(xué)習(xí)一項(xiàng)非常需要的技術(shù)。作為開(kāi)源跨平臺(tái)的數(shù)據(jù)庫(kù),它將數(shù)據(jù)存儲(chǔ)在鍵值對(duì)中。這就像在JSON中使用二進(jìn)制數(shù)據(jù)類(lèi)型一樣。為了使你一目了然,MongoDB中的文檔類(lèi)似于OOPS中的對(duì)象。
如果要管理具有數(shù)百萬(wàn)個(gè)數(shù)據(jù)的大型表,MongoDB是最佳選擇。使用MongoDB,可以?xún)H使用一個(gè)庫(kù)(例如JavaScript)來(lái)生成整個(gè)應(yīng)用程序。
19. MySQL/MariaDB
創(chuàng)建播放列表時(shí),就是在創(chuàng)建數(shù)據(jù)庫(kù)。當(dāng)拍攝照片并將其上傳到網(wǎng)站時(shí),圖庫(kù)就是在網(wǎng)站服務(wù)器上的數(shù)據(jù)庫(kù)。當(dāng)瀏覽電子商務(wù)網(wǎng)站以購(gòu)買(mǎi)鞋子,衣服等時(shí),正在使用購(gòu)物車(chē)數(shù)據(jù)庫(kù)。
MySQL是允許你管理關(guān)系數(shù)據(jù)的數(shù)據(jù)庫(kù)。在我們的電子商務(wù)示例中,產(chǎn)品,類(lèi)別,標(biāo)簽正在使用表格,并且與購(gòu)物車(chē)數(shù)據(jù)庫(kù)以及許多其他商品相關(guān)。那是數(shù)據(jù)庫(kù)的實(shí)時(shí)程序。