用于存储翻译短语的XML或PHP文件?

时间:2016-03-28 19:17:43

标签: php xml performance

我有大约1000个翻译短语。最好将它们存储在XML文件中,并在每个页面的顶部使用PHP读取它们,或者将它们存储在PHP文件中,该文件包含在每个页面中?什么是最好的,特别是对于表现?

备选方案1(XML文件):

<?xml version="1.0" encoding="UTF-8"?>
<language name="en">
    <page name="header">
        <phrase name="header_home">Home</phrase>
        <phrase name="header_blogs">Blogs</phrase>
        <phrase name="header_readmore">Read More</phrase>
        ...
    </page>
    ...
</language>

备选方案2(PHP文件):

<?php
$header_home = "Home";
$header_blogs = "Blogs";
$header_readmore = "Read More";
...
?>

使用以下代码加载XML文件:

<?php
class Phrases{

    //load phrases to PHP:
    public function load_phrases($lang_id) {
        $xml = new DomDocument('1.0');

        //path to language directory
        $lang_path=("phrases/".$lang_id.'.xml');
        $xml->load($lang_path);

        //phrases are inside page tags, first we must get these
        $page = $xml->getElementsByTagName('page');
        $page_num=$page->length;

        for($i = 0; $i < $page_num; $i++) {
            $page=$xml->getElementsByTagName('page')->item($i);

            //get phrase tags and store them into array
            foreach($page->getElementsByTagName('phrase') as $phrase) {
                $phrase_name = $phrase->getAttribute('name');
                $phrases[$phrase_name] = $phrase->firstChild->nodeValue;
                $phrases[$phrase_name] = str_replace('\n','<br/>',$phrases[$phrase_name]);
            }
        }

        $this->phrases=$phrases;
    }

    //phrases are accessed
    public function lang_id() {
        //determine page language
        $lang = 'en';
        switch(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)){
            case 'sv':
                $lang = 'sv';
                break;
            case 'fr':
                $lang = 'fr';
                break;
            case 'it':
                $lang = 'it';
                break;
            case 'no':
                $lang = 'no';
                break;
            default:
                $lang = 'en';
        }

        $lang_id = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : $lang;

        //set the language cookie and update cookie expiration date
        if(!isset($_COOKIE['lang'])) {
          $expiration_date=time()+3600*24*7;
          setcookie('lang',$lang_id,$expiration_date,'/');
        }
        if(!isset($lang_id) || $lang_id == NULL) $lang_id = 'en';
        return $lang_id;
    }

    public function change_lang($lang_id) {
         setcookie('lang',$lang_id,$expiration_date,'/');  
    }

    //construct function
    public function __construct() {
      $this->load_phrases($this->lang_id());
    }

}
?>

PHP文件加载了普通的PHP include。

1 个答案:

答案 0 :(得分:2)

为了提高性能,PHP包含文件并不需要任何额外的外部步骤,因此与打开外部XML文件,读取和解析数据以及分配变量相比,这显然会成为性能的赢家。 / p>

但是,您可能希望检查性能增益是否在您的方案中很重要,因为现代操作系统会将小文件完全缓存在内存中,并且一千个项目不应该对总运行时间添加太多。

我建议如果您可以从Web服务器访问MySQL数据库实例,您可以考虑将它们存储在数据库中 - 性能应该大致介于XML和PHP之间,但是以这种方式使用数据库是一个很大的问题。为此目的更好的模式。