成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

最近學(xué)到的前后端分離知識(shí)

MoAir / 2212人閱讀

摘要:文本已收錄至我的倉庫,歡迎前后端分離這個(gè)詞相信大家都聽過,不知道大家是怎么理解的呢。流下不學(xué)無術(shù)的淚水目前我了解到的前后端分離,首先部署是分離的至少不會(huì)跟綁定在一起部署接口只返回?cái)?shù)據(jù)關(guān)于前端這幾大框架這幾個(gè)我都是沒有寫過的,所以也就不多了。

前言
只有光頭才能變強(qiáng)。

文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y

前后端分離這個(gè)詞相信大家都聽過,不知道大家是怎么理解的呢。前陣子看項(xiàng)目的時(shí)候,有一段實(shí)現(xiàn)硬是沒看懂,下面來給大家說一下一段愚蠢的經(jīng)歷哈。

(我沒正正式式寫過前端,所以如果文章有錯(cuò)的地方希望可以在評(píng)論區(qū)友善交流~)

一、交代背景

我一直都知道我現(xiàn)在的這個(gè)系統(tǒng)是前后端分離的,我的接口只會(huì)返回JSON出去,但我不曾關(guān)心前端是怎么處理我的JSON數(shù)據(jù)的(以及他是怎么跑通和運(yùn)行的)

在某一天,我在查接口的時(shí)候,習(xí)慣F12,想直接看一下這個(gè)請(qǐng)求返回的JSON數(shù)據(jù)是什么。但是一看,在network返回的是html格式:

于是,我就很好奇啊,就看一下這個(gè)接口是不是我想象中的那個(gè)。于是就去找我的接口,看一下是不是真的返回JSON(我還專門Debug了一下,看看是不是真請(qǐng)求到這個(gè)接口上了):

得出的結(jié)果是:我的接口的確是返回JSON數(shù)據(jù),瀏覽器的reponse返回的的確是HTML格式。

于是,我就去找我前端的小伙伴,去問了一下這是怎么搞的。他回復(fù)我說:“在瀏覽器看到返回的是頁面,那肯定是你們后端干的呀”

我說:“沒有啊,我Java接口返回的是JSON數(shù)據(jù)啊,是不是中途你們用node做了些處理啊?”(我之前聽過Node.js,但僅僅是聽過)

他說:“Node.js也是你們后端的啊?!?/p>

我一聽,?。縉ode.js不是屬于前端的嗎?

二、初識(shí)Node.js

在遇到這個(gè)事情之前,其實(shí)我在知乎已經(jīng)看了一個(gè)帖子,話題名是這個(gè)《畢設(shè)答辯,老師說node不可能寫后臺(tái)怎么辦?》

有興趣的小伙伴可以去了解一下,大多數(shù)內(nèi)容還是挺通俗易懂的:

https://www.zhihu.com/question/327657434/answer/704249816

我在下載Node.js的時(shí)候,發(fā)現(xiàn)其簡介十分簡潔

Node.js? is a JavaScript runtime built on Chrome"s V8 JavaScript engine.

Node.js? 是一個(gè)基于 Chrome V8 引擎 的 JavaScript 運(yùn)行時(shí)。

然后點(diǎn)進(jìn)去Chrome V8引擎,再看了一下介紹:

V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others.

V8是Google的開源高性能JavaScript和WebAssembly引擎,用C ++編寫。它用于Chrome和Node.js等。

看了介紹,一臉懵逼,這是啥玩意啊。下面我來解釋一下

2.1 V8引擎是什么?

眾所周知,JavaScript是解析型語言,我們寫好的JavaScript代碼會(huì)由JavaScript引擎去解析,而V8是JavaScript引擎的一種。

在傳統(tǒng)意義上,我們會(huì)認(rèn)為解析器是逐條解析(一邊執(zhí)行一邊解析),但為了提高JavaScript的解析速度(相當(dāng)于提高用戶體驗(yàn)),在解析的時(shí)候做了點(diǎn)“手腳”。

V8引擎:為了提高解析的性能,引入了一些“后端”的技術(shù)(不過他本來就由C++編寫的)。它是先將JavaScript源代碼轉(zhuǎn)成抽象語法樹,然后再將抽象語法樹生成字節(jié)碼。如果發(fā)現(xiàn)某個(gè)函數(shù)被多次調(diào)用或者是多次調(diào)用的循環(huán)體(熱點(diǎn)代碼),那就會(huì)將這部分的代碼編譯優(yōu)化。說白了就是:對(duì)熱點(diǎn)代碼做編譯,非熱點(diǎn)代碼直接解析

總結(jié):V8引擎是JavaScript引擎的一種,這個(gè)引擎由C++來編寫的,性能很不錯(cuò)。

參考資料:

https://zhuanlan.zhihu.com/p/27628685

https://zhuanlan.zhihu.com/p/73768338

2.2回到Node.js

瀏覽器為了安全,沒有為JavaScript提供一套IO環(huán)境,而一門后端語言是肯定能進(jìn)行網(wǎng)絡(luò)通信、文件讀寫(IO)的。

后來,有牛逼的人把V8引擎搬到了服務(wù)端上,在V8引擎的基礎(chǔ)上加了網(wǎng)絡(luò)通信、IO、HTTP等服務(wù)端的函數(shù)。取了一個(gè)名字叫:Node.js

比如通過libuv庫來進(jìn)行文件讀取,以及建立TCP/UDP連接。通過xxx庫解析HTTP請(qǐng)求和響應(yīng)....這些庫都是由C/C++來編寫的。

所以,Node.js是運(yùn)行在服務(wù)端的,只不過在基礎(chǔ)語言是JavaScript。

三、前后端分離入門

回顧一下自己學(xué)JavaWeb的歷程:

剛學(xué)Servlet的時(shí)候,會(huì)在response對(duì)象上寫一些HTML代碼輸出到瀏覽器看效果

后來,學(xué)習(xí)到JSP了,就純粹用Servlet做控制,JSP做視圖。

JSP本質(zhì)上還是一個(gè)Servlet,只不過看起來像HTML文件,在編譯的時(shí)候還是會(huì)變成一個(gè)HttpJspPage類(該類是HttpServlet的一個(gè)子類)

再后來,學(xué)到了AJAX技術(shù),發(fā)現(xiàn)我們完全可以通過AJAX來進(jìn)行交互。AJAX請(qǐng)求Servlet,Servlet返回JSON數(shù)據(jù)回去,AJAX拿到Servlet返回的數(shù)據(jù)進(jìn)行解析和處理。這里壓根就不需要JSP了(純HTML+AJAX),這算是前后端分離的一種了

在開發(fā)上體驗(yàn):如果完全使用HTML+AJAX的話,會(huì)發(fā)現(xiàn)其實(shí)需要寫非常非常多的JavaScript代碼,而且這些JavaScript代碼都不好復(fù)用。

在部署上,還是跟Java一起部署(放在resource下),沒有將前端多帶帶部署。

再后來,學(xué)到了一些在常用的模板引擎(比如freemarker),其實(shí)用起來跟JSP沒多大的區(qū)別,只不過性能要比JSP好不少。

...流下不學(xué)無術(shù)的淚水

目前我了解到的前后端分離,首先部署是分離的(至少不會(huì)跟Java綁定在一起部署):

Java接口只返回JSON數(shù)據(jù):

關(guān)于前端這幾大框架:angular/vue/react這幾個(gè)我都是沒有寫過的,所以也就不多BB了。我一直想知道的是:前框框架和node是啥關(guān)系。問了一下前端的小伙伴,他回復(fù)是大致這樣的:

前端現(xiàn)在是講究工程化的,工程化用到了node而已(就是打包編譯那些會(huì)用到,項(xiàng)目里面真正跑起來的話是沒有這些東西的)

-----------以下引用摘錄:

Webpack、Less、Sass、Gulp、Bower以及這些工具的插件都是Node上開發(fā)的---@知乎陳龍

舉個(gè)例子:隨著發(fā)展,前端的JavaScript需要依賴的包也非常復(fù)雜,類比于Java我們會(huì)有Maven,而前端現(xiàn)在有npm包管理

而npm是隨同Node.js一起安裝的。所以前端(vue/angular/react)在開發(fā)環(huán)境下都是離不開Node.js的(編譯、打包等等)

參考資料(為什么要使用 npm):

https://zhuanlan.zhihu.com/p/24357770

3.1 方式一(Nginx+Server)

OK,現(xiàn)在假設(shè)我們用前端(vue/angular/react)開發(fā)完,開發(fā)環(huán)境下將JavaScript編譯/打包完,那我們能得到純靜態(tài)的文件。我們可以直接將純靜態(tài)文件放到Nginx(CDN)等等地方【只要能夠響應(yīng)HTTP請(qǐng)求就行】。

如果請(qǐng)求是調(diào)用后端服務(wù),則經(jīng)過Nginx轉(zhuǎn)發(fā)到后端服務(wù)器,完成響應(yīng)后經(jīng)Nginx返回到瀏覽器。

3.2 方式二(加入Node.js)

在前邊的基礎(chǔ)上加入Node.js,至于為啥要Node.js,一個(gè)重要的原因就是:加快首屏渲染速度,解決SEO問題

加入Node.js,此時(shí)的請(qǐng)求流程應(yīng)該是這樣的:

瀏覽器發(fā)起的請(qǐng)求經(jīng)過前端機(jī)的Nginx進(jìn)行分發(fā).

URL請(qǐng)求統(tǒng)一分發(fā)到Node Server,在Node Server中根據(jù)請(qǐng)求類型從后端服務(wù)器上通過RPC服務(wù)請(qǐng)求頁面的模板數(shù)據(jù),然后進(jìn)行頁面的組裝和渲染;

API請(qǐng)求則直接轉(zhuǎn)發(fā)到后端服務(wù)器,完成響應(yīng)。

最后

好的,現(xiàn)在問題來了:你是覺得Node.js歸屬在后端還是前端?

看得不過癮?推薦一下我認(rèn)為不錯(cuò)的文章和資料:

https://segmentfault.com/a/1190000009329474

https://www.zhihu.com/question/267014376

https://cnodejs.org/topic/565ebb193cda7a91276ff887

https://github.com/yalishizhude/front-back-separation

樂于輸出干貨的Java技術(shù)公眾號(hào):Java3y。公眾號(hào)內(nèi)有200多篇原創(chuàng)技術(shù)文章、海量視頻資源、精美腦圖,關(guān)注即可獲??!

覺得我的文章寫得不錯(cuò),點(diǎn)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75931.html

相關(guān)文章

  • Python面試經(jīng)驗(yàn)總結(jié),面試一時(shí)爽,一直面試一直爽!

    摘要:面試的心得體會(huì)簡歷制作我做了兩份簡歷,用兩個(gè)手機(jī)賬號(hào),兩個(gè)簡歷名字,分別在各個(gè)招聘網(wǎng)站投了雙份簡歷,一個(gè)是數(shù)據(jù)分析的簡歷一個(gè)是全棧開發(fā)的簡歷,我真正接觸快年,不管是學(xué)習(xí)還是工作學(xué)到的東西,這兩年大概掌握了前端爬蟲數(shù)據(jù)分析機(jī)器學(xué)習(xí)技術(shù), showImg(https://upload-images.jianshu.io/upload_images/13090773-b96aac7e974c...

    gxyz 評(píng)論0 收藏0
  • 《從零構(gòu)建前后分離 WEB 項(xiàng)目》 序 - 開源意義

    摘要:盡量按照前端后端部署運(yùn)維來講,當(dāng)然中途涉及到跨域這種前后協(xié)調(diào)的還是無法避免捎帶一筆。關(guān)于我目前在寫從零構(gòu)建前后分離項(xiàng)目系列,修正和補(bǔ)充以此為準(zhǔn)不斷更新的項(xiàng)目實(shí)踐地址彩蛋提前預(yù)覽下一章傳送門 序: 開源的意義 本系列提前首發(fā)地址 背景 從事了近4年的互聯(lián)網(wǎng)行業(yè),逐漸擔(dān)當(dāng)過團(tuán)隊(duì)的前端到后端的負(fù)責(zé)人,和大家一樣從小白逐漸的成長起來,回首望去幾年前的博客還是那么稚嫩。 回首這幾年: 從一個(gè)ja...

    seasonley 評(píng)論0 收藏0
  • 《從零構(gòu)建前后分離 WEB 項(xiàng)目》 序 :開源意義

    摘要:從前端到后端到運(yùn)維,經(jīng)歷了幾次前后端架構(gòu)的演變,踩了無數(shù)的坑,度過無數(shù)難免的夜。為了工作或?qū)W習(xí),確實(shí)造過一些輪子,前端的后端的,也開源出來過覺得能提高生產(chǎn)力的。 showImg(https://segmentfault.com/img/bVbgeXP?w=713&h=275); 序: 開源的意義 本系列提前首發(fā)地址 背景 從事了近4年的互聯(lián)網(wǎng)行業(yè),逐漸擔(dān)當(dāng)過團(tuán)隊(duì)的前端到后端的負(fù)責(zé)人,和...

    J4ck_Chan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<