LaravelConf2017 筆記 Lumen也是個好東西 …
大會共筆 連結
https://laravelconf.tw/zh-TW/schedule
從快速成長的新創企業發展角度談 iFit x ECFIT 導入開發框架 Laravel 時的思維與歷程
故事與過程
為何要引入框架
引入過程
循序漸進、由簡入繁、有目的性地進行-可長可久的專案
現有服務的網站或系統優先導入
公司內部優先導入
開發時程不緊迫的優先導入
需要協同作業的優先導入
小型短期不導入
MVP 專案不導入
案例
自行開發框架
Storage X GCS
use Illuminate \Support \Facades \Storage ;
Storage::method();
Storage::disk()->method()
也可以利用 Resolver
GCS
套件
跨平台配置
設定load balance(設定圖片的domain)
Load Balance :負載平衡服務,是一種技術 通常是由專用軟體和硬體來完成。
搭配domain儲存 cloudfare 設定快取,減少圖片載入的速度
(Cloudflare 教學) [ https://sofree.cc/cloudflare-free-cdn/ ]
CDN:全名是「內容傳遞網路」(Content delivery network或Content distribution network),簡單說就是CDN伺服器會分散於全球各地,而這些伺服器會去抓取你網站的內容快取,而如果你人在美國,讀取了有掛CDN的網站,它就會就近讀取美國節點的網站,儘管網站在台灣,你也會感覺瀏覽速度不差。透過分散式的節點,可以分散網站的資源使用,如果你存取的美國節點失效,它會在就近找一個新的節點存取資料,讓資料不間斷。
Eloquent 資料庫層核心解構,讓 Laravel 支援更多資料庫
config/database.php
builder
databaseserviceprovider
databasemanager
connectionfactory->connection->connector->pdo
build a building
blueprint
builder
grammar
worker
how to create own driver
pdo support?
datatype
grammar
start from unit test
水平擴展PHP應用程序 - 使用 Maghead 資料庫框架
ORM
Maghead
maghead database framework
Laravel * Maghead
laravel container
service provider
maghead
composer require maghead/laravel-bridge
SPA前後端分離 簡報
後端負責API部分;前端可自由選擇Js framework …
後端工程師:test case 能通過!
前端工程師:撈出資料處理界面
(可搭配優美架構設計服用)
何謂 SPA Single Page Application單頁式應用程式,只在一個頁面中完成動作
優點
缺點
頁面能更快的被呈現
SEO問題
降低資料傳輸(ajax)
舊型瀏覽器不支援
UX大幅提升
APP、WEB不用重複開發
為何需要 SPA
前端不需要了解後端的資料夾結構跟程式碼,並可以互相選擇適合自己的框架,只需要透過API、JSON文件來溝通
清楚分工,例如:資料出問題找後端工程師,設定及畫面有問題找前端工程師
重要
開發API一定要做TDD開發
API認證及授權(JWT、Passport)
JWT & Dingo (授權保護不要不合法的打進來) Vue
axios(ajax協定)
vuex(狀態管理模式-集中式儲存組建狀態)
前端整合踩雷
同源政策(Same-origin policy)
解決:cors
頻率限制
SEO
解決:Prerender service、Server side render(Nuxt.js)
API設計文件 Laravel 事件及序列功能應用 影片
文件
1.序列 queue
driver
database
amazon sqs
redis
…
優點
延時處理
運算分離
降低耦合
php artisan make:job PublicPost
可靠性
dispatch((new Job)->onConnection('highCPU' ));
dispatch((new Job)->onQueue('high' ));
php artisan queue:word highCPU --queue=high
2.event
- php artisan event:generate
- model 裡面可以直接設定在何種事件處理
3.shouldqueue
https://divinglaravel.com/queue-system
實戰 TDD - 訂單系統 開發流程 紅燈->綠燈->黃燈反覆循環
簡介 Test、Driven、Development
TDD 真正的涵義
30天快速上手TDD
Laravel 的大流量策略(類似理論與概念) 面對大流量遇到問題不只是技術 新創公司如何遇到大流量 如何以現有的資源大流量(1.5億個request)
採用 CloudFlare 用檔案快取(全站快取)
優點:server費用僅 1200 元
缺點:不能用會員、即時更新文章內容
轉換框架歷程 所有框架或是程式語言都有跟效能有關係
WordPress:很難去自訂的編輯,有時更新會讓server掛掉
Ruby on Rails:當初有三個人來幫忙,周遭學習資源很少,很難去第一時間解決問題
Laravel:框架所擁有的社群很重要,還有自身的人脈
硬體 Laravel、CloudFlare Business、AWS
Photon 的圖床 (交流趴後來有補充 後來他們換成用imgix)
CloudFlare CDN
使用 CDN 省下很多靜態圖檔的花費時間
想法
省下的錢足以在hire業務
善用你的影響力幫公司前進
自己的工作自己定義
讓團隊因你存在而感到美好
敏捷開發的最後一哩路 https://drive.google.com/file/d/0ByD9RXfQ70_6cUdueHcxMXFTOHc/view
整合CI server
寫測試與文件
寫健置與打包腳本
寫部屬與驗證繳本
打造接近線上環境的開發環境
運用 Docker 整合 Laravel 提升團隊開發效率 Docker 基礎介紹與實戰
ElasticSearch :機器學習相關
Docker 七大指令
docker-compose -p $(project) up -d
docker-compose -p $(project) stop -d
docker-compose -p $(project) ps
docker-compose -p $(project) down
docker exec $(container) php artisan migrate
docker-compose -p $(project) build – no-cache $(container)
docker-compose exec $(container) /bin/bash
自動化部署 CI/CD CI/CD
使用上 …
捨棄
Jenkins:設定太複雜
Gitlab:綁太死無法帶走
使用
Drone 套件
Drone基於container使用
補充 https://www.ccc.tc/article/3
講者GitHub
講者blog
Laravel優美架構 - 談可維護性與彈性設計 簡報
架構圖
一個專案很多人維護就要一個規範
$this->user->posts()->all();
Services:商業邏輯跟流程
將 controller 的條件判斷放在 Service 來與資料庫操作
Presenter:外觀顯示
性別 0,1 回傳男生或女生
使用 accessor、mutators 會讓 Model
解法:Presenter
前後端分離 大大 Laravel-Oh-Generators
KKBOX 的團隊協作方式 多人協作
那些人? 多少人
怎麼互動?多少互動?
做甚麼事?誰做多少事?
個人的效率不等同於團隊的效率
目標
Event Driven
減少溝通成本
減少人力支出
避免 single point of failure
工具
Issue Tracker:Trac
其他:jira/redmine/bugzlilla
把在做/想做/該做的事情都可以放上去
業務事項與決策的整合紀錄
Github/Gitlab host 大部分的code
Gitlab CI
自動化Unit test
自動部屬
進主幹前 發MR 做Review
Git flow
Slack
trello
外部標準
取得最大公約數
Coding Style (psr1,2/K&R)
最多人用的Framework …
工作流程
trac 開票
工程師領票
feature branch 改code
開MR peer review/ci
acceptance/部屬
好處
工程師可決定何時被打斷
容易掌握部門狀況
slack git log trac 不用寫工作日誌
自動測試讓大家比較敢改code
容易考古,決策過程不會被遺忘
壞處
event 能攜帶的payload 有限
每個人必須積極主動
討人厭/不熟的工作會被冷落
資訊爆炸的隱憂
非工程師討厭非同步溝通
Legacy code 測試跟review 都很痛苦
QA
Code Review
盡量都要
盡量分出一個小feature 功能 而不要大功能,大功能建議直接開一個develop branch
新人訓練
交流趴 設計模式
piepe: 裝飾者模式
Laravel Dusk
額外補充 Devops
一種重視「軟體開發人員(Dev)」和「IT運維技術人員(Ops)」之間溝通合作的文化、運動或慣例。透過自動化「軟體交付」和「架構變更」的流程,來使得構建、測試、發布軟體能夠更加地快捷、頻繁和可靠。
開發團隊與運營團隊之間更具協作性、更高效的關係」。由於團隊間協作關係的改善,整個組織的效率因此得到提升,伴隨頻繁變化而來的生產環境的風險也能得到降低。
http://www.ithome.com.tw/news/96861
https://zh.wikipedia.org/wiki/DevOps