写点什么

高性能PHP支持静态类型

2013 年 5 月 30 日

PHP+QB 是一个可选的 PHP 虚拟机,它声称在性能上提供了数量级的提升。而负面影响就是它需要所有的内容都必须是静态类型,同时也对数组做了一些限制。

静态 类型声明 是通过PHPDoc 语法的一个扩展添加的。方法需要使用“@engine qb”标记以便声明它们需要在PHP+QB 虚拟机中执行。然后你还必须使用常用的PHPDoc 语法标记返回值、参数以及全局变量的类型。本地变量需要通过@local 标记声明。

在PHP+QB 中,数组和常用的PHP 数组有所区别。文档中是这样说明的:

在PHP 中数组是非常复杂的数据容器。你可以用它存储任何内容。可以通过一个文本字符串或者一个数字引用元素。不同的元素实际上可以是同一个对象。一个数组甚至可以包含它自己。你能够使用PHP 数组构建非常复杂的、有用的结构。然而这种能力和扩展性并非没有成本。如果使用数百万的元素,那么性能和内存负载可能会高的让人难以忍受。

相对而言,PHP+QB 中的数组是非常简单的。我们通常将它称之为C-Array。本质上,在PHP+QB 中,一个数组仅仅是内存中的一个大对象。它的元素按照一个挨着一个的简单方式进行存储。你仅能够通过数字索引引用它们。和正常的PHP 不同的是,在PHP+QB 中插入的顺序也无所谓。在PHP+QB 中, foreach 循环中的$array[0] 无论如何都会出现在$array[1] 前面。

PHP+QB 中的数组可能是固定大小的也可以是动态扩容的。对于能够扩容的数组而言,如果其中的元素被移除,那么它并不会自动收缩,你需要调用 unset() 函数才能进行收缩。

该引擎支持完整范围的有符号和无符号整数类型,以及32 位和64 位浮点数类型。字符串由一个整数数组进行表示。尽管增加了PHP+QB 支持标记的方法依然能够访问$this 变量的属性,但是该引擎并不支持对象。

查看英文原文 High Performance PHP with Static Typing

2013 年 5 月 30 日 09:071867
用户头像

发布了 321 篇内容, 共 102.2 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

【译】【UX】一个页面可以有多个面包屑导航吗?

Yukun

用户研究 UX 面包屑导航

取舍与可测试

孙苏勇

产品 产品设计 产品开发

Redis学习笔记(字符串类型)

编程随想曲

redis

Flutter引擎源码解读-内存管理篇

稻子

flutter ios android 跨平台 dart

各大公司面试题分类整理

吕小毛

后端 面试题

写字工具更新史

Bonaparte

学习 读书笔记

一个平凡程序员的年度总结

小智

程序员 人生

MySQL中 int(11)和 int(10) 到底有没有区别?

周三不加班

MySQL 字符宽度 数据库数据类型

python 之 「奶茶名字」的词云展示

Sicolas Flamel

Python python 爬虫 python教程

从一道面试题来看计算机基础知识的重要性

周三不加班

数组 堆栈 函数栈 函数栈调用

开源商业模式促进金融业科技生态的发展

fino星君

开源 金融科技

字节流(InputStream/OutputStream)

Howe

Java 工作流

Bash 的4种运行模式

Megatron7

bash Linux DevOps Shell

理解 KL 散度的近似

Neil

人工智能 学习 Deep learning Machine Learning

从删库到跑路?

岳老三

产品 职业 产品经理 职业素养 职业道德

一次线上服务高 CPU 占用优化实践

张亚

性能优化 JVM cpu

Graylog部署文档

蚍蜉

Linux 开源 工具 日志分析

快捷考勤打卡设置

Megatron7

ios

《零基础学Java》 FAQ 之 2-Java版本那点事儿

臧萌

Java

Service Worker in Action

xgqfrms

Service Worker Web Worker

聊聊苹果账号的那些事儿

不要艾特我

iphone

maven私服搭建

kcnf

maven

利用goaccess分析nginx日志

Megatron7

nginx Linux

pip 配置路径要死记硬背?

风起帆扬了

Python Linux windows pip

Redis 6.0 新特性-多线程连环13问!

码大叔

redis 多线程 io

业务代码的救星——Java 对象转换框架 MapStruct 妙用

周三不加班

MapStruct 对象转换

Python3.6.1官方文档练习——初入江湖(一)

Sicolas Flamel

Python python3.x 入门

Kubernetes 将迎来首个 LTS 版本

倪朋飞

Kubernetes 容器 微服务

Java并发编程基础--volatile

Java收录阁

volatile 线程

css常见问题总结

靖仙

CSS css3

《零基础学Java》 FAQ 之 1-HelloWorld程序发生了ClassNotFound错误怎么解决

臧萌

Java Hello World !

高性能PHP支持静态类型-InfoQ