如何使用耗时承诺来提高响应时间?

aviboy2006

我在这里寻求帮助,以了解我的代码是否正确。因为我看不出响应时间有多少改善。我用大口答应降低我的整体表现。

现有代码:

protected function sampleFunction(&$outputArray){
        foreach($outputArray as $key => $images){
            foreach($images as $index => $image){
              $result = NewClass::ClassSampleFunction($image->path, $this->samplePoint); // This is expensive function calls in current code. 
              }
        }
    }

使用guzzle promise回调的新代码:


protected function sampleFunction(&$outputArray){
        
        foreach($outputArray as $key => $images){
            $promises = array();
            foreach($images as $index => $image){
                $promises[$index] = $this->promiseFunction($image,$index); 
            }

            $results = \GuzzleHttp\Promise\settle($promises)->wait(); 
            foreach ($results as $resultkey => $value) { 
                    $search_point_image_xy_array = $value['value']->toArray();
                    // some logic to use result and put in another response array.
            } 
          } 
    }

protected function promiseFunction($image,$index){
      $promise =  new Promise(
                        function () use ($image,$index,&$promise) {
                            $response = NewClass::ClassSampleFunction($image->path, $this->samplePoint);
                            $promise->resolve($response);
                        },
                        function () {
                            // do something that will cancel the promise computation (e.g., close
                            // a socket, cancel a database query, etc...)
                        }
                    );
        return $promise;
    }

这段新代码试图在NewClass::ClassSampleFunction($image->path, $this->samplePoint);不使用外部端点的情况下使用耗时承诺来调用此昂贵的函数调用。但是在此之后,预计响应时间也会有所减少,但不会改变,而有时它会比旧代码更多。

提及NewClass::ClassSampleFunction($image->path, $this->samplePoint);此运行的函数,假设我首先有一个for循环4范围,第二个每个有一个for循环10,然后总共有40次调用此函数。如果我使用了异步调用,那么第一次调用就没有了,第二次调用就结束了,反之亦然。这可以帮助在旧代码中使用等待时间

我做错了什么?任何帮助或建议吗?

aviboy2006

最后,通过使用eachPromisefrom,我可以在一定程度上提高性能guzzle/promise

修改代码:

protected function sampleFunction(&$outputArray){
        
        foreach($outputArray as $key => $images){
            $promises = array();
            foreach($images as $index => $image){
                $promises[$index] = $this->promiseFunction($image,$index); 
            }

           $eachPromise = new EachPromise($promises, [
          // how many concurrency we are use
          'concurrency' => count($promises),
          'fulfilled' => function ($response,$index) use (&$images, &$outputArray)
           {
             //logic for other operation.
               
            },
          'rejected' => function ($reason) {
          }
        ]);
          } 
    }

protected function promiseFunction($image,$index){
      $promise =  new Promise(
                        function () use ($image,$index,&$promise) {
                            $response = NewClass::ClassSampleFunction($image->path, $this->samplePoint);
                            $promise->resolve($response);
                        },
                        function () {
                            // do something that will cancel the promise computation (e.g., close
                            // a socket, cancel a database query, etc...)
                        }
                    );
        return $promise;
    }

参考文章https : //medium.com/@ardanirohman/how-to-handle-async-request-concurrency-with-promise-in-guzzle-6-cac10d76220e

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据响应时间提高osmdroid .gemf离线地图性能

来自分类Dev

如果远程服务器位于很远的物理距离,如何提高响应时间

来自分类Dev

如何使用Retrofit 2获得API请求/响应时间

来自分类Dev

如何使用PHP获取服务器响应时间

来自分类Dev

如何使用Facebook API查询页面响应时间?

来自分类Dev

如何使用ELK堆栈监视nginx响应时间?

来自分类Dev

如何使用 Xcode 检查 API 的响应时间(性能)?

来自分类Dev

Swing:如何减少MouseInputAdapter的响应时间?

来自分类Dev

如何分析响应时间图

来自分类Dev

使用Kibana绘制响应时间

来自分类Dev

使用PHP / MySQL的平均响应时间

来自分类Dev

如何通过使用for循环创建数组来提高时间效率?

来自分类Dev

使用响应时间随时间变化的jmeter响应时间

来自分类Dev

NSXMLParser响应时间

来自分类Dev

测试响应时间

来自分类Dev

使用Python获取DNS解析时间和响应时间

来自分类Dev

如何在客户端使用cxf记录Soap请求的响应时间?

来自分类Dev

如何使用GNUPlot从ApacheBench输出文件绘制响应时间的直方图?

来自分类Dev

如何使用Test-Connection在Powershell中计算平均Ping响应时间?

来自分类Dev

如何使用HttpTest(flurl)模拟更长的响应时间(而不是超时)

来自分类Dev

数据源属性提高了应用程序的响应时间?

来自分类Dev

如何动态/响应时间更改jQuery datepicker的月数

来自分类Dev

如何减少服务器响应时间?

来自分类Dev

如何测量Sails.js请求/响应时间

来自分类Dev

如何衡量服务器的请求和响应时间?

来自分类Dev

如何在jmeter中获取网页的响应时间?

来自分类Dev

如何在MySQL中记录查询响应时间?

来自分类Dev

如何测量和显示“处理中”按键的响应时间?

来自分类Dev

如何减少服务器响应时间?

Related 相关文章

  1. 1

    如何根据响应时间提高osmdroid .gemf离线地图性能

  2. 2

    如果远程服务器位于很远的物理距离,如何提高响应时间

  3. 3

    如何使用Retrofit 2获得API请求/响应时间

  4. 4

    如何使用PHP获取服务器响应时间

  5. 5

    如何使用Facebook API查询页面响应时间?

  6. 6

    如何使用ELK堆栈监视nginx响应时间?

  7. 7

    如何使用 Xcode 检查 API 的响应时间(性能)?

  8. 8

    Swing:如何减少MouseInputAdapter的响应时间?

  9. 9

    如何分析响应时间图

  10. 10

    使用Kibana绘制响应时间

  11. 11

    使用PHP / MySQL的平均响应时间

  12. 12

    如何通过使用for循环创建数组来提高时间效率?

  13. 13

    使用响应时间随时间变化的jmeter响应时间

  14. 14

    NSXMLParser响应时间

  15. 15

    测试响应时间

  16. 16

    使用Python获取DNS解析时间和响应时间

  17. 17

    如何在客户端使用cxf记录Soap请求的响应时间?

  18. 18

    如何使用GNUPlot从ApacheBench输出文件绘制响应时间的直方图?

  19. 19

    如何使用Test-Connection在Powershell中计算平均Ping响应时间?

  20. 20

    如何使用HttpTest(flurl)模拟更长的响应时间(而不是超时)

  21. 21

    数据源属性提高了应用程序的响应时间?

  22. 22

    如何动态/响应时间更改jQuery datepicker的月数

  23. 23

    如何减少服务器响应时间?

  24. 24

    如何测量Sails.js请求/响应时间

  25. 25

    如何衡量服务器的请求和响应时间?

  26. 26

    如何在jmeter中获取网页的响应时间?

  27. 27

    如何在MySQL中记录查询响应时间?

  28. 28

    如何测量和显示“处理中”按键的响应时间?

  29. 29

    如何减少服务器响应时间?

热门标签

归档