<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><language>en</language><title>Blog posts by Quan Mai</title> <link>https://world.optimizely.com/blogs/Quan-Mai/</link><description></description><ttl>60</ttl><generator>Optimizely World</generator><item> <title>Commerce 14.45.0 is incompatible with CMS 12.34.2 (but that&#39;s an easy fix!)</title>            <link>https://world.optimizely.com/blogs/Quan-Mai/Dates/2026/3/commerce-14.45.0-is-incompatible-with-cms-12.34.2</link>            <description>&lt;p&gt;Incompatible is a strong word, but that is to get your attention. This is one of the small thing that can be overlooked, but if you run into it, it could waste many hours figuring out what&#39;s wrong.&lt;/p&gt;
&lt;p&gt;There is a strange yet weird bug in Commerce 14.45 when you upgrade to CMS 12.34.2, your Catalog UI will keep flickering. If you open browser console, there are a lot of requests to /contentstructure and the CatalogContentList component just keeps refreshing.&lt;/p&gt;
&lt;p&gt;Good thing is that the problem is fixed on Commerce 14.45.1, so you can just upgrade to get your site working again!&lt;/p&gt;
&lt;p&gt;Happy upgrading.&amp;nbsp;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Quan-Mai/Dates/2026/3/commerce-14.45.0-is-incompatible-with-cms-12.34.2</guid>            <pubDate>Thu, 05 Mar 2026 11:06:19 GMT</pubDate>           <category>Blog post</category></item><item> <title>Don&#39;t let Regex slow you down</title>            <link>https://world.optimizely.com/blogs/Quan-Mai/Dates/2025/8/dont-let-regex-slow-you-down/</link>            <description>&lt;p&gt;There is a joke with programmers/developers: you have one problem, you use regex, now you have two problems!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://external-preview.redd.it/T1ZHM04cr_fR59nCxgkxRMvwSlFszZdGEPqy5pYtX2g.jpg?auto=webp&amp;amp;s=7fab55f0b9d15dc6dd57987e0f908c9f1bc8891b&quot; alt=&quot;Perl Problems : r/xkcd&quot; /&gt;&lt;/p&gt;
&lt;p&gt;It&#39;s funny because it true! But kidding aside, let&#39;s all agree that Regex is incredibly powerful and helpful. But let&#39;s also agree that Regex can be expensive to run. We are told to cache the regex with RegexOptions.Compiled.&lt;/p&gt;
&lt;p&gt;But is that a good enough practice? Or even &quot;good&quot;?&lt;/p&gt;
&lt;p&gt;Today I stumped upon a bug fix I made 5 years ago. The context of bug fix was lost with time, so I think it could be interesting to see how much improvement it made. The fix moved a new Regex from instance to be static, so I asked CoPilot to write a test to compare between the three approaches&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a new Regex every time&lt;/li&gt;
&lt;li&gt;Create a new Regex every time but with RegexOptions.Compiled&lt;/li&gt;
&lt;li&gt;Create a new Regex once and cached with a static propery&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And CoPilot created this bug free, error-free code. Scarily it even suggests to use Lazy&amp;lt;T&amp;gt; to delay the creation of Regex until necessarily.&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System.Text.RegularExpressions;

[MemoryDiagnoser] // Enables memory allocation tracking
public class RegexBenchmark
{
    private const string Input = &quot;https://example.com/assets/image.png&quot;;
    private const string Pattern = @&quot;^https:\/\/example\.com\/assets\/.*$&quot;;

    private static readonly Regex StaticRegex = new Regex(Pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);

    [Benchmark]
    public bool NewRegex_Interpreted()
    {
        var regex = new Regex(Pattern, RegexOptions.IgnoreCase);
        return regex.IsMatch(Input);
    }

    [Benchmark]
    public bool NewRegex_Compiled()
    {
        var regex = new Regex(Pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
        return regex.IsMatch(Input);
    }

    [Benchmark]
    public bool StaticRegex_Compiled()
    {
        return StaticRegex.IsMatch(Input);
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        BenchmarkRunner.Run&amp;lt;RegexBenchmark&amp;gt;();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And the test result was a surprise to me&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/7baf5cb470a74a9082b0790fdc3f4b9d.aspx&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I knew StaticRegex should be the best, but I was surprised to learn that even with caching and lookup, the Compiled regex is not only the slowest by a large margin, but also every expensive in term of allocations. It&#39;s a no no, especially in cases of hot paths! For inexperienced developers who think Compiled will solve the problem, it is, actually, creating a problem!&lt;/p&gt;
&lt;p&gt;Do yourself a favor and look for all usages of new Regex in your code base. If it&#39;s not already a static property, time to be a hero and fix it! An alternative is to use Regex.IsMatch with Compiled option - so not creating an instance. It is slightly slower than Static Regex instance, but not by much and could be within the margin of error.&lt;/p&gt;
&lt;p&gt;And if you have time to spare, take a look at &lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-source-generators&quot;&gt;.NET regular expression source generators - .NET | Microsoft Learn&lt;/a&gt; for even faster regex creations.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/Quan-Mai/Dates/2025/8/dont-let-regex-slow-you-down/</guid>            <pubDate>Fri, 22 Aug 2025 13:19:52 GMT</pubDate>           <category>Blog post</category></item><item> <title>Fatal flaw with geta-notfoundhandler</title>            <link>https://vimvq1987.com/?p=3379</link>            <description>&lt;p&gt;First of all, I&amp;#8217;d like to make this a farewell post to this blog. The VM that is hosting this blog &amp;#8211; which is generously sponsored by my employer, is being decommissioned. I have looked at some alternatives to move my blog to, but none is interesting in term of time/effort/cost. With all the things &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/fatal-flaw-with-geta-notfoundhandler/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;Fatal flaw with geta-notfoundhandler&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://vimvq1987.com/fatal-flaw-with-geta-notfoundhandler/&quot;&gt;Fatal flaw with geta-notfoundhandler&lt;/a&gt; appeared first on &lt;a href=&quot;https://vimvq1987.com&quot;&gt;Quan Mai&amp;#039;s blog&lt;/a&gt;.&lt;/p&gt;
</description>            <guid>https://vimvq1987.com/?p=3379</guid>            <pubDate>Wed, 07 May 2025 11:03:59 GMT</pubDate>           <category>Blog post</category></item><item> <title>Shorten your cache keys, please</title>            <link>https://vimvq1987.com/?p=3359</link>            <description>&lt;p&gt;In a recent customer engagement, I have looked into a customer where their memory usage is abnormally high. Among other findings, I think one was not very well known. But as they say, small details can make a big difference &amp;#8211; and that small detail in today&amp;#8217;s post is the cache key. Let&amp;#8217;s put it &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/shorten-your-cache-keys-please/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;Shorten your cache keys, please&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://vimvq1987.com/shorten-your-cache-keys-please/&quot;&gt;Shorten your cache keys, please&lt;/a&gt; appeared first on &lt;a href=&quot;https://vimvq1987.com&quot;&gt;Quan Mai&amp;#039;s blog&lt;/a&gt;.&lt;/p&gt;
</description>            <guid>https://vimvq1987.com/?p=3359</guid>            <pubDate>Wed, 09 Apr 2025 09:23:57 GMT</pubDate>           <category>Blog post</category></item><item> <title>How to: set access right to folders</title>            <link>https://vimvq1987.com/?p=3291</link>            <description>&lt;p&gt;Today I stumped upon this question Solution for Handling File Upload Permissions in Episerver CMS 12, and there is a simple solution for that Using the &#160;EditSecurity.aspx comes in handy but it is not very future proof as it is now removed in CMS 12 with its siblings WebForms part. However, we can easily make &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/how-to-set-access-right-to-folders/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;How to: set access right to folders&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://vimvq1987.com/how-to-set-access-right-to-folders/&quot;&gt;How to: set access right to folders&lt;/a&gt; appeared first on &lt;a href=&quot;https://vimvq1987.com&quot;&gt;Quan Mai&amp;#039;s blog&lt;/a&gt;.&lt;/p&gt;
</description>            <guid>https://vimvq1987.com/?p=3291</guid>            <pubDate>Fri, 07 Feb 2025 08:48:17 GMT</pubDate>           <category>Blog post</category></item><item> <title>Be careful with your (order) notes</title>            <link>https://vimvq1987.com/?p=3280</link>            <description>&lt;p&gt;This happened a quite ago but only now I have had time to write about it. Once upon a time, I was asked to look into a customer database (in a big engagement of helping them improving performance overall) One thing stand out is this query If you can guess, that is the query to &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/be-careful-with-your-order-notes/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;Be careful with your (order) notes&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://vimvq1987.com/be-careful-with-your-order-notes/&quot;&gt;Be careful with your (order) notes&lt;/a&gt; appeared first on &lt;a href=&quot;https://vimvq1987.com&quot;&gt;Quan Mai&amp;#039;s blog&lt;/a&gt;.&lt;/p&gt;
</description>            <guid>https://vimvq1987.com/?p=3280</guid>            <pubDate>Wed, 05 Feb 2025 13:04:19 GMT</pubDate>           <category>Blog post</category></item><item> <title>How to: create Decimal metafield with custom precision</title>            <link>https://vimvq1987.com/?p=3264</link>            <description>&lt;p&gt;If you are using catalog system, the way of creating metafields are easy &amp;#8211; in fact, you can forget about &amp;#8220;metafields&amp;#8221;, all you should be using is the typed content type. Adding this attribute to your property is enough to set the precision as you wish. Thing is a little different if you are using &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/how-to-create-decimal-metafield-with-custom-precision/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;How to: create Decimal metafield with custom precision&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://vimvq1987.com/how-to-create-decimal-metafield-with-custom-precision/&quot;&gt;How to: create Decimal metafield with custom precision&lt;/a&gt; appeared first on &lt;a href=&quot;https://vimvq1987.com&quot;&gt;Quan Mai&amp;#039;s blog&lt;/a&gt;.&lt;/p&gt;
</description>            <guid>https://vimvq1987.com/?p=3264</guid>            <pubDate>Thu, 16 Jan 2025 09:36:41 GMT</pubDate>           <category>Blog post</category></item><item> <title>AsyncHelper can be considered harmful</title>            <link>https://vimvq1987.com/?p=3121</link>            <description>&lt;p&gt;.NET developers have been in the transition to move from synchronous APIs to asynchronous API. That was boosted a lot by await/async keyword of C# 5.0, but we are now in a dangerous middle ground: there are as many synchronous APIs as there are async ones. The mix of them requires the ability to call &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/asynchelper-can-be-considered-harmful/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;AsyncHelper can be considered harmful&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://vimvq1987.com/asynchelper-can-be-considered-harmful/&quot;&gt;AsyncHelper can be considered harmful&lt;/a&gt; appeared first on &lt;a href=&quot;https://vimvq1987.com&quot;&gt;Quan Mai&amp;#039;s blog&lt;/a&gt;.&lt;/p&gt;
</description>            <guid>https://vimvq1987.com/?p=3121</guid>            <pubDate>Wed, 04 Dec 2024 16:19:29 GMT</pubDate>           <category>Blog post</category></item><item> <title>The search for dictionary key</title>            <link>https://vimvq1987.com/?p=3144</link>            <description>&lt;p&gt;Recently I helped to chase down a ghost (and you might be surprised to know that I, for most part, spend hours to be a ghostbuster, it could be fun, sometimes). A customer reported a weird issue when a visitor goes to their website, have every thing correct in the cart, including the discount, only &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/the-search-for-dictionary-key/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;The search for dictionary key&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://vimvq1987.com/the-search-for-dictionary-key/&quot;&gt;The search for dictionary key&lt;/a&gt; appeared first on &lt;a href=&quot;https://vimvq1987.com&quot;&gt;Quan Mai&amp;#039;s blog&lt;/a&gt;.&lt;/p&gt;
</description>            <guid>https://vimvq1987.com/?p=3144</guid>            <pubDate>Wed, 04 Dec 2024 12:06:53 GMT</pubDate>           <category>Blog post</category></item><item> <title>The downside of being too fast</title>            <link>https://vimvq1987.com/?p=3108</link>            <description>&lt;p&gt;Today when I was tracking down some changes, I came across this commit comment Who wrote this? Me, almost 5 years ago. I did have a chuckle in my head, for my younger self being brutally honest (I was the one who fixed the original bug, so I was responsible for making it &amp;#8220;too fast&amp;#8221;.). &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/the-downside-of-being-too-fast/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;The downside of being too fast&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://vimvq1987.com/the-downside-of-being-too-fast/&quot;&gt;The downside of being too fast&lt;/a&gt; appeared first on &lt;a href=&quot;https://vimvq1987.com&quot;&gt;Quan Mai&amp;#039;s blog&lt;/a&gt;.&lt;/p&gt;
</description>            <guid>https://vimvq1987.com/?p=3108</guid>            <pubDate>Fri, 17 May 2024 07:28:37 GMT</pubDate>           <category>Blog post</category></item><item> <title>Solving the mystery of high memory usage</title>            <link>https://vimvq1987.com/?p=3050</link>            <description>&lt;p&gt;Sometimes, my work is easy, the problem could be resolved with one look (when I&amp;#8217;m lucky enough to look at where it needs to be looked, just like this one Varchar can be harmful to your performance &amp;#8211; Quan Mai&amp;#8217;s blog (vimvq1987.com) ). Sometimes, it is hard. Can&amp;#8217;t count number of times that I stared &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/solving-the-mystery-of-high-memory-usage/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;Solving the mystery of high memory usage&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://vimvq1987.com/solving-the-mystery-of-high-memory-usage/&quot;&gt;Solving the mystery of high memory usage&lt;/a&gt; appeared first on &lt;a href=&quot;https://vimvq1987.com&quot;&gt;Quan Mai&amp;#039;s blog&lt;/a&gt;.&lt;/p&gt;
</description>            <guid>https://vimvq1987.com/?p=3050</guid>            <pubDate>Mon, 22 Apr 2024 14:13:42 GMT</pubDate>           <category>Blog post</category></item><item> <title>Fix your Search &amp; Navigation (Find) indexing job, please</title>            <link>https://vimvq1987.com/?p=3087</link>            <description>&lt;p&gt;Once upon a time, a colleague asked me to look into a customer database with weird spikes in database log usage. (You might start to wonder why I am always the one who looks into weird things, is there a pattern here) Upon reviewing the query store, I noticed a very high logical reads related &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/fix-your-search-navigation-find-indexing-job-please/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;Fix your Search &amp;#38; Navigation (Find) indexing job, please&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The post &lt;a href=&quot;https://vimvq1987.com/fix-your-search-navigation-find-indexing-job-please/&quot;&gt;Fix your Search &amp;amp; Navigation (Find) indexing job, please&lt;/a&gt; appeared first on &lt;a href=&quot;https://vimvq1987.com&quot;&gt;Quan Mai&amp;#039;s blog&lt;/a&gt;.&lt;/p&gt;
</description>            <guid>https://vimvq1987.com/?p=3087</guid>            <pubDate>Wed, 17 Apr 2024 12:15:22 GMT</pubDate>           <category>Blog post</category></item><item> <title>Varchar can be harmful to your performance</title>            <link>https://vimvq1987.com/?p=3029</link>            <description>As string is the most common data type in an application, nvarchar and its variant varchar are probably the most common column types in your database. (We almost always use nvarchar because nchar is meant for fixed length columns which we don&amp;#8217;t have). The difference is that nvarchar has encoding of UTF-16/USC-2 while varchar has &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/varchar-can-be-harmful-to-your-performance/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;Varchar can be harmful to your performance&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>            <guid>https://vimvq1987.com/?p=3029</guid>            <pubDate>Thu, 07 Mar 2024 14:52:07 GMT</pubDate>           <category>Blog post</category></item><item> <title>Migrate Catalog content properties</title>            <link>https://vimvq1987.com/?p=3005</link>            <description>A colleague asked me yesterday &amp;#8211; how do we migrate properties of catalog content. There is, unfortunately, no official way to do it. There are several unofficial ways to do it, however. Today we will explore the way I personally recommend &amp;#8211; for its safety and backward compatible. Let&amp;#8217;s say we have FashionProduct with a &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/migrate-catalog-content-properties/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;Migrate Catalog content properties&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>            <guid>https://vimvq1987.com/?p=3005</guid>            <pubDate>Tue, 20 Feb 2024 16:30:46 GMT</pubDate>           <category>Blog post</category></item><item> <title>Switching away from serializable cart mode</title>            <link>https://vimvq1987.com/?p=2995</link>            <description>If you are using Optimizely Customized Commerce, the common wisdom is that you should be using serializable cart mode. It&amp;#8217;s not perfect (we discussed the drawbacks in, um, my book), but generally it has performance benefits. But for any reason that you need to use the legacy cart mode, there is a switch you can &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/switching-away-from-serializable-cart-mode/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;Switching away from serializable cart mode&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>            <guid>https://vimvq1987.com/?p=2995</guid>            <pubDate>Tue, 16 Jan 2024 12:24:19 GMT</pubDate>           <category>Blog post</category></item><item> <title>Command timeout for Commerce 14</title>            <link>https://vimvq1987.com/?p=2964</link>            <description>While we always want to have fast database queries, it is not doable all the time. Sometimes we need to run slow queries, and we need to tell the underlying framework that this query can take some time to complete, and we&amp;#8217;re fine with it. Otherwise, it will try to terminate the query after 30 &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/command-timeout-for-commerce-14/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;Command timeout for Commerce 14&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>            <guid>https://vimvq1987.com/?p=2964</guid>            <pubDate>Fri, 22 Dec 2023 09:58:35 GMT</pubDate>           <category>Blog post</category></item><item> <title>Performance optimization – the hardcore series – part 4</title>            <link>https://vimvq1987.com/?p=2768</link>            <description>Let&amp;#8217;s take a break from the memory allocation, and do some optimization on another aspect, yet as important (if not even more important) &amp;#8211; database. We all know that database queries play an essential part in any serious app. It&amp;#8217;s almost a given that if you want your app to perform well, your database queries &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/performance-optimization-the-hardcore-series-part-4/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;Performance optimization – the hardcore series – part 4&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>            <guid>https://vimvq1987.com/?p=2768</guid>            <pubDate>Sat, 25 Nov 2023 11:44:43 GMT</pubDate>           <category>Blog post</category></item><item> <title>Building a better wish list – part 1</title>            <link>https://vimvq1987.com/?p=2841</link>            <description>If you have been using Optimized Customized Commerce, you probably know that, by default, wish list is just a cart with a special name. Can you guess the name? Surprise, surprise, it&amp;#8217;s &amp;#8220;Wishlist&amp;#8221;. It&amp;#8217;s been there since forever, from the early day of Mediachase, and then carried over to the new serializable cart. I have &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/building-a-better-wish-list-part-1/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;Building a better wish list &amp;#8211; part 1&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>            <guid>https://vimvq1987.com/?p=2841</guid>            <pubDate>Mon, 06 Nov 2023 11:29:35 GMT</pubDate>           <category>Blog post</category></item><item> <title>Performance optimization – the hardcore series – part 3</title>            <link>https://vimvq1987.com/?p=2775</link>            <description>&amp;#8220;In 99% of the cases, premature optimization is the root of all devil&amp;#8221; This quote is usually said to be from Donald Knuth, usually regarded as &amp;#8220;father of the analysis of algorithms&amp;#8221;. His actual quote is a bit difference We should forget about small efficiencies, say about 97% of the time: premature optimization is the &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/performance-optimization-the-hardcore-series-part-3/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;Performance optimization – the hardcore series – part 3&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>            <guid>https://vimvq1987.com/?p=2775</guid>            <pubDate>Sun, 08 Oct 2023 09:41:01 GMT</pubDate>           <category>Blog post</category></item><item> <title>Performance optimization – the hardcore series – part 2</title>            <link>https://vimvq1987.com/?p=2755</link>            <description>Earlier we started a new series about performance optimization, here Performance optimization – the hardcore series – part 1 – Quan Mai&amp;#8217;s blog (vimvq1987.com) . There are ton of places where things can go wrong. A seasoned developer can, from experience, avoid some obvious performance errors. But as we will soon learn, a small thing &amp;#8230; &lt;a href=&quot;https://vimvq1987.com/performance-optimization-the-hardcore-series-part-2/&quot; class=&quot;more-link&quot;&gt;Continue reading &lt;span class=&quot;screen-reader-text&quot;&gt;Performance optimization &amp;#8211; the hardcore series &amp;#8211; part 2&lt;/span&gt; &lt;span class=&quot;meta-nav&quot;&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>            <guid>https://vimvq1987.com/?p=2755</guid>            <pubDate>Wed, 04 Oct 2023 10:57:16 GMT</pubDate>           <category>Blog post</category></item></channel>
</rss>