【问题标题】:Browscap.ini PHP startup delayBrowscap.ini PHP 启动延迟
【发布时间】:2015-11-04 07:59:03
【问题描述】:

我观察到在 php-cli.ini 文件中启用 browscap.ini 条目会增加 php 的启动时间

[browscap]
browscap = /etc/browscap.ini

time php -r 'echo "Hello\n";'
Hello

real    0m1.709s
user    0m1.358s
sys 0m0.348s

****VS下面****

[browscap]
;browscap = /etc/browscap.ini

time php -r 'echo "Hello\n";'
Hello

real    0m0.041s
user    0m0.029s
sys 0m0.011s

现在我知道 php 在调用 get_browser() 之类的函数时会查找 browscap.ini 文件。如果使用这样的功能,我可以理解滞后。

我认为 php 不会在每次启动时将 browscap.ini(可能很大)数据加载到内存中。但是为什么 php 启动会出现巨大的延迟呢?

也许它会尝试在每次启动或其他验证时检查 browscap.ini 文件是否存在?在 php 文档中找不到任何内容。

那么为什么 php 启动时间会有如此大的差异呢?

【问题讨论】:

    标签: php browscap


    【解决方案1】:

    PHP 在启动时加载其整个配置(包括 browscap.ini),在 CLI 中每次调用 php 时都会加载。如果你不在你的脚本中调用get_browser() 没关系,你是否给php 根本没有脚本来解释也没关系;如果配置文件这样说,无论如何都会加载browscap。启动时间差异明显的原因是典型的 browscap.ini 通常比较大。

    这是我的机器使用不同大小的 browscap 文件和简单的php -v 得到的一堆结果:

    • 无浏览器:0m0.030s
    • lite_php_browscap.ini (222 KB): 0m0.040s
    • php_browscap.ini (16,301 KB):0m0.640s
    • full_php_browscap.ini (33,714 KB):0m1.290s

    【讨论】:

    • 如果整个 browscap.ini 是在 php 启动时加载的,那么对 get_browser() 的调用应该很快 - 这不是观察到的,并且似乎表明它是因为文件解析查找。
    • 但结果似乎表明 browscap.ini 确实在 php 启动期间以某种方式工作。如果它验证文件的存在等,那么它似乎没问题,但如果它正在加载整个 browscap.ini 文件,那么这是多余的和不必要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多