我目前正在开发一个支持多语言的网站(ASP MVC),其中每个网页内容都存储在数据库中,例如我有英文版,西班牙文版本等。但是我担心这个问题。因为每次用户点击我的页面时都会进行生产,所以至少有20个数据库调用来获取内容。
我能做些什么来提高效率吗?
我无法做到的是:
在每次加载页面时将所有数据库调用合并为1次调用(这需要 太多的努力)。
为每种语言创建一个单独的html页面(我需要最终用户能够在不更改代码的情况下添加新语言,因此 数据库设计)。
我正在考虑在用户浏览器中缓存所有内容,并在每次访问我的网页时对其进行比较,如果数据库不匹配,则只会调用数据库,但我不确定如何接近此
对于糟糕的英语,任何帮助都会受到赞赏和抱歉。
答案 0 :(得分:3)
我建议在这种情况下使用静态字典,正如@ Vsevolod-Goloviznin在评论中所建议的那样。 让我详细说明我的方法
您的数据库中可能还有一个本地化资源,其中包含一些命名密钥和语言密钥:
var homePageTitle = Database.GetResource("homeTitle", "es");
您应该构建一个静态字典,将其用作缓存,并将数据库中的所有资源都存储在内存中,以便于访问:
public static MultiLanguageManager {
private static Dictionary<string, Dictionary<string, string>> ContentCache;
...
public static GetResource(string key, string language) {
return (ContentCache[language])[key];
}
}
然后在你的前端你会有这样的事情:
...
<title>@MultiLanguageManager.GetResource("aboutTitle", "en")</title>
...
每当用户更改数据库中的本地化内容时,您应该手动重建ContentCache字典:
// update localized content
...
MultiLanguageManager.RebuildContentCache();
...
通过使用此方法,您可以将数据库调用的数量减少到最少(仅检索逻辑单元,而不是静态资源),并控制本地化数据的一致性。 一个可能的缺点可能是您将构建的静态字典的大小,但是使用今天丰富的资源,这在99%的情况下都不应该成为问题。