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