產(chǎn)品必懂的Web建站技術(shù)!

推薦:產(chǎn)品經(jīng)理到底需不需要懂技術(shù),懂要懂多少?這次小編為您整理詳細(xì)的的建站技術(shù),讓你今后和技術(shù)溝通更加順利。
首先要知道網(wǎng)站訪問(wèn)大概是什么個(gè)過(guò)程:
假設(shè)你在瀏覽器地址欄輸入這個(gè)問(wèn)題的地址
http://www.zhihu.com/question/22689579?訪問(wèn)過(guò)程和下圖差不多
HTML 與 CSS
你家電腦拿到一個(gè) html (就是上圖 HTTP 響應(yīng)的 body 里的內(nèi)容)之后,就會(huì)對(duì)它進(jìn)行解析渲染。HTML 就是一種標(biāo)記語(yǔ)言。類比一下,大家在論壇上經(jīng)常會(huì)用一些代碼來(lái)添加富文本內(nèi)容,舉一些栗子:
[img]圖片地址[/img]?用來(lái)貼圖
[url]超鏈接[/url]?用來(lái)貼地址
[del]呵呵[/del]?表示標(biāo)簽里的文字應(yīng)該被刪掉(默認(rèn)添加刪除線效果)
這種論壇代碼也是一種標(biāo)記語(yǔ)言,HTML 的作用就和它差不多。服務(wù)器返回給你的html文件里面,寫的是一些代碼,大概是這樣的:
瀏覽器拿到這些代碼之后,分析一下給你渲染好頁(yè)面顯示出來(lái),如果不用css,效果是這樣的,按照瀏覽器默認(rèn)的樣式顯示出列表、圖片、超鏈接、輸入框、按鈕等等:
是不是覺(jué)得默認(rèn)樣式有點(diǎn)看瞎狗眼呢……所以很多時(shí)候我們需要自定義樣式,現(xiàn)行通用的規(guī)定樣式的語(yǔ)言是CSS,我們可以用它寫一些定義樣式的代碼,然后在 html 文件里用一個(gè)<link>標(biāo)簽把這些規(guī)定樣式的 CSS 代碼與表達(dá)內(nèi)容語(yǔ)義的 HTML 代碼關(guān)聯(lián)起來(lái),然后你就能看到一個(gè)符合人類正常審美的頁(yè)面了:
CSS 代碼的格式基本是
第一個(gè)屬性對(duì)應(yīng)的代碼翻譯成人話,就是它的位置(position)應(yīng)該是不動(dòng)(fixed)的,瀏覽器會(huì)兢兢業(yè)業(yè)地去實(shí)現(xiàn)這段代碼要求實(shí)現(xiàn)的效果, 所以你在頁(yè)面上翻來(lái)翻去頂上那個(gè)導(dǎo)航條都會(huì)死死地黏在窗口頂部不跟著滾動(dòng)。
再拿里面的其他幾個(gè)屬性做栗子解釋一下就是:
left 和 top 為零指明這個(gè)導(dǎo)航條要緊貼著窗口的左上角
width 和 height 指定這個(gè)導(dǎo)航條的寬和高
background 指明這個(gè)導(dǎo)航條的背景是一種漸變的藍(lán)色
瀏覽器就會(huì)根據(jù)這些 CSS 代碼,“畫”出對(duì)應(yīng)的樣式。
HTML 5 與 XHTML
像人的語(yǔ)言一樣,網(wǎng)絡(luò)上的網(wǎng)頁(yè)里的 HTML 代碼也不一定是標(biāo)準(zhǔn)的,好比有時(shí)候你發(fā)音不太標(biāo)準(zhǔn),別人會(huì)去猜測(cè)你說(shuō)的到底是什么一樣,有些時(shí)候前端程序猿不小心寫錯(cuò)了 HTML,瀏覽器也會(huì)試圖猜測(cè)他們?cè)瓉?lái)想寫的是什么,做對(duì)應(yīng)的渲染,而猜是要有一個(gè)常識(shí)做依據(jù)的。加上有些瀏覽器支持一些標(biāo)簽,有一些又不支持,以及其他混亂的情況,為了防止大家雞同鴨講,我們需要對(duì) HTML 代碼里能有什么標(biāo)簽,標(biāo)簽怎么寫,標(biāo)簽可以有什么屬性這些東西有一定的共識(shí),建立一個(gè)通行的標(biāo)準(zhǔn),HTML5 就是其中一個(gè)比較新的標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)新加了很多可以用的標(biāo)簽和屬性,然后各大瀏覽器也吭哧吭哧按這個(gè)標(biāo)準(zhǔn)去實(shí)現(xiàn)了很多這些新加的標(biāo)簽和屬性,本來(lái)前端程序員要寫一堆代碼去實(shí)現(xiàn)的效果,現(xiàn)在瀏覽器都給你實(shí)現(xiàn)好了,只要寫兩三行,調(diào)用一下瀏覽器給你實(shí)現(xiàn)的部分就能搞定,簡(jiǎn)單愉快,所以很多人都在熱情地推廣這個(gè)標(biāo)準(zhǔn)~(當(dāng)然新標(biāo)準(zhǔn)也不可能是完美的,總會(huì)有一些問(wèn)題,怕跑題這里按下不表~)
至于 XHTML,就是 HTML 的近親 XML 和 HTML 自己的雜交品種,對(duì)語(yǔ)法要求比較嚴(yán)格,并且為了兼容 XML,在語(yǔ)法上與 HTML 有一些不同~
JavaScript 與瀏覽器腳本
有了表示內(nèi)容和語(yǔ)義的 HTML,規(guī)定樣式的 CSS,得到的是一個(gè)靜態(tài)的頁(yè)面,沒(méi)什么動(dòng)畫(其實(shí)用 CSS 還是可以有一些動(dòng)畫的,不過(guò)這個(gè)跑題了),按 F5 才會(huì)刷新數(shù)據(jù),都 21世紀(jì)了,這么呆板單調(diào)的網(wǎng)頁(yè)怎么能展現(xiàn)我大智人種族的創(chuàng)造性口胡!于是我們有了 Javascript(JS) 來(lái)給頁(yè)面添加一些動(dòng)態(tài)的效果,比如知乎問(wèn)題的標(biāo)簽,鼠標(biāo)移上去會(huì)彈出一個(gè)小窗口,這個(gè)就是 JS 實(shí)現(xiàn)的效果啦。
瀏覽器都會(huì)幫你實(shí)現(xiàn)一些 JS 可以用的工具(函數(shù),對(duì)象什么的),你只要寫一些 JS 的代碼,保存在 xxx.js 里,在 html 文件中用 <script> 關(guān)聯(lián)進(jìn)來(lái)就可以用了,像上圖這個(gè)效果應(yīng)該就包括了
鼠標(biāo)懸停到標(biāo)簽上時(shí)創(chuàng)建一個(gè)新的 <div> 小窗口
用 JS 向知乎服務(wù)器發(fā)送一個(gè)請(qǐng)求,得到這個(gè)小窗口應(yīng)該顯示的數(shù)據(jù),放在這個(gè)小窗口里(這就是所謂的AJAX,不用刷新就能與服務(wù)器進(jìn)行交互,更新頁(yè)面的一小部分~)
瀏覽器拿到這樣的代碼,就會(huì)解析并實(shí)現(xiàn)出相應(yīng)的效果,樓主問(wèn)的瀏覽器腳本,指的就是這樣子的代碼。其實(shí)用來(lái)寫瀏覽器腳本的,也不是非得JavaScript 不可,當(dāng)年還為到底用什么語(yǔ)言寫這種代碼有過(guò)一段戰(zhàn)火紛飛的時(shí)期,但現(xiàn)在塵埃落定,各大瀏覽器都默認(rèn)了:請(qǐng)用 JS 寫這些動(dòng)態(tài)效果的代碼給我解析~
以上就是前端部分的內(nèi)容,下面簡(jiǎn)述一下后端的東西吧> <
Web Server 和 Web Services
瀏覽器給服務(wù)器發(fā)一個(gè)請(qǐng)求,服務(wù)器不是一看就知道怎么響應(yīng)的。首先這些請(qǐng)求和響應(yīng)要有一個(gè)通用的寫法,也就是要有一個(gè)協(xié)議,常用的是 HTTP 協(xié)議。
像最前面的圖,服務(wù)器的響應(yīng)寫了一個(gè)狀態(tài)碼 200 OK ,是 HTTP 協(xié)議里約定俗成的一個(gè)東西,服務(wù)器寫 200 OK 在響應(yīng)里,表示“你請(qǐng)求的這個(gè)東西我有”,如果是404 Not Found,就是“你請(qǐng)求的這個(gè)東西我這里沒(méi)有”。
HTTP 響應(yīng)里還包括很多東西,比如 Content-type 表示服務(wù)器發(fā)過(guò)來(lái)的文件類型是什么(文本?動(dòng)畫?圖片?音頻?),這樣發(fā)過(guò)去了人家瀏覽器好知道怎么展示給用戶看。人家服務(wù)器怎么知道按協(xié)議要寫什么東西進(jìn)去呢,這就是 Web Server 干活的時(shí)候了。
形象化一下HTTP響應(yīng),大概就長(zhǎng)這樣:
再上個(gè)錘子,瀏覽器和服務(wù)器之間請(qǐng)求響應(yīng)的過(guò)程大致是長(zhǎng)這樣的,右下角的那些東西就是由 Web Server 生成的(服務(wù)器腳本可以做一些改動(dòng),但這些一般是 Web Server 的份內(nèi)活):
再比如說(shuō)很多時(shí)候你訪問(wèn)一個(gè)網(wǎng)站,瀏覽器里輸?shù)牡刂凡](méi)有寫明你請(qǐng)求的文件,比如這個(gè)問(wèn)題的地址是:
http://www.zhihu.com/question/22689579
但知乎的服務(wù)器其實(shí)返回了一個(gè)html給你,服務(wù)器怎么知道這個(gè)地址對(duì)應(yīng)要返回什么樣的 html 代碼給你的?也是 Web Server 干的活。
除了瀏覽器輸?shù)刂非没剀囘@種赤裸裸的訪問(wèn),客戶端與服務(wù)器的交互還有很多種,比如:
前面提到的用 JS 完成的 AJAX,有點(diǎn)像瀏覽器和服務(wù)器之間的悄悄話~
還有其他應(yīng)用軟件與服務(wù)器的交互,比如:
微信、QQ 與騰訊的服務(wù)器的交互
網(wǎng)游客戶端與網(wǎng)游公司服務(wù)器的交互
搜索引擎用來(lái)搜集網(wǎng)頁(yè)信息的程序(爬蟲)與各種各樣的網(wǎng)站服務(wù)器的交互
只要你知道用什么地址訪問(wèn)、怎樣訪問(wèn)人家的服務(wù)器,并且有相應(yīng)權(quán)限,你也可以自己寫一些程序去和他們的服務(wù)器交互(比如用微博API – 新浪微博API獲取微博,開(kāi)發(fā)第三方應(yīng)用或者做數(shù)據(jù)分析)。
從這些栗子里可以看出,客戶端與服務(wù)器的交互的主體、客體、載體是五花八門的:
服務(wù)器可以是大型機(jī)也可以是個(gè)人電腦,只要能跑相應(yīng)的程序就行
客戶端像前面舉的栗子里一樣,可以是各種軟件,而且這些軟件不一定運(yùn)行在個(gè)人電腦上,也可以是手機(jī)、平板、智能穿戴設(shè)備等等
有時(shí)候不是傳生成好的 HTML 或者其他服務(wù)器上已經(jīng)有的文件,而是傳輸經(jīng)過(guò)一定邏輯處理后生成的字符串或者其他各種封裝好的數(shù)據(jù)
像前面提到的 HTML 需要有一定標(biāo)準(zhǔn)一樣,為了防止混亂和雞同鴨講,我們又需要先對(duì)這些機(jī)器需要怎么交互達(dá)成一定共識(shí),再讓它們進(jìn)行交流。人與人之間通信,需要先有一種大家都認(rèn)識(shí)的寫法(比如簡(jiǎn)體字/繁體字)和一種彼此都懂的語(yǔ)言(比如普通話/廣東話)。要讓這些形形色色的機(jī)器能夠通過(guò)網(wǎng)絡(luò)進(jìn)行交互,我們就需要指明一種協(xié)議(比如 HTTP/HTTPS)和一種數(shù)據(jù)封裝格式(比如 HTML/XML),Web Server 提供的 Web Service,指的就是這種協(xié)議+格式的交流體系。不過(guò) Web Service 的生態(tài)系統(tǒng)和 HTML 的標(biāo)準(zhǔn)不一樣,用戶可以選擇的協(xié)議和數(shù)據(jù)封裝格式更多,普通的網(wǎng)站訪問(wèn)用的 HTTP + HTML 只是其中一種,一些封閉系統(tǒng)內(nèi)的交流還可以自己定義一個(gè)協(xié)議和格式來(lái)用(比如 QQ)。
Web Service 傳輸?shù)臄?shù)據(jù)再經(jīng)由本地客戶端(瀏覽器、QQ/微信,網(wǎng)游客戶端等)的分析渲染,就能夠以普通人能夠理解的形式展現(xiàn)出來(lái)。此外還有一些 Web Service 并不是為普通用戶設(shè)計(jì)的,像前面提到的微博API,是用來(lái)給程序猿進(jìn)行二次開(kāi)發(fā)的~
除了提供 Web Service, Web Server 還會(huì)兼顧很多功能,包括提供緩存,平衡負(fù)載,這樣在訪問(wèn)量比較大的時(shí)候能有有條不紊地接客。常見(jiàn)的現(xiàn)成的 Web Server 有開(kāi)源的 Apache、Nginx和微軟的IIS,你也可以用一些工具(比如 Node.js )自己定制一個(gè)。因?yàn)?Web Server 需要比較好的性能,所以投產(chǎn)時(shí)用的 Web Server 通常是C/C++/Java寫的,但是其實(shí)很多語(yǔ)言都可以寫,而且配合上語(yǔ)言底層的優(yōu)化和好的模型,其他語(yǔ)言寫的 Web Server也可以有不錯(cuò)的表現(xiàn)。
PHP ,服務(wù)器腳本,Web Framework
開(kāi)頭那張圖里服務(wù)器接到請(qǐng)求之后可以給訪客發(fā)送對(duì)應(yīng)的文件,但21世紀(jì)的服務(wù)器怎么可能只會(huì)“接請(qǐng)求-發(fā)文件”這么弱智的一招呢,人家還可以處理你上傳來(lái)的文件的!還可以接受你發(fā)過(guò)來(lái)的各種請(qǐng)求,去操作服務(wù)器本地的文件or數(shù)據(jù)庫(kù)的!要干這些事,自然服務(wù)器那邊也少不了要有代碼了,這些代碼就是服務(wù)器腳本。前面說(shuō)的 Web Service 傳輸?shù)臄?shù)據(jù),主要也是由服務(wù)器腳本生成,再交由 Web Server ,按照某種協(xié)議套好整個(gè)響應(yīng)的格式,返回給客戶端的。
同一個(gè)網(wǎng)址,每個(gè)人看到的頁(yè)面不一定是一樣的,比如知乎首頁(yè)的網(wǎng)址都是:
http://www.zhihu.com/
但是沒(méi)登陸和登陸之后看到的東西不一樣,登陸之后每個(gè)人看到的導(dǎo)航欄的用戶信息,關(guān)注的動(dòng)態(tài),都不一樣。服務(wù)器腳本可以對(duì)這些不同的狀態(tài),生成不同的頁(yè)面,交給 Web Server 返回給瀏覽器。
知乎的主頁(yè)給大家看到的 html 整體來(lái)說(shuō)是差不多的,都有導(dǎo)航欄,左邊是關(guān)注的動(dòng)態(tài),右邊是廣告和邊欄,每一塊的整體構(gòu)造大同小異,只是一些地方內(nèi)容有所區(qū)別。服務(wù)器腳本就是利用已知的數(shù)據(jù),在這些因人而異的地方填入相應(yīng)的內(nèi)容,生成給每個(gè)人看的頁(yè)面。
比如我的主頁(yè),導(dǎo)航欄右邊的頭像和名字跟別人看到的不一樣,就是因?yàn)檫@塊地方有一個(gè)放圖片的<img>標(biāo)簽和一個(gè)寫名字的<span>標(biāo)簽,服務(wù)器腳本在查詢本地的數(shù)據(jù)之后給我返回的頁(yè)面里<img>的標(biāo)簽填了我頭像的圖片鏈接,<span>標(biāo)簽里填了我的名字,給別人的頁(yè)面就填其他鏈接、其他名字,這樣每個(gè)人看到的頁(yè)面就不一樣了。
PHP 就是一種常見(jiàn)的用來(lái)寫服務(wù)器腳本的語(yǔ)言,其實(shí)只要是能拿來(lái)寫大家傳輸數(shù)據(jù)的通用接口(CGI)的語(yǔ)言都可以用來(lái)寫服務(wù)器腳本(也就是說(shuō)幾乎所有編程語(yǔ)言都可以寫 = =b),只是因?yàn)楝F(xiàn)成工具的豐富程度和專攻程度不一樣,所以有一些語(yǔ)言在寫服務(wù)器端腳本的時(shí)候會(huì)比較熱門。
為了方便,我們?cè)趯懛?wù)器腳本的時(shí)候,通常還會(huì)用個(gè)同語(yǔ)言寫的WebFramework 來(lái)處理各種細(xì)節(jié),防御一些常見(jiàn)的攻擊,提供跨站認(rèn)證(比如用已有的微博賬號(hào)注冊(cè)其他網(wǎng)站)的接口,利用cookie處理登陸狀態(tài)和用戶設(shè)置,生成網(wǎng)頁(yè)模版之類的。如果你用 C# 或者 Visual Basic 寫服務(wù)器腳本,就可以用 ASP.NET 這個(gè)框架實(shí)現(xiàn)這些功能,幫你省點(diǎn)麻煩。不過(guò)現(xiàn)在不少人是反過(guò)來(lái)為了一個(gè)好用的 Web Framework 去選擇它對(duì)應(yīng)的服務(wù)器腳本語(yǔ)言的。
一個(gè)普通網(wǎng)站訪問(wèn)的過(guò)程
簡(jiǎn)單概括一下,對(duì)于我們普通的網(wǎng)站訪問(wèn),涉及到的技術(shù)就是:
用戶操作瀏覽器訪問(wèn),瀏覽器向服務(wù)器發(fā)出一個(gè) HTTP 請(qǐng)求;
服務(wù)器接收到 HTTP 請(qǐng)求,Web Server 進(jìn)行相應(yīng)的初步處理,使用服務(wù)器腳本生成頁(yè)面;
服務(wù)器腳本(利用Web Framework)調(diào)用本地和客戶端傳來(lái)的數(shù)據(jù),生成頁(yè)面;
Web Server 將生成的頁(yè)面作為 HTTP 響應(yīng)的 body,根據(jù)不同的處理結(jié)果生成 HTTP header,發(fā)回給客戶端;
客戶端(瀏覽器)接收到 HTTP 響應(yīng),通常第一個(gè)請(qǐng)求得到的 HTTP 響應(yīng)的 body 里是 HTML 代碼,于是對(duì) HTML 代碼開(kāi)始解析;
解析過(guò)程中遇到引用的服務(wù)器上的資源(額外的 CSS、JS代碼,圖片、音視頻,附件等),再向 Web Server 發(fā)送請(qǐng)求,Web Server 找到對(duì)應(yīng)的文件,發(fā)送回來(lái);
瀏覽器解析 HTML 包含的內(nèi)容,用得到的 CSS 代碼進(jìn)行外觀上的進(jìn)一步渲染,JS 代碼也可能會(huì)對(duì)外觀進(jìn)行一定的處理;
用戶與頁(yè)面交互(點(diǎn)擊,懸停等等)時(shí),JS 代碼對(duì)此作出一定的反應(yīng),添加特效與動(dòng)畫;
交互的過(guò)程中可能需要向服務(wù)器索取或提交額外的數(shù)據(jù)(局部的刷新,類似微博的新消息通知),一般不是跳轉(zhuǎn)就是通過(guò) JS 代碼(響應(yīng)某個(gè)動(dòng)作或者定時(shí))向 Web Server 發(fā)送請(qǐng)求,Web Server 再用服務(wù)器腳本進(jìn)行處理(生成資源or寫入數(shù)據(jù)之類的),把資源返回給客戶端,客戶端用得到的資源來(lái)實(shí)現(xiàn)動(dòng)態(tài)效果或其他改變。
注意這只是小網(wǎng)站里比較常見(jiàn)的模型,大網(wǎng)站為了解決規(guī)模問(wèn)題還會(huì)有很多處理,每個(gè)環(huán)節(jié)都會(huì)有一些細(xì)微的差異,中間還會(huì)使用各種各樣的工具減輕服務(wù)器的壓力,提高效率,方便日常維護(hù)~
延伸閱讀 —— 那些看花眼的名詞
為了方便調(diào)試,很多 Web Framework 會(huì)自帶一個(gè)簡(jiǎn)單的 Web Server,或者有些 Web Server 會(huì)自帶一個(gè)簡(jiǎn)單的 Web Framework ,實(shí)際部署到服務(wù)器上開(kāi)放使用的時(shí)候?yàn)榱诵阅芑蛘甙踩榷喾矫娴目紤],可以把內(nèi)置的 Web Server 換成其他的,比如 Apache 或者 Nginx (舉個(gè)栗子,知乎用的是 Tornado 做 Framework,Server 換成了 Nginx,見(jiàn)知乎使用了哪些框架和開(kāi)源庫(kù)?)。如果是開(kāi)源的東西,還可以在遵守開(kāi)源協(xié)議的前提下自己改一下再用~
因?yàn)楹蠖瞬幌袂岸艘呀?jīng)有 HTML + CSS + JS 這樣的既定事實(shí)標(biāo)準(zhǔn),服務(wù)器腳本與 Web Framework 的選擇很多,所以新手會(huì)聽(tīng)到很多眼花繚亂的技術(shù)名詞的地方多在這里~ 舉一些栗子,早年常見(jiàn)的服務(wù)器端語(yǔ)言有:
開(kāi)源的 PHP
Sun 公司的 JSP 中使用的 Java
微軟的 ASP 中使用的 VBScript
現(xiàn)在在這方面的應(yīng)用熱起來(lái)的語(yǔ)言有
Python,對(duì)應(yīng)常見(jiàn)的 Framework 包括知乎和Quora有用到的Tornado(其實(shí)是自帶 Framework 的 Web Server),社區(qū)很成熟的 Django (用戶包括 Instagram、Pinterest)等
Ruby,一般都用 Rails 這個(gè) Framework,用戶包括 Github、早期的 Twitter 等
逆天的 JavaScript,有了 Node.js 這個(gè)平臺(tái),Web Server、服務(wù)器腳本和瀏覽器腳本全都可以用 JavaScript 來(lái)寫……Node.js上最常用的 Framework是Express
微軟家的則跟著 ASP.NET 轉(zhuǎn)移到了C# 或者 Visual Basic
Erlang,擅長(zhǎng)大規(guī)模的并發(fā),不少游戲公司拿來(lái)寫服務(wù)器,靠幾十個(gè)工程師支撐幾億用戶的WhatsApp也是用的這個(gè)~
幾種常見(jiàn)的架構(gòu)包括:
LAMP = Linux + Apache + MySQL + PHP(P還可能是Python或Perl。有時(shí)候L會(huì)改成W=Windows。),也就是服務(wù)器上的操作系統(tǒng)是 Linux,Web Server 用 Apache,數(shù)據(jù)庫(kù)用 MySQL,服務(wù)器腳本用 PHP,這些都是開(kāi)源技術(shù),網(wǎng)站起步時(shí)用起來(lái)的成本會(huì)比較低,所以是普通網(wǎng)站里非常常見(jiàn)的架構(gòu)(雖然對(duì)于發(fā)展得很大的網(wǎng)站會(huì)遇到很多瓶頸),F(xiàn)acebook就是這種,淘寶也曾經(jīng)是。
J2EE,Java 世界的架構(gòu),通常是企業(yè)用的(銀行、大型公司,.etc),比較常見(jiàn)地還會(huì)搭配一種 UNIX 做操作系統(tǒng),Apache 做 Web Server,Tomcat 轉(zhuǎn)換 JSP 到 Java 給服務(wù)器程序用(其實(shí)它也自帶 Web Server),Oracle 數(shù)據(jù)庫(kù)等等。不一定拿來(lái)建站,常常用來(lái)提供企業(yè)里的各種需要用到網(wǎng)絡(luò)的業(yè)務(wù)。我們學(xué)校教務(wù)系統(tǒng)就是用J2EE做的=。= 淘寶現(xiàn)在也是從LAMP轉(zhuǎn)型到了這個(gè)。
http://ASP.NET,微軟家的架構(gòu),通常會(huì)搭配 Windows Server 操作系統(tǒng),SQL Server 數(shù)據(jù)庫(kù),IIS 做 Web Server。StackOverflow和京東(曾經(jīng))就是這個(gè)架構(gòu)。
神奇的MEAN架構(gòu),MongoDB做數(shù)據(jù)庫(kù),Express做 Web Framework,Angular 做前端的 JavaScript 框架,Node.js 用于編寫 Web Server。神奇之處在于這幾個(gè)東西的語(yǔ)言都是 JavaScript (MongoDB的實(shí)現(xiàn)不是,但與外界溝通用的語(yǔ)言是)。因?yàn)槭潜容^新的架構(gòu),還有待時(shí)間的考驗(yàn),不過(guò)被很多人(尤其是靠 JavaScript 吃飯的前端程序猿們)熱切關(guān)注。
一般來(lái)說(shuō)重點(diǎn)不在技術(shù)而且在乎成本的新網(wǎng)站比較喜歡用 LAMP,重視安全穩(wěn)定和速度的企業(yè)和機(jī)構(gòu)喜歡 J2EE,想省事的網(wǎng)站喜歡 ASP.NET,比較 Geek 的網(wǎng)站和創(chuàng)業(yè)公司喜歡折騰各種 Python、Ruby、Node.js世界的東西,Google 這樣現(xiàn)成的技術(shù)都解決不了需求的超大型網(wǎng)站就自己折騰解決方案。
雖然可以用的語(yǔ)言和所屬體系五花八門,其實(shí)服務(wù)器端程序要做的事情本質(zhì)上都差不多的,就好比自然世界中要表達(dá)“吃過(guò)了沒(méi)”這句話的意思,你可以用各種各樣的語(yǔ)言在各種各樣的場(chǎng)景里表達(dá)出來(lái)~
作者:張秋怡
來(lái)源:知乎
原文地址:http://www.zhihu.com/question/22689579
大哥,圖都掛了
老哥寫的·1很好,但是圖片掛了,想用圖片結(jié)合起來(lái)肯定理解的更好
這才是技術(shù)小白想看的技術(shù)入門文章。
涉及架構(gòu)這一塊沒(méi)怎么看明白,要是能再寫詳細(xì)點(diǎn)兒就更好了
不錯(cuò)的文章,言簡(jiǎn)意賅,一看就懂
膩害了,終于把we涉及的東西串起來(lái)了
深入淺出,化繁為簡(jiǎn),大贊??
感謝分享
??
感謝分享,讓非程序員的人也可以明白一些常規(guī)的原理。 ??
Nice
關(guān)于web技術(shù)很全的知識(shí),表達(dá)得也言簡(jiǎn)意賅
??