概述
什么是前端,簡單講就是在程序開發中,跟美工設計人員打交道比較多的部分。或者講是展現給多數用戶的操作界面部分,操作界面可以是實體的(比如遙控器、按鍵面片等),也可以是虛擬的(比如顯示器里的各種窗口)。大多數情況下,我們使用的是虛擬界面,也就是利用計算機圖形功能,在顯示器中畫出來供我們操作的部分。虛擬界面的好處就是輸入設備簡單(通常一個鼠標加一塊鍵盤就行了),還有就是靈活容易變通,如果客戶對界面不太滿意,改動起來相對容易點。因為是虛擬的圖形,所以理論上是可以任意進行延伸的,比如二維的圖形不能滿足要求了,還可以三維的設計。
前端技術的分類
根據應用程序宿主的不同,前端技術大致可以分成三類:
-
與設備重度關聯的嵌入式程序,這類程序通過外圍電器的信號,比如遠程PWM信號、電子元器件的電平高低來實現與用戶的交互。典型的應用有燈牌廣告、露天的信息屏、數控機床的面板等。不過,這類應用偏向於電器工程,在這里不做過多的描述。
-
基於操作系統UI接口的本地實現(C/S)。這類程序充分利用了本地的計算資源,也就是說界面的呈現主要靠宿主機器的CPU、顯示卡、內存、硬盤等本地設備來實現。這類程序在宿主機器通常以系統進程的方式來表示,有獨立的內存運行空間,盡可能多的本機資源的訪問權限。這類程序實現方式也有很多,一種是操作系統原生的API,一種是進行了部分封裝,比如MFC、VB、Delphi、GTK、QT、Android、IOS等,一種是運行在虛擬機之上的JAVA SWING、APPLE AIR、.NET WINFORM/WPF等。
-
基於結構化文檔的實現(B/S)。這個就是通常所說的HTML,界面元素使用標簽來表示,通過層疊樣式表和嵌入JS等功能,豐富界面的展示。這種界面本質是靜態的文檔,界面的切換通過超鏈接來跳轉,現在更多的使用JS操作DOM結點來實現界面的動態變化。以往HTML文檔在服務器端生成,現在已經弱化服務端的UI生成功能,而是使用客戶端的腳本庫來,來實現復雜的界面。這類應用最顯著的特點,就是界面需要WEB瀏覽器的支持。
前端技術的交叉應用
復雜的應用,都不會是單純的某一個技術的使用。交叉技術主要有兩個方式,一種是在本地應用中嵌入WEB瀏覽器,比如VS6.0的MFC向導,QQ等。另一種是在瀏覽器中加載具有本地系統資源調用的插件,比如OCX、SilverLight、Flash等。
前后端分離與分布式計算
傳統的應用程序,由於限於當時的網絡帶寬、硬件性能的限制,為了減少I/O以及CPU、內存的占用,通常界面與后台程序偶合在一起的,比如為了判斷某個按鈕是否可用,便直接查詢數據庫的某個字段,比較得到的值之后,立即控制界面的行為。這種編程方式引起的后果,就是代碼邏輯不清,可維護性比較差。隨着技術的進步,網絡與硬件已經不再是應用程序開發的最大瓶頸,前后端也不再需要共享硬件的性能,所以現在趨勢前后端逐漸分離,並形成能獨立運行的個體,前端變成獨立運行的客戶端,后端變成了獨立運行的服務。客戶端與服務器通過消息傳遞進行通訊,這樣就形成了天然的分布式計算,客戶端可緩存某些數據,比如將一些常用信息存儲在瀏覽器自帶數據庫中,在有必要的時候再跟服務端同步。
總結
當然,這里所說前端技術基於PC與網絡的一種常規認識,是以主機為粒度單位來區分的,實際上無論客戶端還是服務端,只要代碼復雜到一定程序,還是可以進一步地前后端拆分的,比如前邊據說的WEB應用,如果本地的數據存儲足夠復雜,那就要在客戶端這一層進行拆分,純UI的部分認為是前端,數據訪問部分為后端,但從大的方面來講,這兩部分集合一起也是一個前端。如果前后端集合起來只是實現整個體系架構中的某個功能,比如電信公司的電話營銷系統,這個系統的后台的后台是電信的客戶數據庫,如果要開通某個套餐,就要通過中間件去訪問更后台的數據,此時電話營銷系統實際上是充當整個電信系統下的一個前端。