Php 优化函数以支持多种语言

Php 优化函数以支持多种语言,php,sql,optimization,Php,Sql,Optimization,我已经为我的一个项目创建了自己的多语言支持。我有3个不同的数据库表:languages、languages\u variables和languages\u words(如下所示) 当我想将特定字符串提取到网站时,我将使用一个名为language()(如下所示)的函数$user获取有关登录用户的信息,例如用户选择的语言 使用该函数,我可以简单地调用语言中的变量变量和语言('menu\u about')(menu\u about只是一个变量的示例) 问题是网站加载language()中所有内容的速度

我已经为我的一个项目创建了自己的多语言支持。我有3个不同的数据库表:
languages
languages\u variables
languages\u words
(如下所示)

当我想将特定字符串提取到网站时,我将使用一个名为
language()
(如下所示)的函数<下面代码中的code>$user获取有关登录用户的信息,例如用户选择的语言

使用该函数,我可以简单地调用
语言中的变量
变量
语言('menu\u about')
menu\u about
只是一个变量的示例)

问题是网站加载
language()
中所有内容的速度非常慢。特别是当我将从数据库中列出许多项时(例如,使用循环的示例)。装载速度从2秒以下变为10秒以下

有没有其他更好更快的方法来获取所选语言字符串

更新我已将加载速度从7-8秒降低到3-4秒。但还是太慢了

function language($variable) {

    # DATABAS (hämta)
    $language = sql("SELECT lv.data_name AS name_variable,
                            lw.data_name AS name_word

                     FROM languages AS l
                     JOIN languages_variables AS lv
                     JOIN languages_words AS lw

                     ON lv.id = lw.id_variable
                     WHERE lv.data_name = :variable
                     AND l.id = :idlanguage
                    ", Array('variable' => $variable,
                             'idlanguage' => ($user['id_language'] == 0 ? '1' : (int)$user['id_language'])), 'fetch');


    return $language['name_word'];

}

我正在考虑使用文件(sv.php、en.php等)代替数据库。但是用户无法从浏览器中翻译网站(如果我不牺牲几个小时的血汗和眼泪)。

首先用Xhprof分析构建以验证PHP性能。对于SQL调用,Google Chrome有一个内置的web检查器,可以让您知道每个组件需要多长时间(Firefox的Firebug)


如果您发布日志,它将大大有助于建议相关的改进领域

首先用Xhprof分析构建以验证PHP性能。对于SQL调用,Google Chrome有一个内置的web检查器,可以让您知道每个组件需要多长时间(Firefox的Firebug)


如果您发布日志,它将大大有助于建议相关的改进领域

谢谢,但我知道问题出在哪里,因为我已经测试过删除函数
language()
中的所有内容,并且只保留
return$variable。在那之后,网站的速度要快得多。无论如何我按照你的建议做了(在谷歌浏览器中查看inspector),我只能找到比你所说的更合适的网络和资源。有一个常用的插件基于:抱歉,回答太慢了。我在哪里可以找到这些日志?你给我的链接只允许我测试我的网站-不保存一些日志。你提到过网络检查员吗?哪里可以找到测试SQL调用和保存日志的方法?谢谢,但我知道问题出在哪里,因为我已经测试过删除函数
language()
中的所有内容,并且只保留
return$variable。在那之后,网站的速度要快得多。无论如何我按照你的建议做了(在谷歌浏览器中查看inspector),我只能找到比你所说的更合适的网络和资源。有一个常用的插件基于:抱歉,回答太慢了。我在哪里可以找到这些日志?你给我的链接只允许我测试我的网站-不保存一些日志。你提到过网络检查员吗?在哪里可以找到测试SQL调用和保存日志的方法?
function language($variable) {

    global $user;


    # DATABAS (kontrollera)
    $check_language = sql("SELECT COUNT(lv.data_name)

                           FROM languages AS l
                           JOIN languages_variables AS lv

                           JOIN languages_words AS lw
                           ON l.id = lw.id_language

                           WHERE lv.data_name = :variable
                           AND lw.id_language = :idlanguage
                          ", Array('idlanguage' => ($user['id_language'] == 0 ? '1' : (int)$user['id_language']),
                                   'variable' => $variable), 'count');

    # DATABAS (räkna)
    $count_words = sql("SELECT COUNT(lw.id)
                        FROM languages_words AS lw
                        JOIN languages_variables AS lv
                        ON lw.id_variable = lv.id
                        WHERE lw.id_language = :idlanguage
                        AND lv.data_name = :variable
                       ", Array('idlanguage' => ($user['id_language'] == 0 ? '1' : (int)$user['id_language']),
                                'variable' => $variable), 'count');



    # KONTROLL
    if($check_language == 0 OR $count_words == 0) {

        return $variable;


    # KONTROLL
    } else {

        # DATABAS (hämta)
        $get_languages = sql("SELECT *,
                                     lv.data_name AS name_variable,
                                     lw.data_name AS name_translation

                              FROM languages AS l
                              JOIN languages_variables AS lv

                              JOIN languages_words AS lw
                              ON lv.id = lw.id_variable

                              WHERE lv.data_name = :variable
                              AND lw.id_language = :idlanguage
                             ", Array('variable' => $variable,
                                      'idlanguage' => ($user['id_language'] == 0 ? '1' : (int)$user['id_language'])));


        # LOOP
        foreach($get_languages AS $language) {

            # KONTROLL
            if($language['name_variable'] == $variable) {
                return $language['name_translation'];

            # KONTROLL
            } else {
                return $variable;
            }

        }

    }

}
function language($variable) {

    # DATABAS (hämta)
    $language = sql("SELECT lv.data_name AS name_variable,
                            lw.data_name AS name_word

                     FROM languages AS l
                     JOIN languages_variables AS lv
                     JOIN languages_words AS lw

                     ON lv.id = lw.id_variable
                     WHERE lv.data_name = :variable
                     AND l.id = :idlanguage
                    ", Array('variable' => $variable,
                             'idlanguage' => ($user['id_language'] == 0 ? '1' : (int)$user['id_language'])), 'fetch');


    return $language['name_word'];

}