c# - 多语言网站性能

标签 c# asp.net-mvc performance multilingual

我目前正在一个支持多语言的网站 (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% 的情况下应该不是问题。

关于c# - 多语言网站性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27685194/

相关文章:

c# - 迭代器变量在它来自的 IEnumerable 中不存在吗?

c# - 将查询字符串添加到 REST GET

c# - 将数据从 Excel 导入到 Sql Server 2008 #2

html - 输入和按钮之间的间隙

arrays - GLSL:OpenGL 缓冲区中的结构数组与数组结构

C# Entity Framework - 初学者

c# - .NET HBase REST API 客户端库 - 从 MVC5 Controller 调用

c# - SQL Server 对象资源管理器不显示我的数据库

ios - Xcode Native UITests 在真实设备上非常慢

java - 在多个线程中使用 forEach() 或使用 forEach() 和 lambda 进行集合迭代