serafim/packed-array

内存消耗减少的 typed 数组

dev-master / 1.x-dev 2023-04-03 02:46 UTC

This package is auto-updated.

Last update: 2024-09-03 05:40:59 UTC


README

PHP 8.1+ Latest Stable Version Latest Unstable Version Total Downloads License MIT

介绍

PHP packed (typed) 数组是类似于数组的对象,提供了一种机制,可以在内存缓冲区中以减少内存消耗的方式读取和写入原始二进制数据,适用于大量数据。

常见的 PHP 数组会动态增长和缩小,可以包含任何值。PHP Zend VM 进行优化,使这些数组运行得很快。然而,在某些情况下,标准功能不足以满足需求,标准 PHP 数组可能需要占用非常大量的数据,例如,在处理音频、图像和视频时。这就是 typed 数组发挥作用的地方。PHP typed 数组的每个条目都是原始二进制值,这些值可以是多种支持格式的其中之一,从 8 位整数到 64 位浮点数。

例如,一个大小为 44.968Kb 的图像,当加载到 typed 数组中时,将占用 45.168Kb 的内存。然而,如果将其解包到原生 PHP 数组中,那么这种图像在内存中的大小将占用 5,633.360Kb。这比原来多出 120 倍以上!

以下是消耗的 RAM 大小与数组大小(元素数量)的图表。

/resources/memory-usage.png

有关如何计算此 RAM 消耗的详细信息,请参阅 bin/memory-usage.php

读写

请注意,此类数组旨在存储大量数据,但在读写操作中,它们的速度明显慢于内置的 PHP 数组。

读取

写入

安装

此库作为 Composer 仓库提供,您可以使用以下命令在项目根目录下进行安装

$ composer require serafim/packed-array

快速入门

待办事项