Created
November 18, 2019 09:18
-
-
Save Attackmonkey/9737587106638904450ea836ef1d82cc to your computer and use it in GitHub Desktop.
Testing Different Methods of Querying Content in Umbraco
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Diagnostics; | |
using System.Linq; | |
using System.Web; | |
using System.Web.Mvc; | |
using Umbraco.Web.Mvc; | |
using Umbraco.Web; | |
using Examine; | |
using UmbracoExamine; | |
namespace WebApp.Controllers | |
{ | |
public class BenchmarkController : SurfaceController | |
{ | |
#region all posts | |
public ActionResult AllByBadLinq(bool loop = false) | |
{ | |
var result = GetTime(() => GetByBadLinq(loop)); | |
return Content(result); | |
} | |
private void GetByBadLinq(bool loop = false) | |
{ | |
var test = Umbraco.TypedContentAtRoot().First().Descendants().Where(a => a.DocumentTypeAlias == "blogPost"); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult AllChildrenFromNode(bool loop = false) | |
{ | |
var result = GetTime(() => GetAllChildren(loop)); | |
return Content(result); | |
} | |
private void GetAllChildren(bool loop = false) | |
{ | |
var test = Umbraco.TypedContent(1085).Children(); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult AllDescendantsFromRoot(bool loop = false) | |
{ | |
var result = GetTime(() => GetAllDescendants(loop)); | |
return Content(result); | |
} | |
private void GetAllDescendants(bool loop = false) | |
{ | |
var test = Umbraco.TypedContentAtRoot().DescendantsOrSelf("BlogPost"); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult AllByXpathGreedy(bool loop = false) | |
{ | |
var result = GetTime(() => GetAllXPathGreedy(loop)); | |
return Content(result); | |
} | |
private void GetAllXPathGreedy(bool loop = false) | |
{ | |
var test = Umbraco.TypedContentAtXPath("//BlogPost [@isDoc]"); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult AllByXpathEfficient(bool loop = false) | |
{ | |
var result = GetTime(() => GetAllXPathEfficient(loop)); | |
return Content(result); | |
} | |
private void GetAllXPathEfficient(bool loop = false) | |
{ | |
var test = Umbraco.TypedContentAtXPath("root/Home [@isDoc]/BlogPostRepository [@isDoc]/BlogPost [@isDoc]"); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult AllByTypedExamine(bool loop = false) | |
{ | |
var result = GetTime(() => GetTypedExamine(loop)); | |
return Content(result); | |
} | |
private void GetTypedExamine(bool loop = false) | |
{ | |
var criteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content); | |
var query = criteria.Field("nodeTypeAlias", "blogPost"); | |
var test = Umbraco.TypedSearch(query.Compile()); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult AllByPureExamine(bool loop = false) | |
{ | |
var result = GetTime(() => GetPureExamine(loop)); | |
return Content(result); | |
} | |
private void GetPureExamine(bool loop =false) | |
{ | |
var searchCriteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content); | |
var query = searchCriteria.Field("nodeTypeAlias", "blogPost"); | |
var test = ExamineManager.Instance.DefaultSearchProvider.Search(query.Compile()); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult AllByContentService(bool loop = false) | |
{ | |
var result = GetTime(() => GetByContentService(loop)); | |
return Content(result); | |
} | |
private void GetByContentService(bool loop = false) | |
{ | |
var test = Services.ContentService.GetContentOfContentType(1068); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
#endregion | |
#region latest ten posts | |
public ActionResult GetLatestBadLinq(bool loop = false) | |
{ | |
var result = GetTime(() => LatestBadLinq(loop)); | |
return Content(result); | |
} | |
private void LatestBadLinq(bool loop = false) | |
{ | |
var latest = Umbraco.TypedContentAtRoot().First().Descendants().Where(a => a.DocumentTypeAlias == "blogPost").OrderByDescending(a => a.CreateDate).Take(10); | |
if (loop == true) | |
{ | |
foreach (var item in latest) | |
{ | |
} | |
} | |
} | |
public ActionResult GetLatestChildrenFromNode(bool loop = false) | |
{ | |
var result = GetTime(() => LatestChildrenFromNode(loop)); | |
return Content(result); | |
} | |
private void LatestChildrenFromNode(bool loop = false) | |
{ | |
var latest = Umbraco.TypedContent(1085).Children().OrderByDescending(a => a.CreateDate).Take(10); | |
if (loop == true) | |
{ | |
foreach (var item in latest) | |
{ | |
} | |
} | |
} | |
public ActionResult LatestDescendantsFromRoot(bool loop = false) | |
{ | |
var result = GetTime(() => GetLatestDescendants(loop)); | |
return Content(result); | |
} | |
private void GetLatestDescendants(bool loop = false) | |
{ | |
var test = Umbraco.TypedContentAtRoot().DescendantsOrSelf("BlogPost").OrderByDescending(a => a.CreateDate).Take(10); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult LatestByXpathGreedy(bool loop = false) | |
{ | |
var result = GetTime(() => GetLatestXPathGreedy(loop)); | |
return Content(result); | |
} | |
private void GetLatestXPathGreedy(bool loop = false) | |
{ | |
var test = Umbraco.TypedContentAtXPath("//BlogPost [@isDoc]").OrderByDescending(a => a.CreateDate).Take(10); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult LatestByXpathEfficient(bool loop = false) | |
{ | |
var result = GetTime(() => GetLatestXPathEfficient(loop)); | |
return Content(result); | |
} | |
private void GetLatestXPathEfficient(bool loop = false) | |
{ | |
var test = Umbraco.TypedContentAtXPath("root/Home [@isDoc]/BlogPostRepository [@isDoc]/BlogPost [@isDoc]").OrderByDescending(a => a.CreateDate); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult LatestByTypedExamine(bool loop = false) | |
{ | |
var result = GetTime(() => GetTypedExamine(loop)); | |
return Content(result); | |
} | |
private void LatestTypedExamine(bool loop = false) | |
{ | |
var criteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content); | |
var query = criteria.Field("nodeTypeAlias", "blogPost").And().OrderByDescending("createDate"); | |
var test = Umbraco.TypedSearch(query.Compile()).Take(10); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult LatestByPureExamine(bool loop = false) | |
{ | |
var result = GetTime(() => GetLatestPureExamine(loop)); | |
return Content(result); | |
} | |
private void GetLatestPureExamine(bool loop = false) | |
{ | |
var searchCriteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content); | |
var query = searchCriteria.Field("nodeTypeAlias", "blogPost").And().OrderByDescending("createDate"); | |
var test = ExamineManager.Instance.DefaultSearchProvider.Search(query.Compile()).Take(10); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
#endregion | |
#region searches | |
public ActionResult SearchWithLinq(bool loop = false) | |
{ | |
var result = GetTime(() => GetSearchLinq(loop)); | |
return Content(result); | |
} | |
private void GetSearchLinq(bool loop = false) | |
{ | |
var test = Umbraco.TypedContentAtRoot().DescendantsOrSelf("BlogPost").Where(a => a.Name.Contains("testing")).OrderByDescending(a => a.CreateDate).Take(10); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult SearchWitXslt(bool loop = false) | |
{ | |
var result = GetTime(() => GetSearchXslt(loop)); | |
return Content(result); | |
} | |
private void GetSearchXslt(bool loop = false) | |
{ | |
var test = Umbraco.TypedContentAtXPath("root/Home/BlogPostRepository/BlogPost [@isDoc and contains(@nodeName, 'testing')]").OrderByDescending(a => a.CreateDate).Take(10); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult SearchWithTypedExamine(bool loop = false) | |
{ | |
var result = GetTime(() => GetSearchTypedExamine(loop)); | |
return Content(result); | |
} | |
private void GetSearchTypedExamine(bool loop = false) | |
{ | |
var criteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content); | |
var query = criteria.Field("nodeTypeAlias", "blogPost").And().Field("nodeName", "testing").And().OrderByDescending("createDate"); | |
var test = Umbraco.TypedSearch(query.Compile()).Take(10); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult SearchWithPureExamine(bool loop = false) | |
{ | |
var result = GetTime(() => GetSearchPureExamine(loop)); | |
return Content(result); | |
} | |
private void GetSearchPureExamine(bool loop = false) | |
{ | |
var searchCriteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content); | |
var query = searchCriteria.Field("nodeTypeAlias", "blogPost").And().Field("nodeName", "testing").And().OrderByDescending("createDate"); | |
var test = ExamineManager.Instance.DefaultSearchProvider.Search(query.Compile()).Take(10); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
} | |
} | |
} | |
public ActionResult SearchWithPureExamineGetContent(bool loop = false) | |
{ | |
var result = GetTime(() => GetSeacrchPureExamineGetContent(loop)); | |
return Content(result); | |
} | |
private void GetSeacrchPureExamineGetContent(bool loop = false) | |
{ | |
var searchCriteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria(IndexTypes.Content); | |
var query = searchCriteria.Field("nodeTypeAlias", "blogPost").And().Field("nodeName", "testing").And().OrderByDescending("createDate"); | |
var test = ExamineManager.Instance.DefaultSearchProvider.Search(query.Compile()).Take(10); | |
if (loop == true) | |
{ | |
foreach (var item in test) | |
{ | |
var content = Umbraco.TypedContent(item.Id); | |
} | |
} | |
} | |
#endregion | |
private string GetTime(Action action) | |
{ | |
var stopwatch = new Stopwatch(); | |
stopwatch.Start(); | |
action(); | |
return stopwatch.Elapsed.TotalMilliseconds.ToString(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment