【问题标题】:Store text: array vs constant to best performance存储文本:数组与常量以获得最佳性能
【发布时间】:2014-04-16 08:49:20
【问题描述】:

我正在编写一个多语言网站。每个页面的文本都是从 MySQL 数据库加载的,应该分配给一个数组或常量以将其插入到 Web 内容中。

我想知道是否更好,为了节省内存和获得最佳性能,使用常量或数组来存储文本。即

foreach ($db_text_object as $t){
  $text["$t->key"] = $t->text;
}

或:

foreach ($db_text_object as $t){
  define($t->key, $t->text);
}

用作:

echo $text['mytext'];

或:

echo mytext;

任何其他关于每种方法的优点或缺点的评论将不胜感激。

谢谢。

【问题讨论】:

  • 为什么不对两者进行基准测试看看?您可以从命令行运行php,这样您就不必多次手动重新加载网站。

标签: php arrays constants


【解决方案1】:

我认为两者都不会对性能产生重大影响,尤其是因为瓶颈是每次都从数据库中获取所有数据。如果您真的对它是否有所作为感兴趣:尝试两种方式并衡量它。

完成此操作后,请使用像 gettext 这样的本机扩展程序来正确执行此操作,该扩展程序正是为此目的而制作的,它对二进制翻译文件进行内部缓存,并附带支持翻译的整个工具生态系统工作流程。

【讨论】:

  • 感谢您的建议,但 gettext 不是我当前项目的有效解决方案。最后我使用了数组。
【解决方案2】:

性能差异将太微不足道太小

我个人使用数组,因为您可以以更简单的方式访问它..

基准测试结果...

<?php


$db_text_object=[1,2,3,4,5];
$start = microtime(true);
foreach ($db_text_object as $k=>$v){
    $text[$k] = $v;
}
echo "Constant Performance: " . (microtime(true) - $start) . "\n";

$start = microtime(true);
foreach ($db_text_object as $k=>$v){
    define($k, $v);
}
echo "Array Performance: " . (microtime(true) - $start) . "\n";

OUTPUT:

Constant Performance: 1.9073486328125E-5 
Array Performance: 1.3113021850586E-5

Benchmarking Demo at CodeViper

【讨论】:

    猜你喜欢
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2013-05-07
    • 2022-01-20
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    相关资源
    最近更新 更多