多语言网站性能

时间:2014-12-29 07:42:56

标签: c# asp.net-mvc performance multilingual

我目前正在开发一个支持多语言的网站(ASP MVC),其中每个网页内容都存储在数据库中,例如我有英文版,西班牙文版本等。但是我担心这个问题。因为每次用户点击我的页面时都会进行生产,所以至少有20个数据库调用来获取内容。

我能做些什么来提高效率吗?

我无法做到的是:

  • 在每次加载页面时将所有数据库调用合并为1次调用(这需要 太多的努力)。

  • 为每种语言创建一个单独的html页面(我需要最终用户能够在不更改代码的情况下添加新语言,因此 数据库设计)。

我正在考虑在用户浏览器中缓存所有内容,并在每次访问我的网页时对其进行比较,如果数据库不匹配,则只会调用数据库,但我不确定如何接近此

对于糟糕的英语,任何帮助都会受到赞赏和抱歉。

1 个答案:

答案 0 :(得分:3)

我建议在这种情况下使用静态字典,正如@ Vsevolod-Goloviznin在评论中所建议的那样。 让我详细说明我的方法

  1. 您的数据库中可能还有一个本地化资源,其中包含一些命名密钥和语言密钥:

    var homePageTitle = Database.GetResource("homeTitle", "es");
    
  2. 您应该构建一个静态字典,将其用作缓存,并将数据库中的所有资源都存储在内存中,以便于访问:

    public static MultiLanguageManager {
        private static Dictionary<string, Dictionary<string, string>> ContentCache;
    
        ...
        public static GetResource(string key, string language) {
            return (ContentCache[language])[key];
        }
    }
    
  3. 然后在你的前端你会有这样的事情:

    ...
    <title>@MultiLanguageManager.GetResource("aboutTitle", "en")</title>
    ...        
    
  4. 每当用户更改数据库中的本地化内容时,您应该手动重建ContentCache字典:

    // update localized content
    ...
    MultiLanguageManager.RebuildContentCache();
    ...
    
  5. 通过使用此方法,您可以将数据库调用的数量减少到最少(仅检索逻辑单元,而不是静态资源),并控制本地化数据的一致性。 一个可能的缺点可能是您将构建的静态字典的大小,但是使用今天丰富的资源,这在99%的情况下都不应该成为问题。