摘要:文本已收錄至我的倉庫,歡迎前后端分離這個詞相信大家都聽過,不知道大家是怎么理解的呢。流下不學無術的淚水目前我了解到的前后端分離,首先部署是分離的至少不會跟綁定在一起部署接口只返回數據關于前端這幾大框架這幾個我都是沒有寫過的,所以也就不多了。
前言
只有光頭才能變強。文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y
前后端分離這個詞相信大家都聽過,不知道大家是怎么理解的呢。前陣子看項目的時候,有一段實現硬是沒看懂,下面來給大家說一下一段愚蠢的經歷哈。
(我沒正正式式寫過前端,所以如果文章有錯的地方希望可以在評論區友善交流~)
一、交代背景我一直都知道我現在的這個系統是前后端分離的,我的接口只會返回JSON出去,但我不曾關心前端是怎么處理我的JSON數據的(以及他是怎么跑通和運行的)
在某一天,我在查接口的時候,習慣F12,想直接看一下這個請求返回的JSON數據是什么。但是一看,在network返回的是html格式:
于是,我就很好奇啊,就看一下這個接口是不是我想象中的那個。于是就去找我的接口,看一下是不是真的返回JSON(我還專門Debug了一下,看看是不是真請求到這個接口上了):
得出的結果是:我的接口的確是返回JSON數據,瀏覽器的reponse返回的的確是HTML格式。
于是,我就去找我前端的小伙伴,去問了一下這是怎么搞的。他回復我說:“在瀏覽器看到返回的是頁面,那肯定是你們后端干的呀”
我說:“沒有啊,我Java接口返回的是JSON數據啊,是不是中途你們用node做了些處理啊?”(我之前聽過Node.js,但僅僅是聽過)
他說:“Node.js也是你們后端的啊。”
我一聽,啊?Node.js不是屬于前端的嗎?
二、初識Node.js在遇到這個事情之前,其實我在知乎已經看了一個帖子,話題名是這個《畢設答辯,老師說node不可能寫后臺怎么辦?》
有興趣的小伙伴可以去了解一下,大多數內容還是挺通俗易懂的:
https://www.zhihu.com/question/327657434/answer/704249816
我在下載Node.js的時候,發現其簡介十分簡潔:
Node.js? is a JavaScript runtime built on Chrome"s V8 JavaScript engine.
Node.js? 是一個基于 Chrome V8 引擎 的 JavaScript 運行時。
然后點進去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代碼會由JavaScript引擎去解析,而V8是JavaScript引擎的一種。
在傳統意義上,我們會認為解析器是逐條解析(一邊執行一邊解析),但為了提高JavaScript的解析速度(相當于提高用戶體驗),在解析的時候做了點“手腳”。
V8引擎:為了提高解析的性能,引入了一些“后端”的技術(不過他本來就由C++編寫的)。它是先將JavaScript源代碼轉成抽象語法樹,然后再將抽象語法樹生成字節碼。如果發現某個函數被多次調用或者是多次調用的循環體(熱點代碼),那就會將這部分的代碼編譯優化。說白了就是:對熱點代碼做編譯,非熱點代碼直接解析。
總結:V8引擎是JavaScript引擎的一種,這個引擎由C++來編寫的,性能很不錯。
參考資料:
https://zhuanlan.zhihu.com/p/27628685
https://zhuanlan.zhihu.com/p/73768338
2.2回到Node.js瀏覽器為了安全,沒有為JavaScript提供一套IO環境,而一門后端語言是肯定能進行網絡通信、文件讀寫(IO)的。
后來,有牛逼的人把V8引擎搬到了服務端上,在V8引擎的基礎上加了網絡通信、IO、HTTP等服務端的函數。取了一個名字叫:Node.js
比如通過libuv庫來進行文件讀取,以及建立TCP/UDP連接。通過xxx庫解析HTTP請求和響應....這些庫都是由C/C++來編寫的。
所以,Node.js是運行在服務端的,只不過在基礎語言是JavaScript。
三、前后端分離入門回顧一下自己學JavaWeb的歷程:
剛學Servlet的時候,會在response對象上寫一些HTML代碼輸出到瀏覽器看效果
后來,學習到JSP了,就純粹用Servlet做控制,JSP做視圖。
JSP本質上還是一個Servlet,只不過看起來像HTML文件,在編譯的時候還是會變成一個HttpJspPage類(該類是HttpServlet的一個子類)
再后來,學到了AJAX技術,發現我們完全可以通過AJAX來進行交互。AJAX請求Servlet,Servlet返回JSON數據回去,AJAX拿到Servlet返回的數據進行解析和處理。這里壓根就不需要JSP了(純HTML+AJAX),這算是前后端分離的一種了
在開發上體驗:如果完全使用HTML+AJAX的話,會發現其實需要寫非常非常多的JavaScript代碼,而且這些JavaScript代碼都不好復用。
在部署上,還是跟Java一起部署(放在resource下),沒有將前端多帶帶部署。
再后來,學到了一些在常用的模板引擎(比如freemarker),其實用起來跟JSP沒多大的區別,只不過性能要比JSP好不少。
...流下不學無術的淚水
目前我了解到的前后端分離,首先部署是分離的(至少不會跟Java綁定在一起部署):
Java接口只返回JSON數據:
關于前端這幾大框架:angular/vue/react這幾個我都是沒有寫過的,所以也就不多BB了。我一直想知道的是:前框框架和node是啥關系。問了一下前端的小伙伴,他回復是大致這樣的:
前端現在是講究工程化的,工程化用到了node而已(就是打包編譯那些會用到,項目里面真正跑起來的話是沒有這些東西的)
-----------以下引用摘錄:
Webpack、Less、Sass、Gulp、Bower以及這些工具的插件都是Node上開發的---@知乎陳龍
舉個例子:隨著發展,前端的JavaScript需要依賴的包也非常復雜,類比于Java我們會有Maven,而前端現在有npm (包管理)
而npm是隨同Node.js一起安裝的。所以前端(vue/angular/react)在開發環境下都是離不開Node.js的(編譯、打包等等)
參考資料(為什么要使用 npm):
https://zhuanlan.zhihu.com/p/24357770
3.1 方式一(Nginx+Server)OK,現在假設我們用前端(vue/angular/react)開發完,開發環境下將JavaScript編譯/打包完,那我們能得到純靜態的文件。我們可以直接將純靜態文件放到Nginx(CDN)等等地方【只要能夠響應HTTP請求就行】。
如果請求是調用后端服務,則經過Nginx轉發到后端服務器,完成響應后經Nginx返回到瀏覽器。
3.2 方式二(加入Node.js)在前邊的基礎上加入Node.js,至于為啥要Node.js,一個重要的原因就是:加快首屏渲染速度,解決SEO問題
加入Node.js,此時的請求流程應該是這樣的:
瀏覽器發起的請求經過前端機的Nginx進行分發.最后URL請求統一分發到Node Server,在Node Server中根據請求類型從后端服務器上通過RPC服務請求頁面的模板數據,然后進行頁面的組裝和渲染;
API請求則直接轉發到后端服務器,完成響應。
好的,現在問題來了:你是覺得Node.js歸屬在后端還是前端?
看得不過癮?推薦一下我認為不錯的文章和資料:
https://segmentfault.com/a/1190000009329474
https://www.zhihu.com/question/267014376
https://cnodejs.org/topic/565ebb193cda7a91276ff887
https://github.com/yalishizhude/front-back-separation
樂于輸出干貨的Java技術公眾號:Java3y。公眾號內有200多篇原創技術文章、海量視頻資源、精美腦圖,關注即可獲取!
覺得我的文章寫得不錯,點贊!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75931.html
摘要:面試的心得體會簡歷制作我做了兩份簡歷,用兩個手機賬號,兩個簡歷名字,分別在各個招聘網站投了雙份簡歷,一個是數據分析的簡歷一個是全棧開發的簡歷,我真正接觸快年,不管是學習還是工作學到的東西,這兩年大概掌握了前端爬蟲數據分析機器學習技術, showImg(https://upload-images.jianshu.io/upload_images/13090773-b96aac7e974c...
摘要:盡量按照前端后端部署運維來講,當然中途涉及到跨域這種前后協調的還是無法避免捎帶一筆。關于我目前在寫從零構建前后分離項目系列,修正和補充以此為準不斷更新的項目實踐地址彩蛋提前預覽下一章傳送門 序: 開源的意義 本系列提前首發地址 背景 從事了近4年的互聯網行業,逐漸擔當過團隊的前端到后端的負責人,和大家一樣從小白逐漸的成長起來,回首望去幾年前的博客還是那么稚嫩。 回首這幾年: 從一個ja...
摘要:從前端到后端到運維,經歷了幾次前后端架構的演變,踩了無數的坑,度過無數難免的夜。為了工作或學習,確實造過一些輪子,前端的后端的,也開源出來過覺得能提高生產力的。 showImg(https://segmentfault.com/img/bVbgeXP?w=713&h=275); 序: 開源的意義 本系列提前首發地址 背景 從事了近4年的互聯網行業,逐漸擔當過團隊的前端到后端的負責人,和...
閱讀 3560·2021-09-22 10:52
閱讀 1588·2021-09-09 09:34
閱讀 1990·2021-09-09 09:33
閱讀 758·2019-08-30 15:54
閱讀 2596·2019-08-29 11:15
閱讀 713·2019-08-26 13:37
閱讀 1667·2019-08-26 12:11
閱讀 2975·2019-08-26 12:00