多语言网站性能

本文关键字:性能 网站 语言 | 更新日期: 2023-09-27 18:35:36

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

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

我不能做的是:

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

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

我正在考虑在用户的浏览器中缓存所有内容,并在每次他们访问我的页面时进行比较,并且只有在不匹配时才会调用数据库,但我不确定如何处理这个问题。

任何帮助将不胜感激,并对英语不好感到抱歉。

多语言网站性能

在这种情况下,

我建议使用静态字典,正如@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();
    ...
    

通过使用此方法,您可以将数据库调用次数减少到最低限度(仅检索逻辑单元,而不检索静态资源),并控制本地化数据的一致性。一个可能的缺点可能是您将构建的静态字典的大小,但鉴于当今资源丰富,这在 99% 的情况下应该不是问题。