Opened 18 months ago

Closed 18 months ago

Last modified 16 months ago

#302 closed defect (wontfix)

页面载入初始化优化的建议

Reported by: jonwang Owned by: moo
Priority: major Milestone: black hole
Component: cacher Version: 3.0.0
Keywords: Cc:
Application: PHP Version:
Other Exts: SAPI: Irrelevant
Probability: Blocked By:
Blocking:

Description

我是多年php的开发者,在开发中经常会遇到一个很烦人的问题就是页面在每次请求的时候都会从第一个代码去初始化,然后程序引入框架,读取配置,再快的php框架也敌不过原生php的速度,而现在这年头写php不管是用开源的还是私有的框架,总得加载很多内容,php就在这些做着重复的事情。而现在绝大部分网站都是一个入口文件

既然这样,xcache能否做到这样的功能?
提供一个方法可以在php的入口index.php的第一行声明启用初始化加速,然后程序在某个地方声明初始化节点完毕。然后xcache会将此时php的内存copy出留作备用,等下一个进程进入时直接把这个内存复制给程序,并且从声明结束处开始下后执行,跳过之前所有代码。
由于是内存的直接复制所以会非常快,这样一个程序就不用反复初始化那些一样的东西了。

不知道明白了么?举个例子:
比如一个我要发100个请帖,如果一个个的写那肯定很慢,那么我写好一个请帖,把被邀请人留空,然后把它扫瞄到电脑上,然后要100个就打印100个,然后把不同的地方填上即可
我的想法就是xcache提供一个声明,将初始化的进程内存缓存下来,然后后面的进程就可以直接复制内存后直接跳过所有的步骤。

如果这个实现了那就牛叉了,我们可以把要include的所有的文件、需要数据库读取的配置等等不变东西的都放在声明里,那样再也不会有人嫌弃框架没有原生的php快了。只要一个初始化加速几乎可以颠覆整个php优化了,那样php就像是一个常驻内存的‘短进程’了

Change History (2)

comment:1 Changed 18 months ago by moo

  • Resolution set to wontfix
  • Status changed from new to closed

思路不错, 可惜没发现有好的办法来实现这个模式, 而且这个是不透明的, 意味着 *.php 代码需要修改
如果你用 php-cli 可以在 *.php 里实现 fcgi server, 代码就类似于下面的

<?php
require "FCGI.php";
require "framework-files.php";

for (...) fork() ... // 预备足够的 worker

while (FCGI_Accept()) {
 ....
}

如果觉得 一般人写的 php 代码清理不干净, 可以在处理几次之后 退出 while 结束当前 worker 进程, 前提是 parent (manager) 能自动 fork 新的 worker 补回来

comment:2 Changed 16 months ago by moo

  • Milestone changed from undecided to black hole
Note: See TracTickets for help on using tickets.