知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁(yè) » 新聞資訊 » 網(wǎng)站建設(shè) >
WEB開(kāi)發(fā)還有前途嗎?
發(fā)表時(shí)間:2019-5-16
發(fā)布人:葵宇科技
瀏覽次數(shù):36
想了想,還是先畫(huà)一系列的圖,再來(lái)解釋一下什么是WEB開(kāi)發(fā).
第一層 入門介紹圖
適合:剛?cè)腴T互聯(lián)網(wǎng),沒(méi)多少基礎(chǔ)知識(shí)和專業(yè)知識(shí).
為嘛這個(gè)圖上傳的不清楚?算了.我也不知道
對(duì)于大多數(shù)剛剛接觸到互聯(lián)網(wǎng)這個(gè)職業(yè)的人來(lái)說(shuō),對(duì)于軟件是怎么編寫(xiě)的,大概的職業(yè)是怎么劃分的,理解到這個(gè)程度就夠了.
整個(gè)系統(tǒng)架構(gòu)可以分成三層(分層是碼農(nóng)必備思維).
第一層,叫展示層,又被稱之為前端.展示層這個(gè)名字,其實(shí)有點(diǎn)不精確,確切的來(lái)說(shuō),應(yīng)該叫用戶層,或者是輸入輸出層,或者叫用戶交互層.
它的目標(biāo)很簡(jiǎn)單,就是接受用戶的輸入,并將結(jié)果反饋給用戶.
什么叫做輸入呢?鍵盤(pán),鼠標(biāo),聲音,圖像等等都是輸入,最簡(jiǎn)單的輸入就是鍵盤(pán)和鼠標(biāo),你們?nèi)绻催^(guò)各種黑客電影,不管是在鍵盤(pán)上啪啪啪,還是在空氣中點(diǎn)點(diǎn)點(diǎn),都是輸入.
輸出就是展示出來(lái)的結(jié)果,在屏幕上就是文字動(dòng)畫(huà),在音箱就是聲音之類的.
叫展示層的原因,是因?yàn)榇蟛糠值那闆r下,都是用戶只需要看,少部分才是操作.
所以通常是用展示層來(lái)代指用戶的輸入輸出層.
為什么要分層?
其實(shí)最早在互聯(lián)網(wǎng)沒(méi)有出現(xiàn)之前,分層是一個(gè)相對(duì)而言,軟件設(shè)計(jì)里的概念.但是在現(xiàn)在,就很簡(jiǎn)單了,你可以理解為,在你的手機(jī),電腦,智能手環(huán)上運(yùn)行的,都是展示層.
在過(guò)去,單機(jī)軟件的時(shí)代,你可以簡(jiǎn)單理解為它不是分層的(雖然在系統(tǒng)的內(nèi)部依然有層次的劃分).
而在聯(lián)網(wǎng)的時(shí)代,所有的數(shù)據(jù)和交互都是由云端的服務(wù)器來(lái)存儲(chǔ)和處理.
這個(gè)層次就很好理解了,就是一個(gè)在用戶端,一個(gè)是在云端.
所以上面的這個(gè)圖更新一下,應(yīng)該就是這樣的.
這樣能否理解清楚一點(diǎn)?
所以從簡(jiǎn)單的意義上來(lái)說(shuō),前端就是指的用戶這一端,后端就是指的服務(wù)器這一端,也是云端.
什么叫做服務(wù)器呢?
你在家里看到的電腦叫PC, PC一般而言,都是配置比較低,給個(gè)人使用.
除了PC還有小型機(jī),大型機(jī)等等,這種服務(wù)器不是你現(xiàn)在看到的樣子,而是這種.
算了不找圖了,我也沒(méi)怎么見(jiàn)過(guò),畢竟不經(jīng)常去機(jī)房,對(duì)型號(hào)什么的也沒(méi)那么熟悉,搜"刀片服務(wù)器"就好.
在過(guò)去,有一個(gè)笑話是這么說(shuō)的:
"不,您不可以在公司的電腦是復(fù)制,在家里的電腦上粘貼.多貴的電腦都不行"
可是現(xiàn)在真不是什么問(wèn)題了,這就是最近幾年云的價(jià)值,很多軟件都改成Sass平臺(tái),或者是App這種應(yīng)用,或者是多端統(tǒng)一.
數(shù)據(jù)放在云端,才可以做到多端統(tǒng)一,不需要本地存儲(chǔ).
云端的電腦就叫做服務(wù)器,業(yè)務(wù)層和持久層,就是在云端.
這也是前后端區(qū)分的重要區(qū)別,不是以語(yǔ)言來(lái)區(qū)分前端和后端,而是看程序是運(yùn)行在用戶端,還是運(yùn)行在云端.在用戶端的,就是前端,在云端的,就是后端.
這個(gè)概念區(qū)分了以后,我們?cè)賮?lái)看看,為什么之前叫WEB應(yīng)用,和現(xiàn)在的前端又有什么區(qū)別.
在過(guò)去,沒(méi)有SPA,沒(méi)有客戶端的時(shí)候,流行兩種模式,一種叫CS架構(gòu),一種叫BS架構(gòu).
現(xiàn)在已經(jīng)很久沒(méi)人提到了.
CS架構(gòu),其實(shí)指的就是桌面端,就是PC的應(yīng)用軟件,一般都是用C來(lái)寫(xiě)(還是C++或C#?我對(duì)C這套體系不夠熟悉,對(duì)桌面端接觸的不多.)
BS架構(gòu),指的就是網(wǎng)頁(yè)端.過(guò)去的網(wǎng)頁(yè)端,原生JS+JQuery是主流,網(wǎng)頁(yè)又分成兩種類型,一種叫靜態(tài)網(wǎng)頁(yè),一種叫動(dòng)態(tài)網(wǎng)頁(yè).
靜態(tài)網(wǎng)頁(yè)就是只有Html(不考慮JS),內(nèi)容是在Html里寫(xiě)死的.一般都用于不經(jīng)常修改的部分,比如說(shuō)關(guān)于我們,公司介紹之類的,每一個(gè)網(wǎng)頁(yè)都有自己的獨(dú)有設(shè)計(jì),不好統(tǒng)一,也不經(jīng)常修改,沒(méi)有必要做成動(dòng)態(tài).
動(dòng)態(tài)網(wǎng)頁(yè)就是指,頁(yè)面的框架一致,但是內(nèi)空不同,比如說(shuō)知乎的個(gè)人主頁(yè),結(jié)構(gòu)是相似的,但是不同的人看到的數(shù)據(jù)不一樣.這就是通過(guò)前端傳過(guò)來(lái)的用戶ID,去后端取數(shù)據(jù)的過(guò)程.
之前的動(dòng)態(tài)網(wǎng)頁(yè),把數(shù)據(jù)變成Html的這個(gè)過(guò)程,是在服務(wù)器端完成的,我把它稱之為渲染,因?yàn)檫@個(gè)術(shù)語(yǔ),還有人說(shuō)我不懂Http,說(shuō)渲染就是瀏覽器做的事兒.
這也是在過(guò)去,很多老的工程師,后端和前端一塊寫(xiě)的原因,也是很多全菜工程師的來(lái)源.
所以那個(gè)時(shí)候,說(shuō)到WEB工程師,其實(shí)在某種程度上,就是跟CS工程師做區(qū)分而來(lái)的.你想要做一個(gè)WEB程序,你大概要懂?dāng)?shù)據(jù)庫(kù),要能讀寫(xiě),還要能展示給用戶.
即使在現(xiàn)在,在傳統(tǒng)行業(yè)中也會(huì)有很多人這么做,外包公司和二三線城市非常常見(jiàn).
所以題主的原話是這樣的
"目前正在學(xué)習(xí)JAVA WEB開(kāi)發(fā)(主要后臺(tái),有時(shí)間也會(huì)學(xué)習(xí)前端)。"
這里其實(shí)就是指的是傳統(tǒng)意義上的WEB開(kāi)發(fā),前端后端都包括,這個(gè)方向,嚴(yán)格意義上來(lái)說(shuō),不屬于互聯(lián)網(wǎng),更多的見(jiàn)于企業(yè)軟件,銀行,證券,學(xué)校.
通常沒(méi)有產(chǎn)品經(jīng)理,只有項(xiàng)目經(jīng)理,每一個(gè)工程師,比技術(shù)更重要的往往是業(yè)務(wù)知識(shí).
醫(yī)療和財(cái)務(wù)也經(jīng)常有這種,OA和稅務(wù)其實(shí)挺常見(jiàn)的.因此,站在這個(gè)角度上,題主的描述沒(méi)有什么大的問(wèn)題.
當(dāng)然這里還有一個(gè)錯(cuò)誤的術(shù)語(yǔ)使用,就是后臺(tái).確切的來(lái)說(shuō),應(yīng)該叫后端.
后端是指運(yùn)行在云端的代碼.
前端是指運(yùn)行在用戶端的代碼.
前臺(tái)是指外部用戶使用的系統(tǒng).
后臺(tái)是指公司內(nèi)部使用的系統(tǒng).
這是正確的描述方式.因此,題主應(yīng)該是指做后端,也就是Java,但是同時(shí)也會(huì)寫(xiě)一些前端代碼,JS和CSS這些.
這個(gè)提前搞清楚了,再來(lái)說(shuō)說(shuō)看.
現(xiàn)在的App這么多,小程序這么火,WEB開(kāi)發(fā)是不是就沒(méi)什么價(jià)值了?
答案當(dāng)然是錯(cuò)的.
看了上邊的圖,其實(shí)已經(jīng)描述很清楚了.
在過(guò)去,把靜態(tài)網(wǎng)頁(yè),變成動(dòng)態(tài)網(wǎng)頁(yè)的過(guò)程,是由服務(wù)器端來(lái)完成的.
而現(xiàn)在,SPA的天下,把靜態(tài)網(wǎng)頁(yè)變成動(dòng)態(tài)網(wǎng)頁(yè),是由瀏覽器端完成的.
這要感謝兩個(gè)人,一個(gè)是Ajax前端,一個(gè)是App大人.
Ajax最早只是用來(lái)無(wú)刷新獲取數(shù)據(jù),減少網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量.
現(xiàn)在被原來(lái)當(dāng)成是前端和后端的標(biāo)準(zhǔn)訪問(wèn)方式.
App其實(shí)是脫胎在于原有的CS架構(gòu),在CS架構(gòu)中,過(guò)去是通過(guò)WEBService等傳輸數(shù)據(jù),用XML來(lái)描述,而在現(xiàn)在,多半是用Json.
而手機(jī)端,Android和Ipone,其實(shí)就是兩臺(tái)小小計(jì)算機(jī),手機(jī)手機(jī),現(xiàn)在可以理解為就是拿在手里的計(jì)算機(jī).
所以Android和Iphone理所當(dāng)然的選擇了用Http的方式,用Json格式來(lái)向后端傳輸數(shù)據(jù).
用圖來(lái)表示,就是這樣的.
畫(huà)個(gè)圖用了13分鐘.
這是過(guò)去的樣子,那個(gè)時(shí)候,說(shuō)是WEB開(kāi)發(fā)要學(xué)Java和JS,不算太過(guò)分.
那么Andriod和IOS是什么樣子的呢?他們理論上來(lái)講和CS架構(gòu)是等同的.所以他們是這樣的.
很好,這次只用了三分鐘.
看到客戶端和服務(wù)器端之間的差別了么?
靜態(tài)頁(yè)面,素材,代碼是提前安裝在用戶手機(jī)上的.在Android是就是APK,在IOS上就是IPA.為什么客戶端的用戶體驗(yàn)比在網(wǎng)頁(yè)端好,就在于客戶是需要你先安裝,在安裝的時(shí)候,把一些模板和素材提前下載到本地,和后端的通信,只獲取數(shù)據(jù)就好.
這直接導(dǎo)致了移動(dòng)移動(dòng)的流行,很早之前智能手機(jī)就可以訪問(wèn)網(wǎng)頁(yè),但是網(wǎng)頁(yè)做不到這種流暢的體驗(yàn),原因就在于是,每打開(kāi)一次網(wǎng)頁(yè),都需要加載一次資源,代碼,樣式等等,而在過(guò)去4G還沒(méi)有那么流暢,手機(jī)的內(nèi)存和CPU沒(méi)有那么大和快的時(shí)候,瀏覽器的應(yīng)用體驗(yàn)很差,基本上是不可用的狀態(tài).
現(xiàn)在呢?你其實(shí)很難感知到,你的手機(jī)和云端一直相連.
所以這個(gè)時(shí)候的后端工程師做什么呢?
一邊繼續(xù)提供WEB服務(wù),一邊給Android和IOS提供數(shù)據(jù)接口.
兩者之間的差別,就在于是過(guò)去需要在服務(wù)器端用模板技術(shù),把靜態(tài)網(wǎng)頁(yè)變成動(dòng)態(tài)網(wǎng)頁(yè).
而現(xiàn)在,需要生成JSON的數(shù)據(jù)接口,不用再關(guān)心頁(yè)面如何跳轉(zhuǎn).
那后端的工程量是減輕了多少呢?
其實(shí)跟沒(méi)減輕相差不多,因?yàn)橐坏┑搅嗽贫?后端的主要工作,其實(shí)是在架構(gòu)方面.這個(gè)等下,我還是會(huì)圖來(lái)表示一下.
我們先接著往下看,看看WEB怎么改變這種被App不斷蠶食的狀態(tài).
App應(yīng)用增多,大量的開(kāi)發(fā)人員轉(zhuǎn)向了Andriod和IOS,難道網(wǎng)頁(yè)就死了么?
移動(dòng)時(shí)代造就了很多英雄,性能和用戶體驗(yàn)是必不可少的環(huán)節(jié).
而WEB可不可以和Android和IOS一樣,也能夠提前把資源加載到本地,提前把代碼放到本地,和后端只通過(guò)數(shù)據(jù)接口來(lái)通信?
答案當(dāng)然是可以的.Manifest+Ajax就是解決這個(gè)問(wèn)題的好方案.
Manifest可以讓瀏覽器離線使用網(wǎng)頁(yè),所以,理論上來(lái)講,你的網(wǎng)頁(yè)也只需要讓用戶加載第一次.通過(guò)版本號(hào)來(lái)判斷是否需要更新本地的文件.再通過(guò)Ajax獲取數(shù)據(jù),就可以實(shí)現(xiàn)和App一樣的功能.
畫(huà)成圖可能是這個(gè)樣子的.
SPA技術(shù)的發(fā)展更是給了前端更好用的工具,完美的復(fù)用框架,只更換其中的內(nèi)容,很適合網(wǎng)頁(yè)的結(jié)構(gòu).
所以再回過(guò)頭來(lái)看題主的問(wèn)題.
感覺(jué)現(xiàn)在很多WEB網(wǎng)站都只是展示性的,用戶主要活躍在移動(dòng)APP上。不知道現(xiàn)在WEB開(kāi)發(fā)還有什么應(yīng)用的前景?
因?yàn)轭}主之前說(shuō)了,自己主要是做后臺(tái)(Java),=>其實(shí)應(yīng)該是自己主做后端,也會(huì)寫(xiě)一點(diǎn)JS.
那么從現(xiàn)在的結(jié)構(gòu)圖上來(lái)看,所謂的用戶活躍在移動(dòng)App上,對(duì)后端人員的影響有多大呢?
1.在Android和IOS的使用場(chǎng)景下,后端人員的職責(zé)減輕,不再用模板語(yǔ)言,將靜態(tài)網(wǎng)頁(yè)轉(zhuǎn)變成動(dòng)態(tài)網(wǎng)頁(yè),只需要提供Json數(shù)據(jù)接口.
2.在SPA的使用場(chǎng)景下,后端人員的職責(zé)減輕,和App端一樣,也是只需要提供數(shù)據(jù)接口.
這代表什么含義?代表后端很開(kāi)心啊,本來(lái)后端的職責(zé)就是架構(gòu)的穩(wěn)定和可擴(kuò)容性,業(yè)務(wù)邏輯什么的都是小菜,負(fù)責(zé)前端展示也不是后端這幫悶騷男的High點(diǎn).
所以用戶活躍在App上,對(duì)后端人員的影響就是,把一些原本不想專注,也不愿意專注的技術(shù)棧移走了,繼續(xù)專注于自己的架構(gòu)穩(wěn)定上.
什么算后端架構(gòu)呢,后端不是畫(huà)了一個(gè)增刪改查么,不就是在圖里一個(gè)方框表示么.
我們等會(huì)再看一下,后端倒底是什么樣的.你就會(huì)明白,為什么說(shuō)移動(dòng)App的發(fā)展,包括SPA的發(fā)展,以及小程序的發(fā)展,不但不會(huì)對(duì)后端有沖擊,反而讓后端的地位更穩(wěn)重.
第二層,初級(jí)架構(gòu)圖,系統(tǒng)若只如初建,寫(xiě)什么架構(gòu)來(lái)現(xiàn)眼.
一切一切的開(kāi)端,都來(lái)自于互聯(lián)網(wǎng)的用戶壓力.
如果沒(méi)有來(lái)自用戶訪問(wèn)的壓力,那么后端的世界就太簡(jiǎn)單了.
再重新回過(guò)頭來(lái)看這張圖.
在這里,業(yè)務(wù)層的一個(gè)目標(biāo)就是把數(shù)據(jù)取出來(lái),再轉(zhuǎn)換成Json數(shù)據(jù)接口給前端.
而持久層呢,通常是用數(shù)據(jù)庫(kù),而數(shù)據(jù)最常用的還是關(guān)系數(shù)據(jù)庫(kù),在關(guān)系數(shù)據(jù)庫(kù)中,最常見(jiàn)的是Mysql.
Mysql本身是不提供Json接口的,所以才會(huì)出來(lái)ORM這種東西,把數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)變成Java里的Model,再進(jìn)一步拼裝成Json數(shù)據(jù).
Mysql靠什么和業(yè)務(wù)層交互呢?靠Sql語(yǔ)句.
Sql語(yǔ)句定義了一套語(yǔ)法規(guī)則,最簡(jiǎn)單的就是 select id from user where name = '暗滅'
這種單表查詢,意思是我要用戶名表查詢名字=暗滅的人的ID.
然而Mysql并不是單純的存取數(shù)據(jù),它還支持多種查詢方式,還支持函數(shù).這表示什么呢?
很多數(shù)據(jù)我都可以通過(guò)Sql語(yǔ)句,讓Mysql來(lái)幫我實(shí)現(xiàn)了~~
如果你有機(jī)會(huì)看到很多外包團(tuán)隊(duì)的代碼,你會(huì)發(fā)現(xiàn)他們的特點(diǎn)就是,Java做為中間件,幾乎不做任何的業(yè)務(wù)邏輯處理,寫(xiě)代碼的套路就是先設(shè)計(jì)表結(jié)構(gòu),再寫(xiě)一堆Sql語(yǔ)句,然后Java只是做為一個(gè)中間件把SqL語(yǔ)句的結(jié)果,傳達(dá)給前端而已.幾乎沒(méi)有什么業(yè)務(wù)邏輯.
甚至連接口都沒(méi)有...只有一個(gè)通用的接口(這種代碼我看完之后也是醉了.)
他的壞處在哪里呢?
不好調(diào)試,這是問(wèn)題之一,但是不好調(diào)試并不是不能調(diào)試,忍一忍還能過(guò)去.
性能不好,這是問(wèn)題之二.
這個(gè)性能問(wèn)題是致命的問(wèn)題啊.
Mysql本身,并不是為了支持高并發(fā)的性能而出現(xiàn)的,他提供的各種復(fù)雜的Sql語(yǔ)法,也很難在性能上達(dá)標(biāo).
簡(jiǎn)單說(shuō),Mysql在性能上的支持,最重要的就是索引.
各種Sql優(yōu)化的核心也就是怎么樣多利用Mysql的索引.
但是SQL的優(yōu)化總是有瓶頸的.這種瓶頸體現(xiàn)在兩個(gè)地方.
一個(gè)是復(fù)雜的Sql語(yǔ)句執(zhí)行的速度非常慢,有可能幾十秒.
另一個(gè)是一旦并發(fā)到200以上或者更高,Mysql就會(huì)搞不定.
像淘寶雙11這種訪問(wèn)量,單純靠Mysql可以么?
噢,剛剛還漏說(shuō)了一句,性能還可能靠分庫(kù)分表來(lái)解決一部分.
包括讀寫(xiě)分離等.但是無(wú)論哪種解決方案,其實(shí)給我們的思考就是,有沒(méi)有一種比較簡(jiǎn)單的方式,能夠承擔(dān)起用戶的高并發(fā),并且擴(kuò)展性好,又足夠的穩(wěn)定?
這時(shí)候有兩種方案誕生.
一種是找到關(guān)系數(shù)據(jù)庫(kù)的弱點(diǎn),直接升級(jí)為Kev-Value數(shù)據(jù)庫(kù),又被稱之為NoSql數(shù)據(jù)庫(kù).
一種是緩存.
緩存是出現(xiàn)在KV數(shù)據(jù)庫(kù)之前的,如果我沒(méi)記錯(cuò)的話.
什么叫緩存呢?
Mysql自己有緩存.
舉個(gè)例子,在修真院的課程體系中,所有的職業(yè)都有15個(gè)任務(wù),每個(gè)任務(wù)都有任務(wù)詳情,操作步驟.
如果我查詢的是Java的任務(wù)體系,我會(huì)訪問(wèn)數(shù)據(jù)庫(kù).
網(wǎng)絡(luò)傳輸啊,并發(fā)請(qǐng)求啊還是會(huì)讓Mysql搞不定大并發(fā)的場(chǎng)景.
怎么解決?
我可不可以在Java的虛擬機(jī)里,把取過(guò)來(lái)的任務(wù)數(shù)據(jù)全部用對(duì)象存儲(chǔ)?
很簡(jiǎn)單啊,一個(gè)Map<Long,List<Task>> id_taskList 就搞定了.
前端來(lái)請(qǐng)求的時(shí)候,只要是告訴我ID,我就從id_taskList里去,根本不用去訪問(wèn)數(shù)據(jù)庫(kù).
這個(gè)時(shí)候如果有并發(fā)請(qǐng)求,我會(huì)害怕么?
根本不怕~~
而且我完全可以做負(fù)載均衡啊.理論上來(lái)說(shuō),如果只是請(qǐng)求這么一個(gè)任務(wù)列表的話,這種方式就足夠了.
具體單機(jī)能扛多少壓力,可以去試一下.TPS在1000應(yīng)該問(wèn)題不大.
相關(guān)案例查看更多
相關(guān)閱讀
- 網(wǎng)站建設(shè)電話
- 云南網(wǎng)站制作
- 云南網(wǎng)站開(kāi)發(fā)哪家好
- flex
- 網(wǎng)絡(luò)公司電話
- 云南網(wǎng)站建設(shè)服務(wù)
- 云南小程序制作
- 江蘇小程序開(kāi)發(fā)
- 制作一個(gè)小程序
- 云南網(wǎng)絡(luò)公司
- 云南網(wǎng)站維護(hù)
- 云南建站公司
- python開(kāi)發(fā)小程序
- 出入小程序
- 電商網(wǎng)站建設(shè)
- 云南網(wǎng)站建設(shè)選
- 報(bào)廢車管理系統(tǒng)
- 云南網(wǎng)絡(luò)營(yíng)銷
- 旅游網(wǎng)站建設(shè)
- 開(kāi)發(fā)微信小程序
- 汽車回收管理系統(tǒng)
- 小程序被攻擊
- 云南做網(wǎng)站
- 大理小程序開(kāi)發(fā)
- 排名
- 網(wǎng)站建設(shè)需要多少錢
- 云南網(wǎng)站建設(shè)費(fèi)用
- 網(wǎng)站優(yōu)化哪家好
- 公眾號(hào)模板消息
- 網(wǎng)站建設(shè)靠譜公司