标签: php8

  • PHP 8.0 发布——JIT 到来,性能大幅提升,一堆语法糖

    PHP 8.0 发布——JIT 到来,性能大幅提升,一堆语法糖

    早上起来,得知 PHP 8 正式发布了,作为曾经的半个 PHP 程序员,当然要去看一看。官方的 Release note 在这里,建议做 PHP 开发的各位同学都看一看:

    PHP 8 Released!

    接下来聊聊我的想法。

    JIT

    作为一个大版本,PHP 8 一定要有一些非常大的变化,JIT 就是这个非常大的变化。

    JIT 是 just-in-time 的简写,意思是在运行时将部分代码编译成机器码,以便反复使用。执行机器码的速度会比执行一般的解释型代码快很多,所以 JIT 通常意味着可以大大提升语言的运行速度。

    PHP 8 引入了两种 JIT 编译引擎,Tracing JIT 和 Function JIT,其中最值得期待的是 Tracing JIT。在基准测试中,速度有 3 倍提升;在一些长时间运行的应用当中,也有 1.5~2 倍的提升。参考下图,可惜,这个基于 WordPress 的博客提升只有一倍。

    PHP 8 JIT 性能表现
    PHP 8 JIT 性能表现

    所有的功能都要以性能为基础,PHP 从 v7 开始就很努力地提升性能,加上它的功能一直封装的很好,所以我一直觉得 PHP 是服务器端开发最好的语言。

    一堆语法糖

    不知道是不是受了同为 Web 开发语言的 JS 的影响,v7 之后的 PHP 非常放飞,每个版本都引入一堆新语法和语法糖,什么箭头函数、类型系统,基本上只要有用,都给加上。v8 也不例外,有一些语法已经到了我看不懂的程度了……

    比如这个 Attributes,我就没太明白,暂时把它理解成装饰器:

    // PHP 7
    class PostsController
    {
        /**
         * @Route("/api/posts/{id}", methods={"GET"})
         */
        public function get($id) { /* ... */ }
    }
    
    // PHP 8
    class PostsController
    {
        #[Route("/api/posts/{id}", methods: ["GET"])]
        public function get($id) { /* ... */ }
    }

    Laravel

    顺便说一下,前些日子 Laravel 也发布了 v8。不过不太一样的地方是,Laravel 的版本号跟 node.js、Ubuntu 采用同一种策略,即每年一个大版本,只有偶数版本会长期支持(LTS)。

    总结

    活到老学到老,大家加油。