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