SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
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

Más contenido relacionado

Similar a 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
 

Similar a 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
 

Último

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
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
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
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
[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
 
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
 
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
 

Último (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
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
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
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
[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
 
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
 
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
 

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