摘要:不過最近無意間發現了一個小坑。寫完之后一運行,發現相當慢,平均耗時秒左右。起初以為是因為合成過程中進行的操作比較多尺寸比較大,本來就應該是這個速度。這一通折騰下來,發現真相竟然與合成操作的多少尺寸沒有多大關系。
事實上 intervention/iamge 用了很有些時日了,它的 api 設計得很簡潔,文檔也很全面,用起來相當順手。
不過最近無意間發現了一個小坑。因為需要合成帶微信頭像的二維碼,我使用 Image::make($avatarUrl) (這里的 $avatarUrl 是微信頭像的鏈接)來產生頭像,然后合成到二維碼圖像中去(還包括一些其它操作,比如使用模板背景、寫入文字)。
寫完之后一運行,發現相當慢,平均耗時 23 秒左右。起初以為是因為合成過程中進行的操作比較多、尺寸比較大,本來就應該是這個速度。不過后來閑下來,開始試著優化,即使不能提升速度,至少也搞清楚到底是什么原因這么耗時。
這一通折騰下來,發現真相竟然與合成操作的多少、尺寸沒有多大關系。而關鍵在于我創建頭像數據的姿勢。
為了說明這個問題,特意寫了下面的代碼進行對比。
// 記錄開始時間 $startTimestamp = microtime(true); $url = "http://wx.qlogo.cn/mmopen/XxT9TiaJ1ibf06TNRCMjQADS4opDHvQLguLZHpqkRlvuJYZicvJW4iaOalPsKIs0kpZ3F6864ZzibyObYiaucUQSrdp4pFTNDyIpxw/0"; $avatar = Image::make($url); // 記錄結束時間 $endTimestamp = microtime(true); info($startTimestamp); info($endTimestamp); info($endTimestamp - $startTimestamp);
上面這段代碼使用 Image::make($url) 的形式,直接從 url 生成頭像。從記錄的日志數據來看,耗時基本上在 16 秒左右。
后來,想到了一個新姿勢,其實也就是在嘗試優化的過程中折騰時想到的。見下面代碼:
$startTimestamp = microtime(true); $client = new GuzzleHttpClient(); $url = "http://wx.qlogo.cn/mmopen/XxT9TiaJ1ibf06TNRCMjQADS4opDHvQLguLZHpqkRlvuJYZicvJW4iaOalPsKIs0kpZ3F6864ZzibyObYiaucUQSrdp4pFTNDyIpxw/0"; $avatarResponse = $client->get($url); $avatar = Image::make($avatarResponse->getBody()->getContents()); $endTimestamp = microtime(true); info($startTimestamp); info($endTimestamp); info($endTimestamp - $startTimestamp);
在這里我先使用 GuzzleHttp 獲取頭像,再使用 Image::make($data) 創建頭像。
注意,要高潮了……
看看下面的日志截圖,三次平均耗時在 0.07 秒左右,和前面的 16 秒相比,差了 200 多倍。
至于為什么會出現這種現象,自己也沒搞清楚,但這無疑是一點比較有用且小眾的經驗。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/26075.html
摘要:本文經授權轉自社區說明是為定制的圖片處理工具它提供了一套易于表達的方式來創建編輯圖片。 本文經授權轉自 PHPHub 社區 說明 Intervention/image 是為 Laravel 定制的圖片處理工具, 它提供了一套易于表達的方式來創建、編輯圖片。 本文章由 The EST Group 成員 @monkey 撰寫, 首發地為 PHPHub 社區. Demo 代碼請見:https...
摘要:一安裝拓展二上傳文件為上傳表單的名為上傳表單的名并將上傳的圖片壓縮成同時實現單圖上傳和多圖上傳多圖上傳單圖上傳三添加水印添加文字水印添加文字水印主要使用到方法方法參數說明可選定義第一個字符的基點。默認值可選定義第一個字符的基點。 一:安裝intervention/image拓展 composer require intervention/image 二:上傳文件 Interventi...
摘要:做過微信網頁開發的同學肯定遇到過這樣的需求,基于一張背景圖生成用戶推廣海報,上面需要有推廣二維碼用戶頭像用戶名稱等等。 做過微信網頁開發的同學肯定遇到過這樣的需求,基于一張背景圖生成用戶推廣海報,上面需要有推廣二維碼、用戶頭像、用戶名稱等等。本來應該是一個很普通的需求,使用php的gd庫就很容易合成,但是最近在生成這樣海報的時候,發現時間長達19s,最后發現問題卡在遠程拉去微信頭像上,...
摘要:在編寫程序的過程中,經常會遇到一個經典的文件上傳場景上傳頭像圖片。基于對最好的用戶體驗的追求,寫一下之前在項目中實現在項目中的上傳頭像。 在編寫web程序的過程中,經常會遇到一個經典的文件上傳場景:上傳頭像(圖片)。基于對最好的用戶體驗的追求,寫一下之前在項目中實現在Laravel項目中的Ajax上傳頭像。 1.配置路由 在Laravel的routes.php中設置路由: Rou...
摘要:自動代碼擴展開發時遵守的代碼風格是項目開發規范。遵照此規范,在實際操作中,有許多重復,接下來推薦一款專為此規范量身定制的代碼生成器。可以利用此擴展來快速構建項目原型。后續還會為大家帶來一些最新的技術擴展。 whoops 錯誤提示擴展 whoops 是一個非常優秀的 PHP Debug 擴展,它能夠使你在開發中快速定位出錯的位置。laravel默認安裝。showImg(https://s...
閱讀 3274·2021-11-22 14:44
閱讀 1118·2021-11-16 11:53
閱讀 1271·2021-11-12 10:36
閱讀 705·2021-10-14 09:43
閱讀 3697·2019-08-30 15:55
閱讀 3404·2019-08-30 14:14
閱讀 1742·2019-08-26 18:37
閱讀 3416·2019-08-26 12:12