PHP7于2015年12月3日正式发布,是PHP语言发展史上的一次重大革新。PHP7基于全新的Zend引擎(PHPNG项目),性能比PHP5.6提升了2倍以上,内存消耗降低了一半,同时引入了大量新特性,如标量类型声明、返回类型声明、null合并运算符、太空船运算符、匿名类等。2016年,PHP7逐渐普及,越来越多的项目开始升级到PHP7,享受性能提升和新特性带来的便利。

作为一个PHP开发者,我在2016年第一时间就把项目升级到了PHP7,亲身体验了PHP7带来的性能提升和新特性。今天就来系统地讲解PHP7新特性与性能优化实战,从核心新特性到性能提升原理,从升级指南到兼容性问题,从性能优化最佳实践到常见问题解答,帮助你全面了解和用好PHP7。

一、PHP7简介

1. PHP7的历史

PHP7的前身是PHPNG(PHP Next-Generation)项目,由Dmitry Stogov于2012年发起,目标是提升PHP的性能。2014年,PHPNG项目的成果被合并到PHP主干,成为PHP7的基础。

2015年12月3日,PHP7.0.0正式发布。PHP7跳过了PHP6的版本号(PHP6因为Unicode支持项目失败而被废弃),直接从PHP5跳到PHP7。

PHP7的发布,标志着PHP语言进入了一个新的时代。它不仅带来了巨大的性能提升,还引入了大量现代化的语言特性,让PHP更加严谨、高效、现代化。

2. PHP7的核心改进

  • 性能大幅提升:比PHP5.6快2倍以上,部分场景快3-4倍
  • 内存消耗降低:内存消耗降低了约50%
  • 全新的Zend引擎:基于PHPNG项目,重构了Zend引擎
  • 抽象语法树(AST):编译过程引入抽象语法树,为后续优化和特性提供基础
  • 原生Zval(zend_value):重新设计了Zval结构,减少内存分配和引用计数开销
  • 64位整数支持:在64位平台上支持原生64位整数
  • 一致的64位支持:字符串、整数、文件操作等在64位平台上一致
  • 大量弃用和移除:移除了PHP4时代的旧特性,如mysql扩展、ereg正则等
  • 错误处理改进:部分致命错误改为可捕获的异常(Error异常)

3. PHP7的性能数据

根据官方基准测试,PHP7相比PHP5.6的性能提升:

测试项目PHP5.6PHP7.0提升倍数
综合基准1.0x2.0x+2倍+
WordPress1.0x2.3x2.3倍
Drupal1.0x1.8x1.8倍
Magento1.0x2.1x2.1倍
纯计算(mandelbrot)1.0x3.5x3.5倍
内存消耗100%~50%降低50%

可以看到,PHP7在真实Web应用中的性能提升约为1.8-2.3倍,在纯计算场景中提升更大(3.5倍),内存消耗降低了约50%。这意味着,同样的服务器,升级到PHP7后可以承载2倍以上的流量,或者在相同流量下服务器负载降低一半。

二、PHP7核心新特性

1. 标量类型声明(Scalar Type Declarations)

PHP7支持标量类型声明,可以在函数参数中指定类型为int、float、string、bool。

// PHP5中只能指定类、数组、可调用对象类型
function sum(array $nums) { /* ... */ }

// PHP7中支持标量类型声明
function sum(int $a, int $b): int {
    return $a + $b;
}

sum(1, 2);      // 3
sum(1.5, 2.5);  // 默认弱类型模式,会自动转换为int,结果3
// sum("a", "b"); // 弱类型模式下会转换为0,结果0

PHP7有两种类型声明模式:

  • 弱类型模式(默认):类型不匹配时自动转换,类似PHP5的行为
  • 严格类型模式:类型不匹配时抛出TypeError异常,需要在文件顶部声明declare(strict_types=1);
<?php
declare(strict_types=1);

function sum(int $a, int $b): int {
    return $a + $b;
}

sum(1, 2);      // 3
sum(1.5, 2.5);  // 严格模式下抛出TypeError异常,因为1.5是float不是int

标量类型声明让PHP代码更加严谨,可以在开发阶段就发现类型错误,减少运行时bug,同时也提高了代码的可读性和可维护性。

2. 返回类型声明(Return Type Declarations)

PHP7支持函数返回类型声明,可以指定函数返回值的类型。

function sum(int $a, int $b): int {
    return $a + $b;
}

function getUser(): array {
    return ['id' => 1, 'name' => '张三'];
}

function findUser(int $id): ?User {
    // PHP7.1支持可空返回类型(?表示可以返回null)
    $user = User::find($id);
    return $user ?: null;
}

// 返回void(PHP7.1)
function log(string $message): void {
    file_put_contents('log.txt', $message, FILE_APPEND);
}

返回类型声明的好处:

  • 明确函数返回值类型,提高代码可读性
  • 在开发阶段发现返回值类型错误
  • 配合静态分析工具,可以发现更多潜在bug
  • 为IDE提供更准确的类型提示

注意:PHP7.0不支持可空返回类型(?Type)和void返回类型,这些是PHP7.1引入的。2016年PHP7.0是主流版本,PHP7.1于2016年12月发布。

3. null合并运算符(Null Coalescing Operator)

PHP7引入了null合并运算符??,用于简化isset()判断。

// PHP5中判断变量是否存在并设置默认值
$username = isset($_GET['username']) ? $_GET['username'] : '默认值';

// PHP7中使用null合并运算符
$username = $_GET['username'] ?? '默认值';

// 支持链式调用
$username = $_GET['username'] ?? $_POST['username'] ?? '默认值';

// 与三元运算符的区别
// ?? 只判断是否为null,而isset判断是否为null且是否已定义
// ?? 不会因为变量未定义而产生notice
$value = $undefined ?? 'default';  // 不会产生notice,结果'default'

null合并运算符让代码更加简洁,减少了重复的变量名,提高了代码的可读性。

4. 太空船运算符(Spaceship Operator)

PHP7引入了太空船运算符<=>,用于比较两个表达式,返回-1、0或1。

// 整数比较
echo 1 <=> 1; // 0(相等)
echo 1 <=> 2; // -1(左边小于右边)
echo 2 <=> 1; // 1(左边大于右边)

// 字符串比较
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
echo "a" <=> "a"; // 0

// 数组比较
echo [1, 2] <=> [1, 2]; // 0
echo [1, 2] <=> [1, 3]; // -1

// 用于usort排序
$data = [
    ['name' => '张三', 'age' => 25],
    ['name' => '李四', 'age' => 30],
    ['name' => '王五', 'age' => 20],
];

// 按年龄排序
usort($data, function($a, $b) {
    return $a['age'] <=> $b['age'];
});

// 多字段排序(先按年龄,再按姓名)
usort($data, function($a, $b) {
    return $a['age'] <=> $b['age'] ?: $a['name'] <=> $b['name'];
});

太空船运算符让比较和排序代码更加简洁,特别是在usort等需要比较函数的场景中。

5. 匿名类(Anonymous Classes)

PHP7支持匿名类,可以在需要时即时创建类的实例,不需要显式定义类。

// 定义并实例化匿名类
$logger = new class {
    public function log(string $message) {
        echo date('Y-m-d H:i:s') . ' ' . $message . "\n";
    }
};

$logger->log('这是一条日志');

// 匿名类可以继承类和实现接口
interface LoggerInterface {
    public function log(string $message);
}

class BaseLogger {
    protected $prefix = 'LOG';
}

$logger = new class('DEBUG') extends BaseLogger implements LoggerInterface {
    public function __construct(string $prefix) {
        $this->prefix = $prefix;
    }
    
    public function log(string $message) {
        echo "[{$this->prefix}] {$message}\n";
    }
};

$logger->log('这是一条调试日志');

// 匿名类用于测试(Mock对象)
$userService = new UserService(
    new class implements UserRepository {
        public function find(int $id): ?User {
            return new User($id, '测试用户');
        }
    }
);

匿名类的好处:

  • 简单的类不需要显式定义,减少类文件数量
  • 适合一次性使用的简单类(如回调、测试Mock、简单实现)
  • 代码更加紧凑,逻辑内聚

注意:匿名类在PHP7.0中已经支持,但是匿名类的名称是PHP内部生成的,不能通过类名字符串引用。

6. 常量数组(Constant Arrays)

PHP7支持使用define()定义数组常量。

// PHP5中只能用const定义数组常量(类常量)
// PHP7中可以用define()定义数组常量
define('CONFIG', [
    'host' => 'localhost',
    'port' => 3306,
    'database' => 'mydb',
]);

echo CONFIG['host']; // localhost

// 也可以用const定义(PHP5.6已经支持)
const COLORS = ['red', 'green', 'blue'];
echo COLORS[0]; // red

常量数组让配置信息的定义更加灵活,可以将一组相关的配置定义为一个数组常量。

7. use语句分组(Grouped use Declarations)

PHP7支持use语句分组,可以将同一个命名空间下的多个类、函数、常量用一个use语句导入。

// PHP5中需要分别导入
use My\Namespace\ClassA;
use My\Namespace\ClassB;
use My\Namespace\ClassC as C;
use function My\Namespace\funcA;
use function My\Namespace\funcB;
use const My\Namespace\CONST_A;
use const My\Namespace\CONST_B;

// PHP7中可以分组导入
use My\Namespace\{ClassA, ClassB, ClassC as C};
use function My\Namespace\{funcA, funcB};
use const My\Namespace\{CONST_A, CONST_B};

use分组让导入语句更加简洁,减少了重复的命名空间前缀。

8. 整数除法函数intdiv()

PHP7新增了intdiv()函数,用于整数除法,返回商的整数部分。

// PHP5中整数除法
$result = (int)(10 / 3); // 3

// PHP7中使用intdiv()
$result = intdiv(10, 3); // 3
$result = intdiv(-10, 3); // -3(向零取整)

intdiv()比强制类型转换更加清晰和安全,特别是在处理负数时。

9. 随机字节和随机整数函数

PHP7新增了randombytes()和randomint()函数,用于生成密码学安全的随机数。

// 生成密码学安全的随机字节
$bytes = random_bytes(16); // 生成16个随机字节
echo bin2hex($bytes); // 转换为十六进制字符串

// 生成密码学安全的随机整数
$int = random_int(1, 100); // 生成1-100之间的随机整数

// 用于生成安全的令牌
$token = bin2hex(random_bytes(32));

这两个函数使用操作系统的CSPRNG(Cryptographically Secure Pseudo-Random Number Generator),比mt_rand()和rand()更加安全,适合用于密码、令牌、加密等安全场景。

10. 弃用和移除的特性

PHP7移除了一些过时的特性:

  • 移除mysql扩展:旧的mysql*函数被移除,使用mysqli或PDOMySQL替代
  • 移除ereg正则扩展:ereg函数被移除,使用preg(PCRE)替代
  • 移除mssql扩展:使用sqlsrv或PDO_SQLSRV替代
  • 移除PHP4风格的构造函数:类名与方法名相同的构造函数被移除,使用__construct()
  • 弃用passwordhash()的salt选项:passwordhash()的salt选项被弃用,使用自动生成的salt
  • 移除asptags和scriptphp_tags配置:不再支持<% %>和<script language="php">标签

这些移除和弃用,让PHP7更加干净和现代化,但是也意味着一些老旧代码需要修改才能在PHP7上运行。

三、PHP7性能提升原理

PHP7的性能提升不是偶然的,而是基于Zend引擎的深度重构。以下是PHP7性能提升的主要原因:

1. 抽象语法树(AST)

PHP7在编译过程中引入了抽象语法树(Abstract Syntax Tree,AST)。在PHP5中,编译器直接将PHP代码解析为操作码(opcode),中间没有AST这一层。PHP7引入AST后,编译过程分为两步:先将PHP代码解析为AST,再将AST编译为opcode。

引入AST的好处:

  • 编译过程更加清晰,易于维护和扩展
  • 可以在AST层面进行优化,为JIT等优化提供基础
  • 一些语法特性(如统一变量语法)更容易实现
  • 静态分析工具可以基于AST进行分析

2. 原生Zval(zend_value)

PHP5中的Zval(Zend value,PHP变量的内部表示)是一个复杂的结构体,包含了类型、值、引用计数、垃圾回收等信息,每个Zval都需要单独分配内存。

PHP7重新设计了Zval结构:

  • Zval本身存储在栈上(不需要单独分配内存),只有复杂类型(字符串、数组、对象)才需要单独分配内存
  • 简单类型(整数、浮点数、布尔值、null)直接存储在Zval中,不需要引用计数
  • 引用计数只在复杂类型中使用,减少了引用计数的开销
  • Zval的大小从PHP5的24字节(32位)/48字节(64位)减少到PHP7的16字节(64位)

这种设计大大减少了内存分配和引用计数的开销,提升了性能,降低了内存消耗。

3. 内存分配优化

PHP7优化了内存分配器:

  • 使用了自定义的内存分配器(zend_alloc),减少了系统调用
  • 引入了内存池(memory pool),预分配大块内存,减少malloc/free调用
  • 优化了字符串和数组的内存布局,减少内存碎片
  • 引入了引用计数的写时复制(COW)优化,减少内存复制

4. 哈希表优化

PHP的数组底层是哈希表(HashTable)。PHP7优化了哈希表:

  • 哈希表的存储从"桶+链表"改为"数组+链表",减少了内存分配
  • 哈希表元素的存储更加紧凑,提高了缓存命中率
  • 优化了哈希函数和冲突处理,提升了查找性能
  • 数组的内存消耗降低了约50%

5. 调用栈优化

PHP7优化了函数调用机制:

  • 函数调用的参数传递和返回值处理更加高效
  • 减少了函数调用的内存分配和复制
  • 优化了内部函数的调用,内部函数调用更快
  • 引入了专门的调用指令,减少了指令数量

6. JIT(Just-In-Time)编译的准备

虽然PHP7.0本身没有包含JIT编译器,但是PHP7的重构(AST、原生Zval等)为后续的JIT编译打下了基础。PHP8.0引入了JIT编译器,进一步提升了性能。

四、PHP7升级指南

1. 升级前的准备

  • 检查PHP版本要求:确认你的项目依赖的框架、库、扩展是否支持PHP7
  • 备份代码和数据:升级前备份代码、数据库、配置文件
  • 在测试环境测试:先在测试环境升级PHP7,测试所有功能,确认没有问题后再在生产环境升级
  • 使用PHP兼容性检查工具:使用php7cc(PHP7 Compatibility Checker)等工具扫描代码,发现不兼容的地方

2. 常见兼容性问题

  • mysql扩展被移除:mysql_*函数被移除,需要改为mysqli或PDO

```php // PHP5(旧代码) $link = mysqlconnect('localhost', 'user', 'pass'); mysqlselectdb('db', $link); $result = mysqlquery('SELECT * FROM users', $link);

// PHP7(改为mysqli) $mysqli = new mysqli('localhost', 'user', 'pass', 'db'); $result = $mysqli->query('SELECT * FROM users');

// 或改为PDO $pdo = new PDO('mysql:host=localhost;dbname=db', 'user', 'pass'); $result = $pdo->query('SELECT * FROM users'); ```

  • ereg正则被移除:ereg函数被移除,改为preg

```php // PHP5(旧代码) if (ereg('^[a-zA-Z0-9]+$', $string)) { / ... / }

// PHP7(改为preg) if (preg_match('/^[a-zA-Z0-9]+$/', $string)) { / ... / } ```

  • PHP4风格构造函数被移除:类名与方法名相同的构造函数被移除

```php // PHP5(旧代码) class User { function User($name) { // PHP4风格构造函数 $this->name = $name; } }

// PHP7(改为construct) class User { function construct($name) { $this->name = $name; } } ```

  • 错误处理变化:部分致命错误改为可捕获的Error异常

```php // PHP5中,调用不存在的方法会导致致命错误,脚本终止 // PHP7中,可以捕获Error异常 try { $obj->nonExistentMethod(); } catch (Error $e) { echo "错误: " . $e->getMessage(); }

// Error和Exception都实现了Throwable接口 try { // 可能抛出Error或Exception的代码 } catch (Throwable $e) { echo "捕获到: " . $e->getMessage(); } ```

  • foreach的变化:PHP7中foreach不再改变内部数组指针,且按值遍历时操作的是数组的副本

```php // PHP5中,foreach会改变数组内部指针 $arr = [1, 2, 3]; foreach ($arr as $val) { var_dump(current($arr)); // PHP5中会变化,PHP7中始终返回第一个元素 }

// PHP7中,按值遍历修改数组不会影响循环 $arr = [1, 2, 3]; foreach ($arr as $val) { $arr[] = $val * 2; // PHP7中不会导致无限循环 } ```

  • 十六进制字符串不再被视为数字:PHP7中,十六进制字符串(如"0x1A")不再被自动转换为数字

```php // PHP5中 var_dump("0x1A" == "26"); // true

// PHP7中 vardump("0x1A" == "26"); // false vardump(hexdec("0x1A") == 26); // true(需要显式转换) ```

3. 扩展兼容性

升级PHP7时,需要确认所有使用的PHP扩展都有PHP7版本:

  • 主流扩展(mysqli、pdo、gd、curl、mbstring、openssl、redis、memcached等)都已经支持PHP7
  • 一些老旧的、不再维护的扩展可能没有PHP7版本,需要寻找替代方案或自行移植
  • 可以通过php -m查看已加载的扩展,通过pecl install安装扩展的PHP7版本

4. 升级步骤

  1. 在测试环境安装PHP7
  2. 安装项目所需的扩展
  3. 运行php7cc等工具扫描代码,修复不兼容的地方
  4. 运行项目的自动化测试,确认功能正常
  5. 进行人工测试,重点测试核心功能
  6. 性能测试,对比PHP5和PHP7的性能
  7. 在生产环境灰度升级(先升级部分服务器,观察运行情况)
  8. 全部升级到PHP7

五、PHP7性能优化最佳实践

升级到PHP7后,还可以通过以下优化进一步提升性能:

1. 使用OPcache

OPcache是PHP的字节码缓存扩展,可以将PHP脚本编译后的opcode缓存到内存中,避免每次请求都重新编译。

; php.ini配置
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_file_override=1

OPcache可以将PHP性能提升2-3倍,是PHP性能优化的必备扩展。PHP7中OPcache已经内置,只需要启用即可。

2. 使用PHP7的新特性

  • 使用标量类型声明和返回类型声明:可以让Zend引擎进行更多优化,同时提高代码质量
  • 使用null合并运算符:比isset()三元运算符更高效
  • 使用太空船运算符:在排序等场景中比多次比较更高效
  • 使用randomint()和randombytes():比mt_rand()更安全且性能不错
  • 使用intdiv():比强制类型转换更清晰

3. 代码层面优化

  • 避免在循环中做重复的事情:如在循环中调用count()、在循环中连接数据库等
  • 使用引用传递大数组:避免大数组的复制,但是要注意引用可能带来的副作用
  • 使用isset()而不是arraykeyexists():isset()更快(因为是语言结构而非函数)
  • 使用===而不是==:严格比较更快,且避免类型转换带来的bug
  • 尽量使用PHP内置函数:内置函数是C实现的,比PHP循环快得多
  • 避免使用正则表达式:正则表达式较慢,能用字符串函数就用字符串函数
  • 关闭不必要的错误报告:生产环境设置errorreporting=EALL & ~EDEPRECATED & ~ESTRICT,display_errors=Off

4. 数据库优化

  • 使用PDO或mysqli的预处理语句:预处理语句可以重复使用,减少SQL解析开销
  • 使用索引:为查询频繁的字段添加索引,提升查询速度
  • 避免SELECT *:只查询需要的字段,减少数据传输
  • 使用批量插入:一次插入多条数据,比逐条插入快
  • 使用缓存:使用Redis、Memcached等缓存热点数据,减少数据库查询

5. Web服务器优化

  • 使用Nginx+PHP-FPM:Nginx的事件驱动模型比Apache的进程模型更高效
  • 启用Gzip压缩:减少响应体大小,提高传输速度
  • 启用浏览器缓存:静态文件设置较长的缓存时间
  • 使用CDN:静态资源使用CDN加速
  • PHP-FPM进程数优化:根据服务器配置调整pm.max_children等参数

6. 使用性能分析工具

  • Xdebug:可以进行代码覆盖率分析和性能分析(但是Xdebug会降低性能,生产环境不要安装)
  • Xhprof / Tideways:Facebook开源的PHP性能分析工具,可以分析函数调用耗时
  • Blackfire:SensioLabs推出的PHP性能分析工具,功能强大
  • PHP内置函数:使用microtime()、memorygetusage()等函数进行简单的性能测试

通过性能分析工具,可以找到代码中的性能瓶颈,有针对性地进行优化。

六、PHP7常见问题解答

Q1:PHP7兼容PHP5的代码吗?

A:大部分PHP5代码可以在PHP7上运行,但是有一些不兼容的地方(如mysql扩展、ereg正则、PHP4构造函数等)。建议使用php7cc等工具扫描代码,修复不兼容的地方后再升级。

Q2:PHP7的性能真的比PHP5快2倍吗?

A:根据官方基准测试,PHP7在真实Web应用中的性能提升约为1.8-2.3倍,在纯计算场景中提升更大(3.5倍)。实际提升取决于应用类型,CPU密集型应用提升明显,IO密集型应用(如数据库查询多的应用)提升相对较小。

Q3:升级到PHP7需要修改很多代码吗?

A:如果你的代码使用的是现代PHP写法(使用mysqli/PDO、preg正则、__construct构造函数),那么需要修改的地方很少。如果你的代码比较老旧(使用mysql_*函数、ereg正则、PHP4构造函数),那么需要修改的地方较多。

Q4:PHP7支持64位整数吗?

A:是的,PHP7在64位平台上支持原生64位整数。在PHP5中,64位平台上的整数仍然是32位(Windows)或有符号64位(Linux),且字符串和文件操作的64位支持不一致。PHP7统一了64位支持。

Q5:PHP7中的Error和Exception有什么区别?

A:在PHP7中,Error和Exception都实现了Throwable接口。Error表示PHP内部的错误(如调用不存在的方法、类型错误),Exception表示用户代码抛出的异常。两者都可以通过try-catch捕获,但是Error通常表示不可恢复的错误,Exception表示可以处理的异常。

Q6:PHP7.0、PHP7.1、PHP7.2有什么区别?

A:PHP7.0是PHP7的第一个版本(2015年12月发布),引入了核心新特性和性能提升。PHP7.1(2016年12月发布)引入了可空类型、void返回类型、类常量可见性、多异常捕获等。PHP7.2(2017年11月发布)引入了对象类型、参数类型扩展、密码哈希算法扩展等。2016年主流版本是PHP7.0,年底PHP7.1发布。

总结

PHP7是PHP语言发展史上的一次重大革新,带来了2倍以上的性能提升和50%的内存消耗降低,同时引入了大量现代化的语言特性。2016年,PHP7逐渐普及,越来越多的项目开始升级到PHP7。

PHP7的核心新特性:

  1. 标量类型声明(int、float、string、bool)
  2. 返回类型声明
  3. null合并运算符(??)
  4. 太空船运算符(<=>)
  5. 匿名类
  6. 常量数组(define()定义数组)
  7. use语句分组
  8. intdiv()整数除法函数
  9. randombytes()和randomint()安全随机数函数
  10. 错误处理改进(Error异常)

PHP7性能提升的原理:

  1. 抽象语法树(AST)
  2. 原生Zval(zend_value)
  3. 内存分配优化
  4. 哈希表优化
  5. 调用栈优化
  6. 为JIT编译打下基础

升级PHP7需要注意:

  1. mysql扩展被移除,改为mysqli或PDO
  2. ereg正则被移除,改为preg
  3. PHP4风格构造函数被移除,改为__construct
  4. 部分致命错误改为可捕获的Error异常
  5. 确认所有扩展都有PHP7版本

性能优化最佳实践:

  1. 使用OPcache(必备,性能提升2-3倍)
  2. 使用PHP7的新特性
  3. 代码层面优化(避免循环中重复操作、使用内置函数等)
  4. 数据库优化(预处理语句、索引、缓存等)
  5. Web服务器优化(Nginx+PHP-FPM、Gzip、缓存等)
  6. 使用性能分析工具找到瓶颈

PHP7的发布,标志着PHP进入了一个新的时代。它不仅性能更强,而且语言更加现代化和严谨。作为PHP开发者,我们应该积极拥抱PHP7,享受性能提升和新特性带来的便利,同时不断提升自己的技术水平,写出更高质量、更高性能的PHP代码。

最后,用一句话总结PHP7:"PHP7,更快、更稳、更现代。"如果你还在使用PHP5,那么是时候升级到PHP7了,你会爱上它的性能和新特性!