webman中如何优化以下代码执行速度(伪代码)?

无鞋刺客

发现nodejs来执行这种就很快(我知道nodejs天生异步),想知道在webman里是否有提高执行速度的方案?

比如要生成10000个或者更多个文件,如何提高速度?
截图

946 4 1
4个回答

luohonen

第一:手动用fwrite()比直接用file_put_contents要块很多
第二:把事件驱动换成swoole,配置里面就可以改,然后用swoole_async_writefile 异步写入文件函数,那就很快了

tanhongbin

这种webman写估计不咋地,应该不会快的,nodejs大概多少时间?

  • 无鞋刺客 2023-04-03

    忘了,反正甩php几条街

  • tanhongbin 2023-04-03

    这玩意有啥实际意义嘛?我看压测node js 没有干过webman呀

  • 无鞋刺客 2023-04-03

    有一些地方有这种场景的,比如一些文章需要生成静态html,文章可能几十万,这时候用php(tp或webman,不打算用swoole)就很慢,但发现用nodejs 快不止一点点

  • tanhongbin 2023-04-03

    哦哦,这玩意只能多开进程,每个进程生产100个,开100个进程试试呢

  • 无鞋刺客 2023-04-03

    有空试试

SillyDog

项目引入amphp 或者 reactphp 然后你就会发现 js那一套怎么过来了 /手动狗头

  • 无鞋刺客 2023-04-03

    workerman做不到吗 /手动狗头

  • SillyDog 2023-04-03

    workerman 应该是实现不了的 它更像是php在cli下运行的一种方案 而不是 异步库

  • SillyDog 2023-04-03

    如果考虑php原生实现可以看下 php Fiber 或者 php yield 这两种方案 但是他们都更加底层

  • SillyDog 2023-04-03

    amphp 或者 reactphp 就是对这两种东西的封装 他们更加成熟

wolfcode
    public function index()
    {
        $t1   = microtime(true);
        $data = $this->testRange(10000);
        foreach ($data as $file) {
            fputs($file, "Hello World!");
            fclose($file);
        }
        $t2   = microtime(true);
        $tips = "运行时长:" . round(($t2 - $t1), 3) . 's';
        var_dump($tips);
    }

    protected function testRange($len)
    {
        $public = public_path() . "";
        for ($i = 1; $i <= $len; $i++) {
            yield fopen($public . "test_" . $i . ".txt", "w");
        }
    }
  • 无鞋刺客 2023-04-03

    我测比我上面截图代码还慢

  • wolfcode 2023-04-03

    上面截图的在你机子上几秒?

  • tanhongbin 2023-04-03

    1.073秒还慢?

  • wolfcode 2023-04-03

    1.073秒还慢?

  • 无鞋刺客 2023-04-03

    不对不对,我刚才写错了,原始是26秒,改成上面的代码也是10秒左右,确实快了,nodejs 2.5秒

  • luohonen 2023-04-03

    我这机子测试0.7秒

  • tanhongbin 2023-04-03

    自定义进程试试,然后分配写入呢

  • tanhongbin 2023-04-03

    我windows 机器测试都是2.77秒

  • tanhongbin 2023-04-03

    linux估计更快

  • 无鞋刺客 2023-04-03

    window系统,我截图代码在tp6里耗时 跟上面 网友提供的代码 运行基本 6秒左右,并没有差距,我还是用nodejs吧,不折腾了

年代过于久远,无法发表回答
🔝