我有 1000 行 php 会话文件,必须一一显示给用户,我想避免或减少数据轮换。哪个是最好的方法?
2 回答
我不会使用会话变量来存储产品数据和避免数据。如果你想减轻重量,你可以在你的 html 文件中使用 css,你可以使用更短的函数和变量名。通常,产品数据存储在(mysql)数据库中。当您想避免使用特殊数据库时,还有适用于普通文件的 sqlite。您也可以在浏览器中压缩您的产品数据并解压缩,但现代服务器和浏览器已经支持压缩,因此只有在产品数据没有得到很好的压缩或者您使用共享的虚拟主机和/或您的管理员没有的情况下,这才有意义不想启用压缩。
通常,您只在会话数据中保留特定于用户的信息。例如,用户放入购物车的商品可以去那里。
如果您想在检索目录时减少数据库服务器的负载,那么您需要进行某种缓存。有很多选择,但最常见的是:
- 内存缓存。这在您的 Web 服务器(或者可能在附近的服务器)上作为另一个进程运行。
- 装甲运兵车。这是我个人最喜欢的简单部署。它是 PHP 的一个附加组件,但是一旦安装它,您就不必管理或观察任何额外的服务器进程。
- 文件系统。这很容易实现,并且不需要任何新软件或附加组件或流程。您所需要的只是一个可由 Web 服务器写入的目录。
基本思想是:获取目录数据的函数将:
Retrieve the catalog from the cache.
If the catalog is not in cache
Get the data from the database
Create the catalog object/array
Save the catalog to the cache
Return the catalog
使用 memcached 和 APC,数据会自动为您序列化,您可以声明希望数据缓存多长时间。一旦时间用完,数据将从缓存中消失。这样,您可以确保以合理的时间间隔从数据库中刷新您的目录。
如果您使用的是文件系统,则必须为自己做更多的工作。您必须检查缓存文件的年龄(以查看是否该刷新数据),并且您必须调用serialize()
并将unserialize()
数据对象转换为可保存的字节流并再次返回。
当您呈现 HTML 页面时,您只需将信息放入用户将看到的信息中。通常不需要一次性将整个目录发送给用户。
如果目录很大,那么您可能会考虑将目录中的各个项目缓存在单独的缓存条目中,而不是将整个内容放入缓存中。你真的必须判断“太大”有多大。通常,网络 I/O 是 Web 服务器和数据库的大延迟问题,因此您可以从磁盘读取数量惊人的数据而不会出现任何性能下降(在您注意到任何东西之前超过一百 KB)。