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