如何提高网站的速度(MongoDB和MVC.net C#)

时间:2014-08-28 10:14:40

标签: c# asp.net-mvc mongodb asp.net-mvc-4

我试图提高使用MVC.net 4(C#)和MongoDB(官方csharp驱动程序)构建的网站的加载速度。

网站主要是在浏览器中打印的静态内容,数据来自mongodb数据库,但这个内容根据域名完全不同,处理多个域名的网站也是如此。

我想问题就是我只是为一个页面提供的所有查询:

  1. 首先根据域名网址,我从数据库获取域信息:

    context.Domains.FindOne(Query.EQ("DomainName", domainUrl))
    
  2. 每个域都有品牌关联。我需要获得该域名的品牌才能呈现不同的模板。

    context.Brands.FindOneById(new ObjectId(domain.brandId));
    
  3. 获得域名信息和品牌后,我会获得与该域名相关联的所有节点。在域的BsonDocument中,我有一个链接节点的ObjectIds数组。所以我执行此查询以获取链接的每个节点的信息:

    context.Nodes.Find(Query.In("_id", new BsonArray(domain.nodeIds)));
    
  4. 之后我必须根据每个节点的标签生成两个列表。想象一下,每个节点都有"标签1和#34; (字符串数组)和"标记2" (和以前一样)。因此,我必须遍历上一个查询中获得的所有节点,并获取所有不同的标记。我是用这种方法做的:

    private List<Tuple<string, string>> GetCategories(IEnumerable<Node> nodes) {
        var categories = new List<Tuple<string, string>>();
        var allCategories = (from node in nodes where node.Tags1 != null from tag in node.Tags1 select tag.Trim().ToLower()).Distinct().ToList();
        foreach (var category in allCategories) {
            categories.Add(new Tuple<string, string>(MakeUrlFriendly(category), category )); 
        }
        return categories.OrderBy(a => a.Item2).ToList();
    }
    
  5. 使用该功能,我获得了填充第一个菜单的类别,但我必须再次调用它来生成第二个菜单的类别。是相同的但是阅读Tags2而不是Tags1。

  6. 因此,对于我对服务器所做的每个请求(每个我正在渲染的页面)都会重复这5个步骤,而这个示例仅用于索引页面,我在域对象中有内容已经,但如果我必须渲染其中一个节点,我必须执行相同的步骤加一个以获取该特定节点的信息。

    必须有一种方法可以将其存储在服务器中,并避免每次用户更改页面时执行相同的步骤来填充菜单......但我不知道如何操作。我也不是MongoDB的专家(我刚刚开始使用它)所以如果你能给我一些建议来改进所有这些查询或合并其中的一些,我会很感激。

    谢谢!

0 个答案:

没有答案