1

PHP7 特性和优化总结

 1 year ago
source link: http://surest.cn/archives/227/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
  • 强制(默认)
使用 declare(strict_types=1); 声明在头部

类型速查

https://www.php.net/manual/zh/language.types.declarations.php

标量类型

  • string
  • float

复合数据类型

  • 类(Object)

特殊数据类型

  • Resource (资源类型)
  • 接口(interface)
  • Callable(Callback 回调函数)

两者的区别

总而言之,核心就是 严格模式下: 严格限制返回类型 严格限制传入类型

默认模式下 则是可选的(不会报错)

list($a, $b) = [$a, $b];
...[$a, $b];

NULL 合并运算符

$user = ['name' => 'dcf'];
echo $user['age'] ?? "[error] 不存在的值";

太空操作符

用的比较少,场景可以放在 sort 中进行使用,反正回调函数 就是需要返回 0,-1,1
echo 1 <=> 1 // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

Define 定义常量

场景用来构建可变参数参量,早起的 const 无法支持定义一个 可变变量常量,参考如下
const HOST = getenv('HOST'); // 此方法 将 error: 表达式不允许作为常量值
define('HOST_T', getenv('HOST_T')); // 正常运行
不参考,不建议使用

命名空间 use

缩减代码量,也不是太建议,当包多的时候有些包名容易重复,不适合全局搜索管理
//use Intervention\Image\AbstractFont;
//use Intervention\Image\Image;
//use Intervention\Image\ImageManager;

use Intervention\Image\{AbstractFont, Image, ImageManager};
不建议使用,维护成本,使用不当容易出问题,推荐异步函数或者 JOB 队列处理

intdiv

var_dump(intdiv(200, 3)); // 不会进行四舍五入,向下取整

整体的性能提升

  1. Zval 的改变

https://www.laruence.com/2018/04/08/3170.html

  1. 内部类型 zend_string
  2. PHP 数组的变化(HashTable 和 Zend Array)
  3. 函数调用机制(Function Calling Convention)
  4. 通过宏定义和内联函数(inline),让编译器提前完成部分工作

以上的涉及的都是底层,没有研究过就不说了。说一下关于原生 php 之外的性能

运行层方面

php 大多使用的为 PHP-FPM来运行,每次运行都会开启一个连接子进程,相互独立而不干扰,但是也导致了每次都需要连接数据库、redis 等等外部工具

所以,可以在适当环境或者抽离 api,进行改造,将并发量大的 或者 核心模块的项目进行抽离,使用微服务模式运行,并使用常驻模式,如 swoole 、workman 相关

同事,进行适当压测,测算可运行承载量,进行合理分配内存和服务器

擅用 各种缓存,不限于 文件缓存,Redis 等 或者接入 RQ 之类的异步处理框架。由于 PHP 运行的项目原因,大多采用混合开发,在各种文件方面,让 PHP 不要承载除 API 其他的工作,如

  • 图片等资源放入 OSS、CDN 等等
  • 数据库使用 RDS
  • 日志使用 ES 等等

秉承单一工作职责,有效隔离

代码层方面

禁止使用面条示写法,多使用 类进行编写。

而每个类都进行有效隔离,抽离公共方法,私有方法。合理分配目录进行管理。

  • 擅于 搜索优化,拒绝长延时 sql,拒绝长时间读取远程 api 或者文件等等。
  • 请求、连接等等都要进行设立 超时时间,防止整体项目停止运行
  • 做好异常处理汇报工作
  • 擅于设计模式,能异步则异步,提高整体 api 运行效率

本文由 邓尘锋 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Feb 16, 2023 at 11:16 am


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK