SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
The KILROY case – Umbraco DK Festival




                             Building KILROY




                    Umbraco DK Festival 2012 - Aarhus
                                        Friday 13th April

                                                            1
The KILROY case – Umbraco DK Festival


                                        Agenda


   About Us
   Brief Project Overview
   3 Themes
       1. Using Umbraco – Managing 10.000 destination pages
       2. Performance – A Leaky Abstraction & Lessons Learned
       3. The Toolbox – From Team Development to Deployment
   Final Questions


                                                                2
The KILROY case – Umbraco DK Festival


                                                        Please interrupt




     We don’t mind getting derailed



http://www.flickr.com/photos/gorillaradio/2474695970/                      3
The KILROY case – Umbraco DK Festival


                                        About Us

  Emil Rasmussen
  Project Manager
       @emilr



  Fabrice Loudet
  Senior .NET developer




                                                   4
The KILROY case – Umbraco DK Festival


                                 About Novicell

   Based in Aarhus
   38 employees
   Full service web development agency
   Proud Umbraco Gold Partner




                                                  5
The KILROY case – Umbraco DK Festival


                                   Project Brief

   New platform for KILROYs online marketing activities
   Migrate content and URLs
   Launched July 2011
   Peaked at a 5 man development team
   Still in active development - 1 week release schedule
   Umbraco 4.7.1.1 (patched)




                                                            6
The KILROY case – Umbraco DK Festival


                                By the Numbers

   7 languages (soon to be 8)
   21 sites
   30 content editors
   94 master pages (templates)
   100 razor macros
   830 dictionary items
   5000 images
   26000 pages
   33000 active nodes
   700.000 monthly visitors
   2.800.000 monthly page views
                                                 14
The KILROY case – Umbraco DK Festival




       Theme 1: Using Umbraco




                                        15
The KILROY case – Umbraco DK Festival


                       10,000 destination pages




  Problem: create and maintain 10.000 destination pages.

  Solution: common destination structure with automatic
  creation of sub pages. And onPublish event update of JSON
  data files.


                                                              16
The KILROY case – Umbraco DK Festival


                                        Discussion



   What do you do when you need to create a database
    of stuff (e.g. staff list, product videos, events, etc.)?




                                                                21
The KILROY case – Umbraco DK Festival




       Theme 2: Performance




                                        22
The KILROY case – Umbraco DK Festival


               The Umbraco Macro Cache - #h5is




      Your are in big trouble, when you entire performance
      strategy is the Umbraco Macro Cache…




                                                             23
http://tourismeautrement.files.wordpress.com/2010/04/slow.jpg
The Law of Leaky Abstractions



      "All non-trivial abstractions, to some degree, are leaky.
      Abstractions fail. Sometimes a little, sometimes a lot. There's
      leakage. Things go wrong. It happens all over the place when
      you have abstractions."
      Joel Spolsky, http://www.joelonsoftware.com/articles/LeakyAbstractions.html




http://lifeattheendoftheroad.files.wordpress.com/2009/07/270709-022.jpg
The KILROY case – Umbraco DK Festival


                      A Robust Caching Solution

  1.   Use the standard ASP.NET cache
        Problem: when we deploy or when the AppPool recycles, we loose the
         cache
  2.   Use Microsoft AppFabric.
        It provides a distributed, in-memory, application cache service in
         separate process than the webserver.
        Problem solved: we have a persistent cache – even when the web
         server restarts or the AppPool recycles


       We update the cache OnPublish events or after timeout.

                                                                              26
The KILROY case – Umbraco DK Festival




            4 Quick Tips for Good (Razor)
                                Performance


         …besides using custom caching :-)

                                              27
The KILROY case – Umbraco DK Festival


           Wisely use HasProperty and HasValue



 if (myDynamicNode.HasProperty("myCoolProperty") &&
       myDynamicNode.HasValue("myCoolProperty"))
 {
       int tmpInt;
       if (int.TryParse(myDynamicNode.GetProperty("myCoolProperty")
                                        .Value, out tmpInt))
               ....
 }




                                                                      28
The KILROY case – Umbraco DK Festival


          Use DynamicNode Extensions and Razor common helper

  public static class DocumentExtensions {
      public static bool IsValidProperty(this DynamicNode doc, string propertyAlias)
      {
          if (doc.HasProperty(propertyAlias) && doc.HasValue(propertyAlias))
                return true;
          return false;
      }
      public static string GetPropertyAsString(this DynamicNode doc, string propertyAlias)
      {
                if (!doc.IsValidProperty(propertyAlias))   return string.Empty;
                return doc.GetProperty(propertyAlias).Value;
      }
      public static int? GetPropertyAsInt(this DynamicNode doc, string propertyAlias)
          ...
  }


  Usage
  int? myIntProp = myDynamicNode.GetPropertyAsInt("mypropertyAlias");
                                                                                             29
The KILROY case – Umbraco DK Festival


                 Use Children if first level search

  Be aware of performance when using DynamicNode.Descendant(docType).
  Use "Children" if possible.
  For example to get a direct child node :

  Don’t use:
  DynamicNode dNode =
     rootNode.Descendants("myDocType").Items.FirstOrDefault();




  You can use instead :
  DynamicNode dNode = rootNode.GetChildrenAsList
            .Items.FirstOrDefault(x => x.NodeTypeAlias == "myDocType");



                                                                          30
The KILROY case – Umbraco DK Festival


            Dynamic notation considered harmfull?

  Be aware of performance using dynamic notation like node.DocTypeName =>
  same problem as last slide.
  To get a direct child node :

  Don’t use:
  dynamic rootNode = new DynamicNode(xxx);
  DynamicNodeList allMyDocType = rootNode.MyDocType; // can have performance issue
  // PS :   string myProp = rootNode.MyProp is OK is the prop exist


  You can use instead:
  DynamicNode dNode = rootNode.GetChildrenAsList
                          .Items.FirstOrDefault(x => x.NodeTypeAlias == "myDocType");




                                                                                   31
The KILROY case – Umbraco DK Festival


                                        Discussion



        What is your hard learned tips for blinding fast
                    Umbraco performance?




                                                           32
http://media.photobucket.com/image/toolbox/LilToe01/Shop/Toolbox017.jpg




What’s in Our Toolbox?
The KILROY case – Umbraco DK Festival



                              The Basics + a Tip
       Visual Studio 2010 (and Resharper)
       Kiln (Mercurial)
       Shared MS SQL Database




                                XmlCacheEnabled = false




                                                          34
The KILROY case – Umbraco DK Festival


                                   Deployment

   Deployment
        Web Deploy from Visual Studio
        XML Config transformations
   Updating Umbraco Doc Types and other settings
        Two approaches:
             Create an Umbraco Package containing every Doc Type, every
              template, every macro and so on
             Create an Umbraco Package containing new and updates Doc
              Types, templates etc.



                                                                           35
The KILROY case – Umbraco DK Festival


                                        Discussion


                              How do you deploy?


    Have you felt the pain of updating an highly utilized
                          DocType?




                                                            36
Any final Questions
                  or Comments?




http://www.europaszkola.pl/O%20szkole_html_4ff13fb7.jpg

Contenu connexe

Similaire à Umbraco festival Building Killroy

Docker up & running
Docker   up & runningDocker   up & running
Docker up & runningLe Thi
 
IDA - Eclipse Workshop II (In Danish)
IDA - Eclipse Workshop II (In Danish)IDA - Eclipse Workshop II (In Danish)
IDA - Eclipse Workshop II (In Danish)Tonny Madsen
 
Hooking up Semantic MediaWiki with external tools via SPARQL
Hooking up Semantic MediaWiki with external tools via SPARQLHooking up Semantic MediaWiki with external tools via SPARQL
Hooking up Semantic MediaWiki with external tools via SPARQLSamuel Lampa
 
notesnet.dk - Eclipse Modelling Tools
notesnet.dk - Eclipse Modelling Toolsnotesnet.dk - Eclipse Modelling Tools
notesnet.dk - Eclipse Modelling ToolsTonny Madsen
 
NetflixOSS and ZeroToDocker Talk
NetflixOSS and ZeroToDocker TalkNetflixOSS and ZeroToDocker Talk
NetflixOSS and ZeroToDocker Talkaspyker
 
Digital Fabrication Studio.06 _3D_PrintingScanning @ Aalto Media Factory
Digital Fabrication Studio.06 _3D_PrintingScanning @ Aalto Media FactoryDigital Fabrication Studio.06 _3D_PrintingScanning @ Aalto Media Factory
Digital Fabrication Studio.06 _3D_PrintingScanning @ Aalto Media FactoryMassimo Menichinelli
 
Rapid Prototyping in PySpark Streaming: The Thermodynamics of Docker Containe...
Rapid Prototyping in PySpark Streaming: The Thermodynamics of Docker Containe...Rapid Prototyping in PySpark Streaming: The Thermodynamics of Docker Containe...
Rapid Prototyping in PySpark Streaming: The Thermodynamics of Docker Containe...Richard Seymour
 
Machine Learning for Big Data Analytics: Scaling In with Containers while Sc...
Machine Learning for Big Data Analytics:  Scaling In with Containers while Sc...Machine Learning for Big Data Analytics:  Scaling In with Containers while Sc...
Machine Learning for Big Data Analytics: Scaling In with Containers while Sc...Ian Lumb
 
Freebase: Wikipedia Mining 20080416
Freebase: Wikipedia Mining 20080416Freebase: Wikipedia Mining 20080416
Freebase: Wikipedia Mining 20080416zenkat
 
Digital Fabrication Studio 0.3 Fabbing and FabLabs
Digital Fabrication Studio 0.3 Fabbing and FabLabsDigital Fabrication Studio 0.3 Fabbing and FabLabs
Digital Fabrication Studio 0.3 Fabbing and FabLabsMassimo Menichinelli
 
A WebGL scene in 30 mins
A WebGL scene in 30 minsA WebGL scene in 30 mins
A WebGL scene in 30 minsJens Arps
 
OpenCms All Dressed Up with skinnDriva
OpenCms All Dressed Up with skinnDrivaOpenCms All Dressed Up with skinnDriva
OpenCms All Dressed Up with skinnDrivahfcoma
 
A system architect guide - ten ways to ruin your cloud experience ...and how ...
A system architect guide - ten ways to ruin your cloud experience ...and how ...A system architect guide - ten ways to ruin your cloud experience ...and how ...
A system architect guide - ten ways to ruin your cloud experience ...and how ...inovex GmbH
 
A system architect guide - ten ways to ruin your cloud experience ...and how ...
A system architect guide - ten ways to ruin your cloud experience ...and how ...A system architect guide - ten ways to ruin your cloud experience ...and how ...
A system architect guide - ten ways to ruin your cloud experience ...and how ...inovex GmbH
 
Using RAG to create your own Podcast conversations.pdf
Using RAG to create your own Podcast conversations.pdfUsing RAG to create your own Podcast conversations.pdf
Using RAG to create your own Podcast conversations.pdfRichard Rodger
 
2012.09.26.CUbRIK at CHORUS + (the progress)
2012.09.26.CUbRIK at CHORUS + (the progress)2012.09.26.CUbRIK at CHORUS + (the progress)
2012.09.26.CUbRIK at CHORUS + (the progress)CUbRIK Project
 
User Experience Sketching for Lean and Agile Teams
User Experience Sketching for Lean and Agile TeamsUser Experience Sketching for Lean and Agile Teams
User Experience Sketching for Lean and Agile TeamsDonna Lichaw
 
Reactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDaysReactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDaysManuel Bernhardt
 
Your java script library
Your java script libraryYour java script library
Your java script libraryjasfog
 
CNCF Québec Meetup du 16 Novembre 2023
CNCF Québec Meetup du 16 Novembre 2023CNCF Québec Meetup du 16 Novembre 2023
CNCF Québec Meetup du 16 Novembre 2023Anthony Dahanne
 

Similaire à Umbraco festival Building Killroy (20)

Docker up & running
Docker   up & runningDocker   up & running
Docker up & running
 
IDA - Eclipse Workshop II (In Danish)
IDA - Eclipse Workshop II (In Danish)IDA - Eclipse Workshop II (In Danish)
IDA - Eclipse Workshop II (In Danish)
 
Hooking up Semantic MediaWiki with external tools via SPARQL
Hooking up Semantic MediaWiki with external tools via SPARQLHooking up Semantic MediaWiki with external tools via SPARQL
Hooking up Semantic MediaWiki with external tools via SPARQL
 
notesnet.dk - Eclipse Modelling Tools
notesnet.dk - Eclipse Modelling Toolsnotesnet.dk - Eclipse Modelling Tools
notesnet.dk - Eclipse Modelling Tools
 
NetflixOSS and ZeroToDocker Talk
NetflixOSS and ZeroToDocker TalkNetflixOSS and ZeroToDocker Talk
NetflixOSS and ZeroToDocker Talk
 
Digital Fabrication Studio.06 _3D_PrintingScanning @ Aalto Media Factory
Digital Fabrication Studio.06 _3D_PrintingScanning @ Aalto Media FactoryDigital Fabrication Studio.06 _3D_PrintingScanning @ Aalto Media Factory
Digital Fabrication Studio.06 _3D_PrintingScanning @ Aalto Media Factory
 
Rapid Prototyping in PySpark Streaming: The Thermodynamics of Docker Containe...
Rapid Prototyping in PySpark Streaming: The Thermodynamics of Docker Containe...Rapid Prototyping in PySpark Streaming: The Thermodynamics of Docker Containe...
Rapid Prototyping in PySpark Streaming: The Thermodynamics of Docker Containe...
 
Machine Learning for Big Data Analytics: Scaling In with Containers while Sc...
Machine Learning for Big Data Analytics:  Scaling In with Containers while Sc...Machine Learning for Big Data Analytics:  Scaling In with Containers while Sc...
Machine Learning for Big Data Analytics: Scaling In with Containers while Sc...
 
Freebase: Wikipedia Mining 20080416
Freebase: Wikipedia Mining 20080416Freebase: Wikipedia Mining 20080416
Freebase: Wikipedia Mining 20080416
 
Digital Fabrication Studio 0.3 Fabbing and FabLabs
Digital Fabrication Studio 0.3 Fabbing and FabLabsDigital Fabrication Studio 0.3 Fabbing and FabLabs
Digital Fabrication Studio 0.3 Fabbing and FabLabs
 
A WebGL scene in 30 mins
A WebGL scene in 30 minsA WebGL scene in 30 mins
A WebGL scene in 30 mins
 
OpenCms All Dressed Up with skinnDriva
OpenCms All Dressed Up with skinnDrivaOpenCms All Dressed Up with skinnDriva
OpenCms All Dressed Up with skinnDriva
 
A system architect guide - ten ways to ruin your cloud experience ...and how ...
A system architect guide - ten ways to ruin your cloud experience ...and how ...A system architect guide - ten ways to ruin your cloud experience ...and how ...
A system architect guide - ten ways to ruin your cloud experience ...and how ...
 
A system architect guide - ten ways to ruin your cloud experience ...and how ...
A system architect guide - ten ways to ruin your cloud experience ...and how ...A system architect guide - ten ways to ruin your cloud experience ...and how ...
A system architect guide - ten ways to ruin your cloud experience ...and how ...
 
Using RAG to create your own Podcast conversations.pdf
Using RAG to create your own Podcast conversations.pdfUsing RAG to create your own Podcast conversations.pdf
Using RAG to create your own Podcast conversations.pdf
 
2012.09.26.CUbRIK at CHORUS + (the progress)
2012.09.26.CUbRIK at CHORUS + (the progress)2012.09.26.CUbRIK at CHORUS + (the progress)
2012.09.26.CUbRIK at CHORUS + (the progress)
 
User Experience Sketching for Lean and Agile Teams
User Experience Sketching for Lean and Agile TeamsUser Experience Sketching for Lean and Agile Teams
User Experience Sketching for Lean and Agile Teams
 
Reactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDaysReactive Web-Applications @ LambdaDays
Reactive Web-Applications @ LambdaDays
 
Your java script library
Your java script libraryYour java script library
Your java script library
 
CNCF Québec Meetup du 16 Novembre 2023
CNCF Québec Meetup du 16 Novembre 2023CNCF Québec Meetup du 16 Novembre 2023
CNCF Québec Meetup du 16 Novembre 2023
 

Dernier

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 

Dernier (20)

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 

Umbraco festival Building Killroy

  • 1. The KILROY case – Umbraco DK Festival Building KILROY Umbraco DK Festival 2012 - Aarhus Friday 13th April 1
  • 2. The KILROY case – Umbraco DK Festival Agenda  About Us  Brief Project Overview  3 Themes 1. Using Umbraco – Managing 10.000 destination pages 2. Performance – A Leaky Abstraction & Lessons Learned 3. The Toolbox – From Team Development to Deployment  Final Questions 2
  • 3. The KILROY case – Umbraco DK Festival Please interrupt We don’t mind getting derailed http://www.flickr.com/photos/gorillaradio/2474695970/ 3
  • 4. The KILROY case – Umbraco DK Festival About Us Emil Rasmussen Project Manager @emilr Fabrice Loudet Senior .NET developer 4
  • 5. The KILROY case – Umbraco DK Festival About Novicell  Based in Aarhus  38 employees  Full service web development agency  Proud Umbraco Gold Partner 5
  • 6. The KILROY case – Umbraco DK Festival Project Brief  New platform for KILROYs online marketing activities  Migrate content and URLs  Launched July 2011  Peaked at a 5 man development team  Still in active development - 1 week release schedule  Umbraco 4.7.1.1 (patched) 6
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14. The KILROY case – Umbraco DK Festival By the Numbers  7 languages (soon to be 8)  21 sites  30 content editors  94 master pages (templates)  100 razor macros  830 dictionary items  5000 images  26000 pages  33000 active nodes  700.000 monthly visitors  2.800.000 monthly page views 14
  • 15. The KILROY case – Umbraco DK Festival Theme 1: Using Umbraco 15
  • 16. The KILROY case – Umbraco DK Festival 10,000 destination pages Problem: create and maintain 10.000 destination pages. Solution: common destination structure with automatic creation of sub pages. And onPublish event update of JSON data files. 16
  • 17.
  • 18.
  • 19.
  • 20.
  • 21. The KILROY case – Umbraco DK Festival Discussion What do you do when you need to create a database of stuff (e.g. staff list, product videos, events, etc.)? 21
  • 22. The KILROY case – Umbraco DK Festival Theme 2: Performance 22
  • 23. The KILROY case – Umbraco DK Festival The Umbraco Macro Cache - #h5is Your are in big trouble, when you entire performance strategy is the Umbraco Macro Cache… 23
  • 25. The Law of Leaky Abstractions "All non-trivial abstractions, to some degree, are leaky. Abstractions fail. Sometimes a little, sometimes a lot. There's leakage. Things go wrong. It happens all over the place when you have abstractions." Joel Spolsky, http://www.joelonsoftware.com/articles/LeakyAbstractions.html http://lifeattheendoftheroad.files.wordpress.com/2009/07/270709-022.jpg
  • 26. The KILROY case – Umbraco DK Festival A Robust Caching Solution 1. Use the standard ASP.NET cache  Problem: when we deploy or when the AppPool recycles, we loose the cache 2. Use Microsoft AppFabric.  It provides a distributed, in-memory, application cache service in separate process than the webserver.  Problem solved: we have a persistent cache – even when the web server restarts or the AppPool recycles We update the cache OnPublish events or after timeout. 26
  • 27. The KILROY case – Umbraco DK Festival 4 Quick Tips for Good (Razor) Performance …besides using custom caching :-) 27
  • 28. The KILROY case – Umbraco DK Festival Wisely use HasProperty and HasValue if (myDynamicNode.HasProperty("myCoolProperty") && myDynamicNode.HasValue("myCoolProperty")) { int tmpInt; if (int.TryParse(myDynamicNode.GetProperty("myCoolProperty") .Value, out tmpInt)) .... } 28
  • 29. The KILROY case – Umbraco DK Festival Use DynamicNode Extensions and Razor common helper public static class DocumentExtensions { public static bool IsValidProperty(this DynamicNode doc, string propertyAlias) { if (doc.HasProperty(propertyAlias) && doc.HasValue(propertyAlias)) return true; return false; } public static string GetPropertyAsString(this DynamicNode doc, string propertyAlias) { if (!doc.IsValidProperty(propertyAlias)) return string.Empty; return doc.GetProperty(propertyAlias).Value; } public static int? GetPropertyAsInt(this DynamicNode doc, string propertyAlias) ... } Usage int? myIntProp = myDynamicNode.GetPropertyAsInt("mypropertyAlias"); 29
  • 30. The KILROY case – Umbraco DK Festival Use Children if first level search Be aware of performance when using DynamicNode.Descendant(docType). Use "Children" if possible. For example to get a direct child node : Don’t use: DynamicNode dNode = rootNode.Descendants("myDocType").Items.FirstOrDefault(); You can use instead : DynamicNode dNode = rootNode.GetChildrenAsList .Items.FirstOrDefault(x => x.NodeTypeAlias == "myDocType"); 30
  • 31. The KILROY case – Umbraco DK Festival Dynamic notation considered harmfull? Be aware of performance using dynamic notation like node.DocTypeName => same problem as last slide. To get a direct child node : Don’t use: dynamic rootNode = new DynamicNode(xxx); DynamicNodeList allMyDocType = rootNode.MyDocType; // can have performance issue // PS : string myProp = rootNode.MyProp is OK is the prop exist You can use instead: DynamicNode dNode = rootNode.GetChildrenAsList .Items.FirstOrDefault(x => x.NodeTypeAlias == "myDocType"); 31
  • 32. The KILROY case – Umbraco DK Festival Discussion What is your hard learned tips for blinding fast Umbraco performance? 32
  • 34. The KILROY case – Umbraco DK Festival The Basics + a Tip  Visual Studio 2010 (and Resharper)  Kiln (Mercurial)  Shared MS SQL Database XmlCacheEnabled = false 34
  • 35. The KILROY case – Umbraco DK Festival Deployment  Deployment  Web Deploy from Visual Studio  XML Config transformations  Updating Umbraco Doc Types and other settings  Two approaches:  Create an Umbraco Package containing every Doc Type, every template, every macro and so on  Create an Umbraco Package containing new and updates Doc Types, templates etc. 35
  • 36. The KILROY case – Umbraco DK Festival Discussion How do you deploy? Have you felt the pain of updating an highly utilized DocType? 36
  • 37. Any final Questions or Comments? http://www.europaszkola.pl/O%20szkole_html_4ff13fb7.jpg