---
# System prepended metadata

title: 網頁前後端架構

---

# 網頁前後端架構

要講網頁排版跟動畫那些花俏東西之前，要先理解它到底是怎麼運作的，也就是網頁前後端分別在幹啥

## 前後端布局

我總共有一個伺服器，三個HTML頁面，每個頁面有各自的CSS、JS還有圖片，如下圖(因為每一頁的布局差不多，所以只做一頁的示意圖)

![](https://i.imgur.com/qoJAJ4q.png)

有一點當初搞了我很久就是HTML裡面的連結都不能只接寫相對路徑，要先用Flask裡面的url_for()函式連回server，不然會吃404

## 部屬至GitHub跟Heroku

然後要把網頁從本地部屬到GitHub上，要學寫Git，這裡我當初莫名學很久，但後來有整理出一個打法

```git=
//第一次push
git init
git add file
git commit -m "..."
git remote add origin HTTPcode
git push origin master

//之後push
git add file
git commit -m "..."
git pull --rebase //同步本地branch
git push origin master
```

再來是連線Heroku，辦帳號那些我就省略，把重點放在當初比較煩的地方，其實主要就是這額外給Heroku用的三個檔案
* requirements,txt - 告訴Heroku要裝那些函式庫
* runtime.txt - 標示python版本
* Procfile - gunicorn啟動dyno

這樣就能看到repo右下角的火箭寫active，就能在公開網域找到我的網站了好ㄟ

## 免費仔的小技巧
因為Heroku的免費專案每三十分鐘閒置就會進入休眠，這樣需要大量啟動時間，所以我需要網頁保持啟動，所以用UpTimeRobot每五分鐘戳一下我的網頁，就能大大改善啟動時間


| 加速前載入平均時間 | 加速後載入平均時間 | 
| -------- | -------- |
| 14.895    | 2.463     | 


## Tiny的結語

當初搞這一連串部屬其實用有點久，主要還是因為第一次打終端指令，現在已經能行雲流水地push了，接下來就介紹網頁版面吧

---

<ul style ="display: flex; flex-direction: row; width: 100%; justify-content: space-between;margin: 0; padding: 0;">
    <li style="list-style: none;"><a href = "https://hackmd.io/@WeberChang/rJBpwRsut" >上一篇</a></li>
    <li style="list-style: none;"><a href = "https://hackmd.io/@WeberChang/rJBpwRsut">主頁</a></li>
    <li style="list-style: none;"><a href = "https://hackmd.io/@WeberChang/BJ6op5i0t">下一篇</a></li>
</ul>