---
title: Introduction to Web Programming
tags: 107-2 Ric's Web Programming
slideOptions:
theme: league
transition: 'fade'
slidenumber: true
# parallaxBackgroundImage: 'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'
---
### Introduction to Web Programming
<br>
<br>
<br>
Spring 2019 。 Ric Huang
---
### Web。Programming
* 顧名思義,就是提供各式各樣「網路服務」的程式
* 對於使用者而言,可以透過瀏覽器(Web Browser)、APP、或是特定裝置上的軟體獲得服務
* 簡化起見,本課程將 focus 在透過瀏覽器所產生的網路服務
---
### Web Browser
![](https://i.imgur.com/svC405B.png)
---
### 前端。後端
* 顧名思義,前端就是在前面利用各種介面(UI)設計、服務使用者的程式,而後端就是在後面負責各種(較為消耗資源的)運算與儲存、回傳給前端服務資料的程式
* 也許更精確的講法是:client-side (客戶端) vs. server-side (伺服器端)
---
### 伺服器
![](https://i.imgur.com/9povJQ5.png)
---
### 前端。瀏覽器 (Web Browser) \[[ref](https://www.telegraph.co.uk/technology/microsoft/11577364/Web-browsers-a-brief-history.html)\]
![](https://i.imgur.com/VqKIaOX.png)
First web browser: WorldWideWeb (aka. Nexus), by Tim Berners Lee, 1990
---
### 前端。瀏覽器 (Web Browser) \[[ref](https://www.telegraph.co.uk/technology/microsoft/11577364/Web-browsers-a-brief-history.html)\]
![](https://i.imgur.com/i5D7H0s.png)
Lynx, a text-based browser, by a team of students and staff at the university (of Kansas), 1992 (http://lynx.browser.org/)
---
### 前端。瀏覽器 (Web Browser) \[[ref](https://www.telegraph.co.uk/technology/microsoft/11577364/Web-browsers-a-brief-history.html)\]
![](https://i.imgur.com/UwJ0MBy.png)
Mosaic, often regarded as the first graphical web browser, was developed by National Center for Supercomputing Applications (NCSA) of UIUC, in late 1992 (Led by Marc Andreessen)
---
### 前端。瀏覽器 (Web Browser) \[[ref](https://www.telegraph.co.uk/technology/microsoft/11577364/Web-browsers-a-brief-history.html)\]
![](https://i.imgur.com/ADUdKRn.png)
Netscape, founded by Marc Andreessen, James H. Clark, and 4 others from Mosaic, was the most successful commercial web company in 90’s
---
### 前端。瀏覽器 (Web Browser) \[[ref](https://www.telegraph.co.uk/technology/microsoft/11577364/Web-browsers-a-brief-history.html)\]
![](https://i.imgur.com/FjClIn1.png)
---
### 前端。瀏覽器 (Web Browser) \[[ref](https://www.telegraph.co.uk/technology/microsoft/11577364/Web-browsers-a-brief-history.html)\]
![](https://i.imgur.com/7COwYcj.png)
Internet Explorer (IE), by Microsoft, in 1995
---
### 前端。瀏覽器 (Web Browser) \[[ref](https://www.telegraph.co.uk/technology/microsoft/11577364/Web-browsers-a-brief-history.html)\]
![](https://i.imgur.com/VHZilSN.png)
Opera, by Telenor, in 1996
---
### 前端。瀏覽器 (Web Browser) \[[ref](https://www.telegraph.co.uk/technology/microsoft/11577364/Web-browsers-a-brief-history.html)\]
![](https://i.imgur.com/fsYAAOu.png)
Safari, by Apple, in 2003
---
### 前端。瀏覽器 (Web Browser) \[[ref](https://www.telegraph.co.uk/technology/microsoft/11577364/Web-browsers-a-brief-history.html)\]
![](https://i.imgur.com/41F8ysZ.png)
Firefox, by Mozilla, in 2004
---
### 前端。瀏覽器 (Web Browser) \[[ref](https://www.telegraph.co.uk/technology/microsoft/11577364/Web-browsers-a-brief-history.html)\]
![](https://i.imgur.com/GJLUZud.png)
Chrome, by Google, in 2008
---
### 前端。瀏覽器 (Web Browser) \[[ref](https://www.telegraph.co.uk/technology/microsoft/11577364/Web-browsers-a-brief-history.html)\]
![](https://i.imgur.com/h4jbYF0.png)
Edge, by Microsoft, in 2015
---
### 前端。瀏覽器 (Web Browser) \[[ref](https://www.telegraph.co.uk/technology/microsoft/11577364/Web-browsers-a-brief-history.html)\]
![](https://i.imgur.com/sK4LTzl.png)
---
### 前端。網頁
* 這二十幾年來網頁有許多的改變:https://archive.org/
* Web 1.0 (90’s ~ early 00’s)
* 文字 + 圖片 + 超連結 (HyperText Markup Language, HTML)
* 各種小花招 (跑馬燈、計數器、奇怪的游標...)
* 開始有搜尋功能
---
### 前端。網頁
* Web 2.0 (early 00’s ~ now)
* wikipedia.org、各種論壇/部落格
* 各種需要會員登入的網站
* e-commerce
* Social network
---
### 靜態網頁
* 瀏覽器打開某網址,而從該網址的 web server 回傳 HTML 檔,show 在瀏覽器上,網頁的內容不會隨著使用著的瀏覽行為而有所改變
* 如果按下超連結或是提交表單,是跳掉別的網址,網頁內容會重新下載
* 換頁時會有「白畫面」
---
### 靜態網頁
![](https://i.imgur.com/zVOgvms.png)
---
### 動態網頁
網頁內嵌會聽取(listen)某些事件(events, 如:滑鼠點擊、移動,鍵盤輸入,登入...等)的腳本語言(script language, 如:JavaScript),當事件發生時,瀏覽器會根據腳本的描述去伺服器(i.e. web server)與資料庫抓取資料,回傳到瀏覽器,而更動「部分」的網頁內容
---
### 動態網頁
* 計數器:登入時人數加一
* 相簿:按下按鈕可以切換相片
* 搜尋框:輸入文字可以搜尋資料
* 會員登入:根據會員資料顯示不同內容
* 社群網路:朋友互動的即時顯示
---
### 動態網頁
![](https://i.imgur.com/g5qiv0P.png)
---
### Ajax: Asynchronous JavaScript and XML
* Ajax 透過非同步的方式跟後台拿資料,在這中間使用者還是可以進行其他操作,不會被打斷
* 雖然叫 Ajax, 但現代的網頁都用 JSON \[[ref](http://indus3.org/json-and-game-data/#.WpuZ1xNuYnM)\]
![](https://i.imgur.com/7J0wIhe.png)
---
#### Ajax: Asynchronous JavaScript and XML
* XML vs. JSON
![](https://i.imgur.com/7ujsTnC.png) ![](https://i.imgur.com/oQGYkUE.png)
---
### 前後端的分工逐漸明確
* 前端:JavaScript 來負責顯示畫面 (client-side rendering)
* 後端:as an API server, 負責透過定義好的介面來產生資料
* 框架:使用Ajax,並定義一些 MVX (如:MVC) 的架構
---
### 前端。Client-side Rendering 的演進
* 從 2010 年開始,風向一直在變
![](https://i.imgur.com/S6Js9OO.png)
---
### React.js。元件式開發+狀態決定 UI
* 以前:某個 UI 呈現出來的 bug 可能要數個操作步驟來重現,debug 過程可能會讓你很崩潰
* With React.js components/states:
`var AppUI = AppComponent(state);`
* 讓資料儲存在單一地方 (i.e. single source of truth),所有的改變會立即反應在 component 上面
* 除了 debug 較為輕鬆之外,頁面更新的速度也可以變快 (more to cover later)
// more to cover in later meetings
---
### 後端語言更是百花齊放~
可以跑在伺服器 (電腦) 的程式語言都可以用
![](https://i.imgur.com/YneTMvU.png)
---
## End