在我们平时的程序中难免出现同时访问几个接口的情况,平时我们用curl进行访问的时候,一般都是单个、顺序访问,假如有3个接口,每个接口耗时500毫秒那么我们三个接口就要花费1500毫秒了,这个问题太头疼了严重影响了页面访问速度,有没有可能并发访问来提高速度呢?今天就简单的说一下,利用curl并发来提高页面访问速度,
希望大家多指导。
1、老的curl访问方式以及耗时统计

function curl_fetch($url, $timeout=3){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$data = curl_exec($ch);$errno = curl_errno($ch);if ($errno>0) {$data = false;}curl_close($ch);return $data;
}
function microtime_float()
{list($usec, $sec) = explode(" ", microtime());return ((float)$usec + (float)$sec);
}
$url_arr=array("taobao"=>"http://www.taobao.com","sohu"=>"http://www.sohu.com","sina"=>"http://www.sina.com.cn",);$time_start = microtime_float();$data=array();foreach ($url_arr as $key=>$val){$data[$key]=curl_fetch($val);}$time_end = microtime_float();$time = $time_end - $time_start;echo "耗时:{$time}";
?>

  

耗时:0.614秒
2、curl并发访问方式以及耗时统计

<?php
function curl_multi_fetch($urlarr=array()){$result=$res=$ch=array();$nch = 0;$mh = curl_multi_init();foreach ($urlarr as $nk => $url) {$timeout=2;$ch[$nch] = curl_init();curl_setopt_array($ch[$nch], array(CURLOPT_URL => $url,CURLOPT_HEADER => false,CURLOPT_RETURNTRANSFER => true,CURLOPT_TIMEOUT => $timeout,));curl_multi_add_handle($mh, $ch[$nch]);++$nch;}/* wait for performing request */do {$mrc = curl_multi_exec($mh, $running);} while (CURLM_CALL_MULTI_PERFORM == $mrc);while ($running && $mrc == CURLM_OK) {// wait for networkif (curl_multi_select($mh, 0.5) > -1) {// pull in new data;do {$mrc = curl_multi_exec($mh, $running);} while (CURLM_CALL_MULTI_PERFORM == $mrc);}}if ($mrc != CURLM_OK) {error_log("CURL Data Error");}/* get data */$nch = 0;foreach ($urlarr as $moudle=>$node) {if (($err = curl_error($ch[$nch])) == '') {$res[$nch]=curl_multi_getcontent($ch[$nch]);$result[$moudle]=$res[$nch];}else{error_log("curl error");}curl_multi_remove_handle($mh,$ch[$nch]);curl_close($ch[$nch]);++$nch;}curl_multi_close($mh);return  $result;
}
$url_arr=array("taobao"=>"http://www.taobao.com","sohu"=>"http://www.sohu.com","sina"=>"http://www.sina.com.cn",);
function microtime_float()
{list($usec, $sec) = explode(" ", microtime());return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
$data=curl_multi_fetch($url_arr);
$time_end = microtime_float();
$time = $time_end - $time_start;echo "耗时:{$time}";
?>

输出结果array('taobao'=>result,'sina'=>result,'baidu'=>result)  ;

耗时:0.316秒
帅气吧整个页面访问后端接口的时间节省了一半
3、curl相关参数
来自:http://cn2.php.net/manual/en/ref.curl.php
curl_close — Close a cURL session
curl_copy_handle — Copy a cURL handle along with all of its preferences
curl_errno — Return the last error number
curl_error — Return a string containing the last error for the current session
curl_exec — Perform a cURL session
curl_getinfo — Get information regarding a specific transfer
curl_init — Initialize a cURL session
curl_multi_add_handle — Add a normal cURL handle to a cURL multi handle
curl_multi_close — Close a set of cURL handles
curl_multi_exec — Run the sub-connections of the current cURL handle
curl_multi_getcontent — Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set
curl_multi_info_read — Get information about the current transfers
curl_multi_init — Returns a new cURL multi handle
curl_multi_remove_handle — Remove a multi handle from a set of cURL handles
curl_multi_select — Wait for activity on any curl_multi connection
curl_setopt_array — Set multiple options for a cURL transfer
curl_setopt — Set an option for a cURL transfer
curl_version — Gets cURL version information

原文地址:http://www.searchtb.com/2010/12/using-multicurl-to-improve-performance.html?spm=0.0.0.0.onjnnY

转载于:https://www.cnblogs.com/naledao/p/3644806.html

利用curl并发来提高页面访问速度相关推荐

  1. 如何让提高网站访问速度

    如何让提高网站访问速度 整理方案一: 网站访问速度可以直接影响到网站的流量,而网站的访问量几乎与网站的利益直接挂钩,因此网站的速度问题成为企业及站长十分关注的问题.现在网站越来越多,不少朋友的网站打开 ...

  2. 提高WordPress访问速度与性能的技巧总结

    性能是任何成功网站的一个关键因素.越来越多的人选择使用WordPress搭建个人博客.CMS内容展示或是企业网站,但可能由于高流量或一些未知的原因,导致你的WordPress性能越来越低,尤其对于大多 ...

  3. 提高页面显示速度的秘技

    在安排Web页面的布局时,最常用的方法之一是用HTML表格界定页面的结构.例如,假设Web页面由顶端的导航条和它下面的两栏(列)构成--左边的列是一个导航条,右边的列是实际安置内容的区域.对于这样一个 ...

  4. 仅使用CSS提高页面渲染速度

    用户在访问一个Web网站(页面)或应用时,总是希望它的加载速度快,功能流畅.如果过于慢,用户就很有可能失去耐心而离开你的Web网站或应用.作为开发人员,给自己应用提供更快的访问速度,提供很好的用户体验 ...

  5. 提高github访问速度(深入研究底层网络通信、域名解析等原理)

    1 去这个网站 http://tool.chinaz.com/dns/找到ttl延迟较低的服务器ip 2 以管理员模式打开cmd,再通过以下命令打开cmd notepad C:\Windows\Sys ...

  6. 优化网页代码提高网页访问速度

    一.不要将整个页面放到到一个table中 -----[感受最深] 一般大家都是用表格来进行布局的,将整个页面的内容都塞进了一个Table(表格)里,然后再由单元格td来划分各个"块" ...

  7. 提高网站访问速度的十个技巧

     网站的访问速度和性能对用户体验来说是非常重要的.如果你的网站访问非常的慢,你不仅会失去用户,而且更可怕的是你会失去潜在的客户.像Google这样的互联网巨头也会把网站访问速度作为排名的一个参数. ...

  8. 小麦盒子cdn_CDN加速,提高网站访问速度的最佳方法

    上个月,一台湾的朋友向我反映了他的网站现在十分糟糕的情况. 事情是这样的,这位台湾朋友有一网站,面向用户主要在中国大陆,2010年10月,他把网站寄存地从台湾移到了广东,他租用的是独立服务器,使用线路 ...

  9. 提高页面载入速度简单易行的四个办法。

    1.去掉页面中不用的JS.CSS引用. 2.降低页面连接数,即降低请求server的次数. 3.配置GZIP.对页面进行压缩,加快页面从server到浏览器的传输速度. 4.检查页面查询SQL是否使用 ...

最新文章

  1. 使用webpack-dev-server设置反向代理解决前端跨域问题
  2. 模组使用之NB-IoT模组的工作模式、PSM、DRX和eDRX状态说明
  3. matlab谐波仿真代码,matlab的谐波仿真程序基于ip-iq法???怎么出不来图像啊???...
  4. transmac使用方法_Mac苹果电脑降级方法?
  5. 不支持所上传的文件格式。请确认选择的文件无误。_职场人必备!如何把PDF文件转换成word文档?...
  6. linux 内核块设备驱动,你了解Linux 块设备驱动?
  7. 游戏主播们为什么早上不玩游戏?直播圈里还有哪些不成文的规定呢?
  8. linux拆分文件会影响源文件吗,linux split拆分文件
  9. 2017全国计算机二级office题库,2017年计算机二级office题库(附答案)
  10. 快速使用注解方式实现aop切面编程
  11. 得物(毒)加密算法解析 得物逆向
  12. IntelliJ Save Action
  13. Java中的switch
  14. 从0到1搭建大数据平台之数据计算
  15. react native 添加自定义字体
  16. 免费软著申请登记详细教程
  17. html字数不同相同宽度的按钮,HTML_按钮在IE中两边被拉伸的 BUG,大家在写按钮(input、button) - phpStudy...
  18. 如何在电子邮件中推销自己(服务)
  19. [Python模块学习]用tinify模块压缩和优化图片
  20. [ pikachu ] 靶场通关之 XSS (二) --- 反射型 XSS 之 get 型

热门文章

  1. python均线斜率_一根20日均线闯天下?——量化回测“压箱底指标”
  2. 怎么理解python的__init___理解Python中super()和__init__()方法
  3. 关于微信聊天记录双击弹出具体显示内容的效果
  4. 机器学习 数据量不足问题----1 做好特征工程 2 不要用太多的特征 3 做好交叉验证 使用线性svm...
  5. Golang通道的无阻塞读写的方法示例
  6. 37、Django实战第37天:404以及500页面配置
  7. propertychange 属性说明
  8. IDEA Spark程序报错处理
  9. 【bzoj3524】【Poi2014】【Couriers】可持久化线段树(主席树)水题
  10. THE TOP FILE(top文件详解)