最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php使用yield對性能提升的測試實例分析

 更新時間:2019年09月19日 09:34:28   作者:巴八靈  
這篇文章主要介紹了php使用yield對性能提升的測試,結(jié)合具體實例形式對比分析了php使用yield及常規(guī)操作的運算耗時與內(nèi)存占用情況,測試了yield對性能的提升大小,需要的朋友可以參考下

本文實例講述了php使用yield對性能提升的測試。分享給大家供大家參考,具體如下:

生成器提供了一種更容易的方法來實現(xiàn)簡單的對象迭代,相比較定義類實現(xiàn) Iterator 接口的方式,性能開銷和復雜性大大降低。生成器允許你在 foreach 代碼塊中寫代碼來迭代一組數(shù)據(jù)而不需要在內(nèi)存中創(chuàng)建一個數(shù)組, 那會使你的內(nèi)存達到上限,或者會占據(jù)可觀的處理時間。相反,你可以寫一個生成器函數(shù),就像一個普通的自定義函數(shù)一樣, 和普通函數(shù)只返回一次不同的是, 生成器可以根據(jù)需要 yield 多次,以便生成需要迭代的值。

有兩個php文件,demo1.php與demo2.php,兩種不同的方式實現(xiàn)求0,到5000之間的數(shù)字的平方值并輸出,并打印腳本運行的時間與使用的內(nèi)存大小。

demo1.php

<?php
$startMemory = memory_get_usage(); 
$startTime = time();
function convert($size)
{
    $unit=array('b','kb','mb','gb','tb','pb');
      return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
function squares($start,$stop){
  $info = '';
  $square = 0;
  for($i=$start;$i<$stop;$i++){
    $square = $i*$i;
    $info .= $i.' squared is '.$square.PHP_EOL;
  }
  return $info;
}
$info = squares(0,50000);
echo $info.PHP_EOL;
$endTime = time();
$useTime = $endTime-$startTime;
$endMemory = memory_get_usage(); 
$useMemory = $endMemory-$startMemory;
echo "總共占用的內(nèi)存大小為:".convert($useMemory).PHP_EOL;
echo "總共占用的時間為:".$useTime.'秒'.PHP_EOL;

運行結(jié)果如下:

49993 squared is 2499300049
49994 squared is 2499400036
49995 squared is 2499500025
49996 squared is 2499600016
49997 squared is 2499700009
49998 squared is 2499800004
49999 squared is 2499900001

總共占用的內(nèi)存大小為:1.28 mb
總共占用的時間為:5秒

demo2.php

<?php
$startMemory = memory_get_usage(); 
$startTime = time();
function convert($size)
{
  $unit=array('b','kb','mb','gb','tb','pb');
  return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
function squares($start,$stop){
  for($i = $start;$i<$stop;$i++){
    yield $i=>$i*$i;
  }
}
foreach(squares(0,50000) as $n=>$square ){
  echo $n.' squared is '.$square.PHP_EOL;
}
$endTime = time();
$useTime = $endTime-$startTime;
$endMemory = memory_get_usage(); 
$useMemory = $endMemory-$startMemory;
echo "總共占用的內(nèi)存大小為:".convert($useMemory).PHP_EOL;
echo "總共占用的時間為:".$useTime.'秒'.PHP_EOL;

運行demo2.php結(jié)果如下:

49988 squared is  2498800144
49989 squared is  2498900121
49990 squared is  2499000100
49991 squared is  2499100081
49992 squared is  2499200064
49993 squared is  2499300049
49994 squared is  2499400036
49995 squared is  2499500025
49996 squared is  2499600016
49997 squared is  2499700009
49998 squared is  2499800004
49999 squared is  2499900001
總共占用的內(nèi)存大小為:32 b
總共占用的時間為:5秒

總結(jié):對比發(fā)現(xiàn),可能由于腳本計算比較簡單,運行的時間沒啥太大變化。明顯發(fā)現(xiàn)使用yield后占用內(nèi)存的量要少很多。說明使用yield還是對性能提升很有幫助的,像類似的一次性拉取大數(shù)據(jù)量的數(shù)據(jù)都可以考慮使用yield實現(xiàn)(數(shù)據(jù)統(tǒng)計等).

更多關于PHP相關內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)組(Array)操作技巧大全》、《php排序算法總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設計算法總結(jié)》、《php字符串(string)用法總結(jié)》及《PHP常用遍歷算法與技巧總結(jié)

希望本文所述對大家PHP程序設計有所幫助。

相關文章

  • 由php的call_user_func傳reference引發(fā)的思考

    由php的call_user_func傳reference引發(fā)的思考

    由php的call_user_func傳reference引發(fā)的思考,使用call_user_func傳reference的朋友可以參考下。
    2010-07-07
  • php 在線打包_支持子目錄

    php 在線打包_支持子目錄

    用php實現(xiàn)的在線打包的工具,并可以支持子目錄使用純php對目錄和文件進行打包壓縮,壓縮當然不能跟winrar比(壓縮比差不多相當于winrar壓縮時的最快模式)。
    2008-06-06
  • PHP利用func_get_args和func_num_args函數(shù)實現(xiàn)函數(shù)重載實例

    PHP利用func_get_args和func_num_args函數(shù)實現(xiàn)函數(shù)重載實例

    這篇文章主要介紹了PHP利用func_get_args和func_num_args函數(shù)實現(xiàn)函數(shù)重載的方法,實例展示了PHP實現(xiàn)重載的具體方法,是非常實用的技巧,需要的朋友可以參考下
    2014-11-11
  • PHP之生成GIF動畫的實現(xiàn)方法

    PHP之生成GIF動畫的實現(xiàn)方法

    本篇文章是對PHP生成GIF動畫的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • php二維碼生成

    php二維碼生成

    在二維碼越來越普及之際。我們需要了解一下什么是二維碼,作為了一個php programer,我們更需要知道如何使用 php生成二維碼。廢話少說,下面說正題。
    2015-10-10
  • php中$_GET與$_POST過濾sql注入的方法

    php中$_GET與$_POST過濾sql注入的方法

    這篇文章主要介紹了php中$_GET與$_POST過濾sql注入的方法,包含了addslashes_deep函數(shù)與數(shù)組的操作方法,是非常具有實用價值的技巧,需要的朋友可以參考下
    2014-11-11
  • DedeCMS 核心類TypeLink.class.php摘要筆記

    DedeCMS 核心類TypeLink.class.php摘要筆記

    DedeCMS 核心類TypeLink.class.php摘要筆記,學習php就是借鑒與分析,讓自己的掌握的更多。
    2010-04-04
  • php調(diào)整gif動畫圖片尺寸示例代碼分享

    php調(diào)整gif動畫圖片尺寸示例代碼分享

    這篇文章主要介紹了如何使用php調(diào)整gif動畫圖片尺寸,大家可以參考使用
    2013-12-12
  • PHP 字符串分割和比較

    PHP 字符串分割和比較

    比較兩個字符串是否相等,最常見的方法就是使用“===”來判斷,至于它和“==”的區(qū)別,簡單來說就是前者強調(diào)“Identical”類型也要求一樣;后者要求“Equal”,值相同就可以了。
    2009-10-10
  • PHP應用JSON技巧講解

    PHP應用JSON技巧講解

    PHP應用JSON的相關函數(shù)為:json_encode($PHPcode);而應用PHP解析JSON的函數(shù)則為:json_decode($JSONcode);等。我們在文章中將做詳細介紹
    2013-02-02

最新評論

绩溪县| 高安市| 东宁县| 建瓯市| 修武县| 兴城市| 盐津县| 北安市| 资源县| 安福县| 迭部县| 永州市| 辽阳县| 封丘县| 延庆县| 通山县| 揭东县| 阳城县| 娄底市| 孝昌县| 定安县| 温泉县| 全南县| 包头市| 镇坪县| 松滋市| 株洲市| 开江县| 图们市| 尼勒克县| 平度市| 桃江县| 广西| 云和县| 呼和浩特市| 陵川县| 韩城市| 六安市| 清徐县| 胶州市| 墨竹工卡县|