多请求多数据量综合页面优化方案
关于页面优化一直是一个让人头痛的问题,除了修正那些不负责任的代码外,要考虑的因素还有很多。系统优化,我觉得就好比医生治病,你必须准确的找到病因,手起刀落,干净利索。今天就遇到了一个重症患者。
问题描述
问题分析
- 请求数量太多
- 原接口无用数据太多
- 三方接口效率低
解决方案
- 把多个请求归纳到一个。减少通信消耗时间
- 重写获取数据方法,去除掉所有无用操作和无用数据。
- 分发,异步执行多任务,然后统一返回,去除同步执行代码消耗时间。
- 对于一些耗时长的逻辑加缓存
技术实现
gearman实现异步分发处理任务
public function testTask($uid){$GLOBALS['_gm'] = []; //因为要把回调函数里边的数据拿出来,目前想到的就是用全局变量来处理$client = new \GearmanClient();$client->addServer($server, $port);$client->setCompleteCallback(function($task) {$GLOBALS['_gm'][$task->unique()] = json_decode($task->data(), true);});$client->setTimeout(3000);$client->addTask("function1", json_encode($fileData), '', 'data1');$client->addTask("function2", json_encode($fileData), '', 'data2');$client->addTask("function3", json_encode($fileData), '', 'data3');$client->addTask("function4", json_encode($fileData), '', 'data4');$client->addTask("function5", json_encode($fileData), '', 'data5');$client->addTask("function6", json_encode($fileData), '', 'data6');$client->addTask("function7", json_encode($fileData), '', 'data7');$client->addTask("function8", json_encode($fileData), '', 'data8');if ($client->runTasks()) {return $GLOBALS['_gm'];} else {return false;}}
一些解释:
- setCompleteCallback() : 文档里边有具体描述。 当 task complete 时 回调, 这边我需要拿到任务处理完毕后的数据,而且需要标记哪个结果对应哪个任务(后来想了一下,也可以在返回值里加标记),addTask 的 第四个参数用来标记任务,当全部处理完毕后,获取所有数据。
- 因为在回调方法里不能操作一般变量,所以用全局变量来获取返回值。
- setTimeout 是设置执行时间,如果不设置的话,当worker 程序出错不能及时返回的话,系统会一直卡主直到502。
/*** [getWorker 获取worker]* @DateTime 2018-01-25T19:03:19+0800* @return [type] [description]*/public function getWorker(){$worker = new \GearmanWorker();$worker->addServer($server, $port);//$worker->addFunction("funciton1", function($job){$data = $job->workload();$params = json_decode($data, true);...return json_encode($data1);});$worker->addFunction("funciton2", function($job){$data = $job->workload();$params = json_decode($data, true);...return json_encode($data2);});....return $worker;}/*** [testWorker 执行脚本]* @Author xuao* @DateTime 2018-01-25T19:03:35+0800* @return [type] [description]*/public function testWorker(){$worker = $this->getHrWorker();while ($worker->work());}
说明:
- getWorker() 负责提供一个 注册 function1-8的worker。
- 执行testWorker() 启动worker,通过启动多个进程可以启动多个worker。本人用superviser 来管理进程,并且 suiperviser 支持同一脚本启动多个进程。
- 如果感兴趣的话可以加一些输出,是真正的异步执行。关于并发执行任务就介绍完毕。
加 redis 缓存解决频繁统计数据问题
结果
多请求多数据量综合页面优化方案相关推荐
- SEO页面优化方案指南
一般小企业的SEO专员只能拿到正常运行的网站,公司也没有程序员无法修改网站整体结构.那么一份优秀的SEO页面优化方案显得极其重要,可以利用长尾词的优势将内容页在搜索引擎中获取良好的排名. 一.标题ti ...
- 禁止搜狗引擎收录php动态页面,优化方案:搜搜跟搜狗好像变得更加不爱收录页面...
优化方案:搜搜跟搜狗好像变得更加不爱收录页面 小编的SEO搏客沒有应用301跳转,关键是云虚拟主机不兼容,也好.以前提到URL规范化的5条提议也略微提及,但忽视了一种状况. 一般状况下,人们在搜索结果 ...
- elasticsearch亿级数据量全量索引导入优化方案
Hbase scan读取时候,调大 hbase.client.scanner.timeout.period 超时时间,不然可能会跑异常 org.apache.hadoop.hbase.UnknownS ...
- 页面优化指南(easyui页面优化方案
http://www.easyui.info/archives/1435.html http://www.360doc.com/content/14/0209/08/9200790_350899585 ...
- web 折线图大数据量拉取展示方案_【第2010期】QQ音乐Android客户端Web页面通用性能优化实践...
前言 今日早读文章由QQ音乐客户端开发工程师@关岳分享,公号:云加社区(ID:QcloudCommunity,腾讯云官方开发者社区)授权分享. 正文从这开始~~ QQ音乐 Android 客户端的 W ...
- 移动端页面性能优化方案
移动端页面性能优化方案 加载优化 使用首屏加载 按需加载 预加载 压缩图片 减少Cookie 异步加载第三方资源 脚本执行优化 CSS优化 JavaScript执行优化 渲染优化 SEO(搜索引擎优化 ...
- 浅谈移动端页面性能优化方案
众所周知,在互联网行业里,移动端占有的比例越来越高了,尤其实在电商领域,用户购物大部分在移动端.比如淘宝双11,在移动端支付的接近7成.这就要求我们产品质量越来越高,那对于我们前端工程师来说也是一个挑 ...
- MySQL深度分页的问题及优化方案:千万级数据量如何快速分页
前言 后端开发中为了防止一次性加载太多数据导致内存.磁盘IO都开销过大,经常需要分页展示,这个时候就需要用到MySQL的LIMIT关键字.但你以为LIMIT分页就万事大吉了么,Too young,to ...
- ajax ssm 页面跳转_Shiro 教程,Ajax请求拦截跳转页面方案
我们知道Ajax不能做页面redirect和forward跳转,所以Ajax请求假如没登录,那么这个请求给用户的感觉就是没有任何反应,而用户又不知道用户已经退出或是 Session 超时了.这个时 ...
最新文章
- oracle10g删除asm组,Oracle 10G RAC 删除已有节点
- 如何用xmanager远程连接centos6.0的桌面
- Django模板用法
- 基于form的身份验证怎样设置一个特例(使某页不需要验证)
- Delphi异常处理总结
- python新人一月工资_python【项目】:工资管理(简易版)
- matlab中uint16(uint8)函数的用法
- Got minus one from a read call异常
- Guns 代码生成演示_入门试炼02
- Android学习笔记---16_采用SharedPreferences保存用户偏好设置参数
- 深海迷航创造模式火箭怎么飞_深海迷航被玩成养鱼游戏 奇葩玩家的养殖之路...
- 1008 数组元素循环右移问题(C语言)
- 打谱软件-Avid Sibelius 8.5.0 macOS
- iOS 新浪微博客户端Demo实践之(六) 微博评论列表页面和发评论
- 微信h5 支付,已经获得weixin://wap/pay?prepayid,但是无法调起微信客户端支付
- 加密狗登录PHP开发,C# 使用加密狗登录 示例源码
- C/C++快速读写磁盘数据的方法
- 加强银行余额调节表在财务管理中的作用
- 2021年广州市学历入户全流程(持续更新)
- OPenGL 学习笔记之 VAO VBO EBO 以及SHADER 并使用其绘制三角形