|
|
1
9
据我所知,如果不序列化,就不可能在PHP中缓存对象。但是,一般来说,缓存机制(APC、Memcache等)实际上是在尝试删除数据库连接,而不是提高性能(从而降低总体数据库压力)。这是
肯定
memcache等如何在Drupal中使用。换句话说,缓存机制应该允许您进行扩展,尽管它们可能不会特别提高性能。
|
|
|
2
6
调查 Igbinary PHP扩展。它是序列化和非序列化的替代品,可能适合您的需要。 它以二进制格式存储对象,而不是字符串,这减少了内存使用,也减少了序列化和取消序列化对象的时间。 尽管这需要经过对象的非序列化过程,但二进制格式可能会提高性能,使此过程在应用程序中使用更为合理。 |
|
|
3
3
也许解决办法是不要建造一个单一的、巨大的、昂贵的物体。 考虑到PHP应用程序在每次加载页面时几乎都是从一张白纸开始的,因此依赖于单个巨型对象的解决方案不适合这种语言。因为你没有详细说明你的目标是什么&它的作用是什么,我不能确定,但我怀疑您并不真的需要该对象在每次页面加载时所做的一切。如果是这样的话,你可能会认真考虑把它分解成一些更小、更简单的类,你可以根据需要实例化。 |
|
|
5
1
不,不可能以非序列化形式存储PHP对象;至少,使用以下缓存解决方案是不行的 (我试过这些;不知道可能存在的另一个) :
大的 ? 你有没有办法缩小它的尺寸?
例如,你在这个对象中有一大堆HTML代码吗?如果是,它是否可以存储在另一个缓存条目中?
或者,从头开始创建它不需要太多时间?在这种情况下,缓存真的有必要吗? |
|
|
6
1
如果可能的话,在您的平台上编写一个简单的守护进程,在启动时加载您的树,然后通过套接字应答请求。您的服务器进程可以分叉并回答查询,而无需重新创建树。 编写守护进程不是一件小事,但有很好的文档记录(至少对于C)。使用pcntl和posix扩展将其转换为PHP应该没有问题。 |
|
|
7
1
虽然PHP可以为各种数据类型提供许多动态特性,但这些操作并不神奇,数据仍然作为基本的本机数据类型存储在zval中,从技术上讲,zval是本机zend api中的一个复杂哈希表。与任何语言中的任何其他数据类型一样,每个zval将只存在有限的一段时间。对于PHP,这段时间是(最多)处理HTTP请求的时间。在任何情况下,要使此数据比单个请求持续时间更长,必须将其从原始zval转换为其他形式的,然后以某种方式存储(这包括复杂类型,如PHP对象以及基本类型,如INT)。这总是需要重新初始化每个zval,然后将存储表单中的数据转换回zval中的各种PHP数据类型。某些存储格式(如BSON)将比PHP序列化字符串快,但(至少到目前为止)这不会带来太多明显的性能提升,因为它远没有达到跨多个请求维护原始zval的性能。您仍然需要以某种方式序列化这些数据,经历存储数据、获取数据和取消序列化的过程。目前还没有真正的解决办法。
|
|
|
8
0
在这种情况下,更好的选择是编写自己的服务器。 这在php中很容易实现——您已经有了代码——但在编写服务器时,php可能不是大多数人的首选。
|
|
|
9
0
您可以将应用程序重写为 ReactPHP 是什么在一个长期运行的PHP进程(就像Node.js或Web.py)中创建了Web服务器。然后,您可以一次性(在服务器启动时)将大对象构建为全局变量,并从请求事件处理程序访问它。 |
|
|
GG33 · 在docker中缓存npm包 1 年前 |