--- title: 靜態網頁vs動態網頁vsSPA tags: tutorials disqus: hackmd --- # 網頁發展歷史 : 靜態網頁、動態網頁、SPA 學習重點名詞 : 靜態網頁、動態網頁、SAP ## 1. HTML靜態網頁時期 :::info 過去++伺服器++端只需一個++HTML檔++即可完成一個靜態網頁, ++使用者++只要透過++伺服器的網址++拜訪到伺服器, 即可拿到這份HTML檔回使用者本機, 最後透過本機上的++瀏覽器++把HTML檔轉譯成DOM元素並渲染在網頁上。 ::: :::spoiler 註解 上方的敘述,針對完全沒有網頁基礎的人,我用一個比喻來說明。 ++伺服器++就像中央圖書館 ++HTML檔++就像CD光碟 ++使用者++就像要借閱CD的人,這裡是指你就是那個要借閱的人 ++伺服器的網址++就像中央圖書館的地址 ++瀏覽器++就像你家的CD Player 今天你想要去中央圖書館借閱一片CD並聽取裡面的資訊內容, 你必需知道中央圖書館的地址到現場拿這一片CD回到家中, 用CD Player播放後得到他裡面的資訊。 這樣一趟資料傳輸的行為邏輯, 共有五個不可或缺的元素(HTML檔、伺服器的網址、瀏覽器) 與角色(伺服器端、使用者端)。 ▲ ::: <br> 此時使用者呼叫Server後拿到html檔,就不會再跟Server有互動了,若你點擊這張html裡的「連結」就算進入下一個循環,重新呼叫Server拿新的html檔。 這個時期html檔叫做靜態網頁,代表這張網頁內都是固定的html內容,拿到這份html就不會再跟Serve有互動了,直到你要再拿另一份全新的html檔才會呼叫Server。 ## 2. HTML+JavaScript+CSS 靜態網頁時期 :::info 這個時期伺服器端多寫了JavaScript和CSS兩份檔案,完成一個進化版的靜態網頁, 當使用者透過網址呼叫時,會得到JavaScript、CSS、HTML三個檔案。 此時的JavaScript和CSS語法是用於控制HTML檔轉譯後的DOM元素的特效和美編的。 ::: 下圖是拿到HTML後,JS與CSS如何作用最後渲(Paint)成網頁的過程。  <font color="#f00">這邊要知道的重點是JavaScript和CSS是去控制HTML檔轉譯後的DOM元素,不是去改HTML的內容喔!</font> [[延伸閱讀]渲染路徑](https://ithelp.ithome.com.tw/articles/10226590) ## 3. 動態網頁時期 :::info 動態網頁就是「我所請求的網頁有被 Server 『處理』過」,而靜態網頁就是「我所請求的網頁沒有被 Server 『處理』過」。而動態網頁不會是html檔,ex:cshtml檔、php檔....等。 ::: 舉歷來說 : 在寫ASP.NET Web的時後,你會建立cshtml檔,這個檔案不是html網頁,但類似html網頁,差別在cshtml檔會經過server處理編譯後才轉成html並吐給使用者。 cshtml檔裡面以@開頭的Razor語法,在傳給使用者前會先被Server處理過, 下方就是一個在cshtml檔裡寫Razor的例子  當cshtml經過Server處理跑if那邊的程式碼後,使用者看到的是 ```Hello``` 但如果今天cshtml沒有經過Server處理,使用者看到的會是 ```@if ("True" == "True"){<div>Hello</div>}``` 由此可知動態網頁是網頁經過Server處; 而靜態網頁就是直接把網頁當成static html來解析成文字檔 [[延伸閱讀]用php來解釋動態網頁](https://blog.huli.tw/2019/09/18/spa-common-problem-about-router/) ## 4. [補充] 什麼是 Single Page Application 靜態網頁時期,我們呼叫Server得到一張html,當我們要其他資訊,我們就會需要在透過另一個連結拿到另一張html,「整頁」再重新渲染。 **後來javascript ajax技術出現**,破解了『當使用者呼叫Server時,Server只能回傳html』這樣的行為束縛,變成『當使用者呼叫Server時,Server不只可以回傳html,也可以回傳JSON格式的資料』。 ajax技術使得我們行為模式有另一種選擇,我們需要什麼資料,我們透過ajax技術去跟Server要JSON資料就好,要到資料後,再「局部渲染」在原本使用者所在的html上,這樣我們就不用像以前為了要拿到其他資料要花時間等待整頁html重新渲染。之前我們需要「換頁」才能得到的其他不在這張靜態html上的資訊,現在我們撈取不同資料,在同一頁面上就能完成,因此叫Single Page Application。 另外我認為SPA是動態網頁也可能是靜態網頁,SPA與html是否被Server處理過這個議題無關,只要是有使用javascript ajax技術就都算是SAP [[延伸閱讀]SPA是什麼?](https://ithelp.ithome.com.tw/articles/10160709) [[延伸閱讀]為什麼我做的SPA放在GitHub Pages上就壞掉了? 因為你做的是動態網頁SPA,但GitHub Pages並不會幫你建一個Server去處理動態網頁, 一般來說GitHub Pages都是用於發佈靜態網頁,如果你做的網頁是靜態的且有使用到ajax去呼叫別的Server提供的api,這樣的靜態網頁SPA就可以發佈到GitHub Pages](https://blog.timtnlee.me/post/development/spa-on-github-page) --- ###### tags: `tutorial`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up