SlideShare a Scribd company logo
以CodeIgniter為基礎的網頁前 
端程式設計 
By 
Fillano
自我介紹 
• 渾名:Fillano、費大公 
• 本名:馮旭平 
• 工作:後端…有時兼前端 
• 常用語言:Javascript, 
PHP, 
Java, 
C#, 
HTML, 
CSS 
• 出沒地點:iT邦幫忙、?、G+、plurk、 
twiEer…(帳號皆為fillano)
講題 
• 前端工程師的工作 
• 與CodeIgniter合作的前端工作 
• 前端工程師的難處 
• 讓前端工作更快樂
前端工程師的工作
前端工程的歷史 
• 最早,Web只有前端(WWW: 
1990, 
HTML: 
1993) 
• 經由HTTP傳送內容(0.9: 
1991, 
1.0: 
1996, 
1.1: 
1997) 
• 對於動態資料的需求,產生了後端工程 
• 對於網頁呈現的需求,產生了前端工程 
– Javascript, 
1995 
– CSS, 
1996 
– DOM, 
1998
前端工程師的工作 
• AJAX的應用大約在2005開始發展,網頁的 
工作越來越複雜,前端工程師這個職務應 
運而生 
• 主要工作內容範疇(from 
wiki) 
– Assessbility:讓網頁可以在更多裝置上正常瀏 
覽 
– Usability:讓操作介面更好用 
– Performance:讓應用程式效能更好
Accessibility 
• 需要處理瀏覽器相容性的問題 
– Reset 
– Normalize 
– Hacks… 
• 需要處理裝置解析度的問題 
– RWD… 
• 需要能管理日趨複雜的CSS 
– 架構方法:OOCSS, 
SMACSS, 
BEM… 
– 中介語言:LESS, 
SASS, 
COMPASS…
Usability 
• UI/UX…各種人機介面設計、用戶體驗方法 
與考量 
– 視覺效果 
– 資訊呈現 
– 互動方式
Performance 
• 包含從資料由伺服器丟出來之後所有的效 
能問題 
– 傳送時間 
– 瀏覽器呈現資料的速度 
– 網頁中的程式執行
為了解決這些問題… 
• 我們會使用許多Javascript 
Library 
• 我們會使用Javascript 
Framework 
• 我們會使用Bootstrap 
• 我們會使用最佳化工具 
• 我們會使用各種中介語言 
– Compile 
to 
Javascript 
– Compile 
to 
CSS
與CODEIGNITER合作的前端工作
只要知道靜態檔放哪裡就好了 
• CodeIgniter安裝好後,會有幾個目錄跟檔案 
– .htaccess 
– index.php 
– system 
– applicadon 
• 為了管理方便,可以把靜態檔案全部放在 
一個目錄,例如assets
設定 
• 假設規劃靜態檔案都放在assets目錄 
• 可以透過在applicadon/config/config.php中, 
設定基底url:$config[‘base_url’] 
= 
‘/ 
codeigniter/’; 
• 然後在applicadon/config/autoload.php中, 
設定$autoload[‘helper’] 
= 
array(‘url’…); 
• 在view中,呼叫<?=base_url()?>/assets/path/ 
stadc_file,就可以取得正確的url
接下來 
• 除非… 
– 有什麼理由需要用到html 
/ 
form 等helper,或 
是Javascript 
Driver 
– 需要透過AJAX跟後端API收發資料 
• 前端的工作跟CodeIgniter基本上就沒關係了 
XD
前端工程師的難處
客戶會直接看到 
• 我的經驗 
– 客戶常常在Wireframe階段都沒感覺,看到畫面 
才開始發揮想像力 
– 對細節吹毛求疵 
– 需求書通常規範了流程、資料、模組等東西, 
對於呈現的部份反而比較模糊
常常在工作流程的最後面 
• 需求=>設計=>伺服器端程式=>套版=>驗收 
• 前面任一階段的延遲,壓力都會在後面爆 
發
技術瑣碎複雜 
• HTML 
x 
Javascript 
x 
CSS 
x 瀏覽器版本 
• 為了解決一些問題,需要使用更多的工具… 
讓需要的技能更複雜了 
• 技術的知識,對前端工程師來說是宿命 
• 透過工具,還是可以讓工作更順利
讓前端工作更快樂
還是利用工具 
• Bower:套件管理 
• Grunt:自動化 
• Yeoman:專案架構生成 
• Gulp:另一個自動化工具 
• 這些工具,都是使用Javascript(node.js)開 
發的,對於前端工程師來說,比較沒有進 
入障礙
套件管理 
• 專案常常會使用許多不同的Library及 
Framework 
,他們各自有版本及相依性,會 
造成維護上的困難 
• 安裝時,還需要自己到不同的專案網站下 
載,會很麻煩 
• 利用套件管理工具,只要用一個工具就可 
以完成這些工作
套件管理正夯 
• Java很早就有Maven可以做自動化及套件管 
理 
• PHP有Composer 
• Ruby有Gem 
• Node.js有NPM 
• 前端的話,有bower
使用bower的好處 
• 透過bower,就可以根據專案的需求,安裝需 
要的套件 
• 例如一個專案會使用到: 
– Bootstrap:需要jquery版本>1.9 
– Angular 
– Jquery-­‐easyui:需要jquery版本>1.9,但是不支援2.x 
• 使用bower安裝時,他會根據版本的需求,自 
動安裝依賴的jquery,並且調整成最合適的版 
本
Bower怎麼用 
• 先安裝node.js 
• 透過`npm 
install 
–g 
bower`來安裝bower 
• 套件的預設安裝目錄是bower_components, 
可以透過新增設定檔~/.bowerrc來修改預設 
值 
• 使用 
bower 
install 
[套件名稱]或是[url]來安 
裝套件 
• 使用bower 
init可以在專案目錄中加入 
bower.json,專案使用的套件會紀錄在這裡
實際操練 
• 安裝node.js 
• 安裝bower 
• 建立~/.bowerrc 
• 安裝套件並觀察安裝版本變化 
• 使用bower 
init建立bower.json,紀錄專案使 
用套件
Bower的相關資訊 
• 網站: hEp://bower.io/ 
• 怎麼指定版本: 
hEp://semver.org/ 
• (npm以及bower都使用一樣的版本號標準)
自動化 
• 專案進行時,會使用各種工具進行各種工作, 
例如 
– 用CoffeeScript寫Javascript 
– 把SASS編譯成CSS 
– 進行單元測試 
– Javascript壓縮 
– CSS壓縮 
– 圖檔最佳化 
– 版本管理 
• 使用不同的工具,還需要各自下命令,很麻煩
自動化工具的好處 
• 不用每次都自己下命令 
• 可以把不同工作,依照「相依性」組合起 
來,批次作業
常見的專案自動化工具 
• Java 
– Ant 
– Maven 
• PHP 
– Phing 
• Ruby 
– Rake 
• 在Node.js 
/ 前端最常用的則是:Grunt及 
Gulp
安裝Grunt 
• 同樣要先安裝Node.js 
• 用npm安裝: `npm 
install 
–g 
grunt` 
• 使用npm 
init或是手動建立package.json(至 
少要有name, 
version, 
devDependencies) 
• 依照需求安裝不同的任務(task) 
– 例如要拷貝檔案,可以使用copy任務,他的 
npm套件名稱是grunt-­‐contrib-­‐copy 
– 安裝指令就是 `npm 
install 
grunt-­‐contrib-­‐copy 
-­‐-­‐save-­‐dev`
使用grunt 
• 在專案根目錄新增Grunxile.js檔案 
• 檔案內容是Javascript程式,但是不難理解 
• 根據自己的需求,搜尋合適的任務 
• 使用 
`npm 
install 
[任務] 
-­‐-­‐save-­‐dev` 
命令來安 
裝任務 
• 撰寫Grunxile.js的內容 
• 使用 `grunt 
[任務名稱]` 
來執行任務
Grunxile.js的結構 
• 最外層程式: 
– module.exports 
= 
funcdon(grunt) 
{ 
… 
} 
• 任務設定: 
– grunt.initConfig() 
• 載入任務的npm模組 
– grunt.loadNpmTasks(“模組名稱”) 
• 註冊任務 
– grunt.registerTask(“任務名”, 
[“其他任務”, 
“其他 
任務”])
Grunt的概念 
• 任務皆以「設定」的方式,建立他執行的 
規則 
• 使用grunt.loadNpmTasks()載入的任務,使 
用他的任務名稱就可以直接執行 
• 可以用grunt.registerTask()自定任務,把經 
由任務模組載入的任務以及自定的任務組 
合起來執行
檔案指定的規則 
• 大部分的任務設定,都是在處理檔案,所 
以一定要知道在Grunxile.js中怎麼指定檔案 
• 除了使用檔案及目錄名稱,萬用字元*有特 
定的意義: 
– 「*」代表目錄下的所有檔案(代表任意數目的 
字元,但是不包含「/」) 
– 「**」代表目錄下的所有目錄及檔案(代表任 
意數目的字元,且包含「/」) 
– hEp://gruntjs.com/configuring-­‐tasks#globbing-­‐ 
paEerns
實際操作 
• 安裝Grunt 
• 撰寫package.json 
• 安裝grunt-­‐contrib-­‐clean, 
grunt-­‐contrib-­‐copy, 
grunt-­‐contrib-­‐uglify三個任務 
• 撰寫Grunxile.js 
• 定義build以及preview這兩個任務 
• 執行
還有很多好康的任務 
• grunt-­‐contrib-­‐cssmin:壓縮CSS檔 
• grunt-­‐contrib-­‐coffee:編譯Coffee 
Script檔 
• grunt-­‐contrib-­‐compass:編譯SASS檔案 
• grunt-­‐contrib-­‐watch:監控檔案,有變動時 
執行特定任務(ex. 編譯Coffee 
Script) 
• grunt-­‐contrib-­‐imagemin:適當地壓縮,最佳 
化圖檔 
• grunt-­‐s3:把檔案放到AWS 
S3上
Grunt的相關資訊 
• 網站: hEp://gruntjs.com/ 
• 查詢任務模組: hEp://gruntjs.com/plugins 
• 目前有3390個任務模組
專案架構產生器-­‐yeoman 
• 使用yeoman,可以依照自己對於專案及相 
依性的需求,快速建立架構好的專案目錄 
及檔案 
• 額外的相依性,也可以透過bower在架構產 
生後加上去
使用情境 
• 要使用的軟體、額外的相依套件夠明確, 
不必自己花時間拆東西、加東西 
• 願意使用別人架構好的專案架構與環境
以codeigniter為例 
• 先透過npm來安裝yeoman: 
`npm 
install 
-­‐g 
yo` 
• 然後安裝generator-­‐codeigniter: 
`npm 
install 
-­‐g 
generator-­‐codeigniter 
` 
• 建立專案目錄,在目錄中執行 `yo 
codeigniter` 
• 使用npm、bower、composer來安裝相依的 
套件 
• 執行grunt 
build來建構專案
Yoeman的相關資訊 
• 網站: hEp://yeoman.io/ 
• 尋找合適的產生器: 
hEp://yeoman.io/generators/
最後來看一下Gulp 
• 他跟grunt一樣,都是專案自動化工具 
• 不同點在於: 
– Grunt使用「設定」的方式來建立任務 
– Gulp則使用「寫程式」的方式來建立任務:使 
用pipe把任務串接起來 
• Grunt支援的任務比較多 
• Gulp執行效率會比較好
試用一下gulp 
• 只使用gulp-­‐uglify來把stadcs/js/ 
list_member.js壓成build/assets/js/ 
list_member.min.js 
• 程式碼 
• 執行結果
Gulp的相關資訊 
• 網頁: hEp://gulpjs.com/ 
• 查詢任務模組: hEp://gulpjs.com/plugins/ 
• 目前有673個任務模組…
總之 
• 能偷懶就盡量偷懶,可以交給機器做的事 
情,就不要自己做

More Related Content

PDF
PHP CodeIgniter 框架之美
PPTX
Codeigniter 3.0 之 30 分鐘就上手
PDF
CodeIgniter 2.0.X
PPTX
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
PDF
SITCON 2016 ─ Modern Front-End Workflow with Webpack
PPTX
Angular 7 全新功能探索 (Angular Taiwan 2018)
PPTX
Angular 4 新手入門攻略完全制霸
PPTX
Visual Studio 2017 新功能探索 (Study4.TW)
PHP CodeIgniter 框架之美
Codeigniter 3.0 之 30 分鐘就上手
CodeIgniter 2.0.X
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
SITCON 2016 ─ Modern Front-End Workflow with Webpack
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 4 新手入門攻略完全制霸
Visual Studio 2017 新功能探索 (Study4.TW)

What's hot (20)

PDF
twMVC#42 Windows容器導入由0到1
PPTX
ASP.NET MVC 6 新功能探索
PDF
twMVC#36讓 Exceptionless 存管你的 Log
PPTX
ASP.NET 5 的創新與變革
PDF
Angular js twmvc#17
PPTX
使用 Visual Studio Code 建構 JavaScript 應用程式
PPTX
Reactive application with akka.NET & .NET Core
PPTX
[Study4TW Visual Studio Everywhere] asp.net core 實務開發經驗分享
PPTX
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
PDF
React.js what do you really mean?
PDF
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API
PPTX
Angular.js & ASP.NET in Study4
PPTX
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
PDF
Node.js從無到有 基本課程
PDF
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
PPTX
快快樂樂學 Angular 2 開發框架
PPTX
Nuget介紹- 如何使用和建立自己的package
PDF
AngularJS training in Luster
PDF
NodeJS基礎教學&簡介
PPTX
利用Signalr打造即時通訊@Tech day geek
twMVC#42 Windows容器導入由0到1
ASP.NET MVC 6 新功能探索
twMVC#36讓 Exceptionless 存管你的 Log
ASP.NET 5 的創新與變革
Angular js twmvc#17
使用 Visual Studio Code 建構 JavaScript 應用程式
Reactive application with akka.NET & .NET Core
[Study4TW Visual Studio Everywhere] asp.net core 實務開發經驗分享
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
React.js what do you really mean?
twMVC#33聊聊如何自建 Facebook {廣告} 服務 with API
Angular.js & ASP.NET in Study4
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
Node.js從無到有 基本課程
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
快快樂樂學 Angular 2 開發框架
Nuget介紹- 如何使用和建立自己的package
AngularJS training in Luster
NodeJS基礎教學&簡介
利用Signalr打造即時通訊@Tech day geek
Ad

Viewers also liked (20)

PDF
20140816 工程師要如何準備一場成功的簡報!
PDF
20140824 認識與應用商業模式
PDF
20140920 創業前要作的事
PDF
20140809 如何加速行銷部門作業流程與編列預算
PDF
20140824 如何協助業務部門達成業績目標與更精準的預測
PDF
20140824 從離職到開始 crm 顧問的轉變
PDF
20140724 中小企業 QNAP Virtualization Station 快速導入業務管理方案
PDF
High Availability and High Performance Server Side
PDF
You must know about CodeIgniter Popular Library
PDF
企業資源規劃(Erp)系統導入規劃
PPTX
PHP Frameworks & Introduction to CodeIgniter
PPT
Introduction To CodeIgniter
PPT
Codeigniter
ODP
CodeIgniter PHP MVC Framework
PPTX
Why to choose laravel framework
PDF
RESTful API Design
PDF
工作坊簡介
PDF
Composer 套件管理
PDF
從線上售票看作業系統設計議題
PDF
PHP 語法基礎與物件導向
20140816 工程師要如何準備一場成功的簡報!
20140824 認識與應用商業模式
20140920 創業前要作的事
20140809 如何加速行銷部門作業流程與編列預算
20140824 如何協助業務部門達成業績目標與更精準的預測
20140824 從離職到開始 crm 顧問的轉變
20140724 中小企業 QNAP Virtualization Station 快速導入業務管理方案
High Availability and High Performance Server Side
You must know about CodeIgniter Popular Library
企業資源規劃(Erp)系統導入規劃
PHP Frameworks & Introduction to CodeIgniter
Introduction To CodeIgniter
Codeigniter
CodeIgniter PHP MVC Framework
Why to choose laravel framework
RESTful API Design
工作坊簡介
Composer 套件管理
從線上售票看作業系統設計議題
PHP 語法基礎與物件導向
Ad

Similar to 以Code igniter為基礎的網頁前端程式設計 (20)

PPTX
前端自動化工具
PDF
Build desktop app_by_xulrunner
PDF
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
PDF
美团前端架构简介
PDF
合久必分,分久必合
PPTX
[students AI workshop] Pytorch
PDF
浏览器渲染与web前端开发
PDF
讓軟體開發與應用更自由 - 使用 Docker 技術
PDF
Nodejs & NAE
PDF
Berserk js
PDF
Linux binary Exploitation - Basic knowledge
PPTX
Artifacts management with CI and CD
PDF
D2_node在淘宝的应用实践_pdf版
PPTX
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
PPT
课题二:Node.js那些事儿
PDF
前端也能變全端
PPT
Node.js在淘宝的应用实践
PPTX
Angular 开发技巧 (2018 ngChina 开发者大会)
PDF
前端编译平台
前端自動化工具
Build desktop app_by_xulrunner
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
美团前端架构简介
合久必分,分久必合
[students AI workshop] Pytorch
浏览器渲染与web前端开发
讓軟體開發與應用更自由 - 使用 Docker 技術
Nodejs & NAE
Berserk js
Linux binary Exploitation - Basic knowledge
Artifacts management with CI and CD
D2_node在淘宝的应用实践_pdf版
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
课题二:Node.js那些事儿
前端也能變全端
Node.js在淘宝的应用实践
Angular 开发技巧 (2018 ngChina 开发者大会)
前端编译平台

以Code igniter為基礎的網頁前端程式設計