最近團隊準備更多将服務放在serverless上,然後上周跟小夥伴一起體驗了阿裡雲的函數計算(第一個項目基于TP5),初步感覺還不錯,輕輕松松并發幾百上千,免運維無煩勞杜絕半夜電話催人重新開機伺服器(開玩笑的 - -)。
不過有一點小小的不舒服,登入背景後發現字型檔案無法加載,woff ttf等全部報502,小夥伴電話跟阿裡雲溝通被告知不支援(我是有點懵逼的,0202年了字型為何不能支援),無果暫時不管這個。
又過了幾天想起這事,專門研究了下,嘗試了2個小時,總結出了2個結論
- 加載.woff .ttf字尾的檔案會異常
- 加載字型資料會異常(沒錯,就算把字型字尾改為其他的也會異常)
配置過的應該都知道函數計算有一個index.php入口檔案,裡面包含php_run和static_run 2個處理方法,而上面的第一個問題,會導緻根本無法加載handler,第二個問題會導緻static_run讀取檔案fopen打開的時候出錯。
雖然感覺這樣的設定很奇怪,但是找到了辦法就好辦了,針對第一個問題,改名即可 于是我改成了
font.woff >> font.woff.svg
這樣就能進入static_run裡面了。
然後針對第二個問題,将字型檔案進行編碼或加密,我這裡直接用的hex轉碼,用其他的編碼應該也是可以的
$fontData = file_get_contents("font.woff.svg");
file_put_contents("font.woff.hexencode.svg", bin2hex($fontData));
然後index的static_run需要針對字型檔案做一些特殊處理
$contentType = $GLOBALS['fcPhpCgiProxy']->getMimeType($file_dir);
if (stripos($uri, '.hexencode.') !== false) {
// 如果包含hexencode就轉碼一下
$contents = hex2bin($contents);
if (stripos($uri, '.woff') !== false) {
$contentType = 'application/font-woff';
} else {
$contentType = 'application/octet-stream';
}
}
最後一步,還需要修改其他檔案中的引用位址為新位址 font.woff.hexencode.svg
再次部署,終于看到了綠色的可愛的200狀态,字型也正常顯示。
不過這始終隻是一個臨時解決方案,而且這樣改了之後,本地開發調試也需要特殊處理下。是以還是希望阿裡雲盡快支援下字型加載,字型檔案跟js css jpg等資源檔案并沒有本質的不同,不清楚為何要留這麼大個坑在這裡,大家如果有更好的方法,歡迎指教下。
原文連結
https://www.jianshu.com/p/d1ca14038bda