多语言网站性能
本文关键字:性能 网站 语言 | 更新日期: 2023-09-27 18:35:36
我目前正在开发一个支持多语言的网站(ASP MVC),其中每个Web内容都存储在数据库中,例如我有英语版本,西班牙语版本等。但是我担心它进入生产环境时的性能,因为每次用户点击我的页面时,至少有 20 次数据库调用来获取内容。
我能做些什么来提高效率吗?
我不能做的是:
- 在
每次页面加载时将所有数据库调用合并为 1 个调用(这需要太费力了)。
为每种语言制作一个单独的 html 页面(我需要最终用户能够在不更改代码的情况下添加新语言,因此数据库设计)。
我正在考虑在用户的浏览器中缓存所有内容,并在每次他们访问我的页面时进行比较,并且只有在不匹配时才会调用数据库,但我不确定如何处理这个问题。
任何帮助将不胜感激,并对英语不好感到抱歉。
在这种情况下,
我建议使用静态字典,正如@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% 的情况下应该不是问题。