2019年我們就開始用PHP繪圖功能在網站上輸出圖片,除了在線輸出PNG圖片以外,我們還做了輸出GIF動畫圖、SVG矢量圖等功能,在網站中應用的效果也非常好。
不過也發現爬蟲過多的時候,對服務器負載和帶寬有比較大的影響,于是我們最近采取了幾項措施。
首先是接入了Cloudflare或者百度雲加速,讓圖片可以保存到CDN中,這樣降低了很多源站訪問。
但有個别站圖片數量非常多,緩存效果不明顯,我們就幹脆把PHP在線生成圖片改為了讀取保存在磁盤中的.png文件,這樣相當于又添加了一級緩存,免除了讀取對應數據庫、調用字體字庫、圖形繪制等操作,對服務器資源節約的效果很明顯。
接下來又發現一個問題,大量圖片保存到磁盤上占用空間太大,例如1個PNG圖片50KB,200萬個圖片就是100GB。仔細分析,這些生成的圖片不是照片,隻是文字和圖形的結合,是不需要用真彩色的,讓同事測試了一下,将png圖片從24位真彩色改為8位彩色後,尺寸變為不到原來一半,而肉眼很難分辨出來差别。去網上找到了需要添加一行語句就可以實現:
imagetruecolortopalette($im, false, 255);//2021-7-29轉為8位彩色(256色),尺寸減少一半以上
改動起來非常方便,實際運用起來也效果明顯,除了可以讓保存到磁盤的文件更小以外,網絡傳輸的尺寸、花費時間也都大大縮減。
不過後來有同事仔細對比轉換前後的圖片,發現以前是白底的,現在變成了很淺很淺的黃色或者青色,暫時還沒有找到解決辦法,不過影響不大。
评论