While on a call with a customer last week, I was faced with the question of why the customer’s site had slowed down, even after they had switched to full SSL.

Well, to be honest, it’s pretty obvious; SSL is more expensive from a web performance perspective. However, it wasn’t until I saw this chart that I realized how bad it has gotten.

Response Times after SSL Intro

Every metric jumped, and jumped by a lot! The worrisome spikes here are obviously the render start, onload, and webpage response.

The problem is that when you introduce SSL, you are also forcing everything on your website (images, third parties, etc.) to also use SSL.

Some of these third parties are better than others at handling SSL. In this case, the customer relies on a marketing third party called Criteo, and unfortunately they failed the test.

Let’s take a look at how the domains associated with this third party impacted this etailer:

Criteo Performance Impact

The hostnames that were present before and after the SSL transition doubled in size! Again SSL is slower, but when you combine it with latency, it’s a performance nightmare for end users.

In this case:

From Los Angeles going to static.criteo.com I ended up in Amsterdam:

Traceroute to static.criteo.com (178.250.2.75), 64 hops max, 52 byte packets

  • 1  192.168.1.1 (192.168.1.1)  0.586 ms  0.401 ms  0.406 ms
  • 2  rrcs-xxxx.west.biz.rr.com (xxxx)  5.815 ms  13.928 ms  10.891 ms
  • 3  142.254.236.121 (142.254.236.121)  19.880 ms  22.241 ms  22.791 ms
  • 4  agg61.lsapcawv02h.socal.rr.com (24.30.169.101)  17.487 ms  15.217 ms  24.056 ms
  • 5  agg20.lsaicaev02r.socal.rr.com (72.129.19.10)  20.255 ms  19.686 ms  14.779 ms
  • 6  agg26.tustcaft01r.socal.rr.com (72.129.17.2)  28.060 ms  86.273 ms  32.855 ms
  • 7  bu-ether26.tustca4200w-bcr00.tbone.rr.com (66.109.3.232)  26.927 ms  45.653 ms  26.746 ms
  • 8  * lag-24.ear2.newyork1.level3.net (4.68.111.101)  26.402 ms  25.614 ms
  • 9  ae-225-3601.edge5.amsterdam1.level3.net (4.69.162.146)  171.798 ms  177.958 ms  170.846 ms
  • 10  criteo.edge5.amsterdam1.level3.net (212.72.41.226)  177.036 ms  173.708 ms  166.786 ms
  • 11  n7k01-inet-am5-eth4-1.eu.criteo.net (178.250.7.116)  207.144 ms  192.979 ms
  •     178.250.7.138 (178.250.7.138)  206.408 ms
  • 12  static.criteo.com (178.250.2.75)  175.349 ms  181.355 ms  169.982 ms

or to Paris:

Traceroute to static.criteo.com (178.250.0.75), 64 hops max, 52 byte packets

  • 1  192.168.1.1 (192.168.1.1)  0.569 ms  0.412 ms  0.357 ms
  • 2  rrcs-xxx.west.biz.rr.com (xxx)  2.728 ms  2.707 ms  9.438 ms
  • 3  142.254.236.121 (142.254.236.121)  18.537 ms  27.040 ms  24.838 ms
  • 4  agg61.lsapcawv02h.socal.rr.com (24.30.169.101)  58.938 ms  31.111 ms  34.907 ms
  • 5  agg20.lsaicaev02r.socal.rr.com (72.129.19.10)  29.830 ms  30.030 ms  20.014 ms
  • 6  agg26.tustcaft01r.socal.rr.com (72.129.17.2)  37.169 ms  28.472 ms  23.341 ms
  • 7  bu-ether26.tustca4200w-bcr00.tbone.rr.com (66.109.3.232)  21.238 ms  24.953 ms  22.439 ms
  • 8  * lag-24.ear2.newyork1.level3.net (4.68.111.101)  105.589 ms  20.029 ms
  • 9  ae-4-90.edge5.paris1.level3.net (4.69.168.200)  174.507 ms
  •     ae-2-70.edge5.paris1.level3.net (4.69.168.72)  179.457 ms  169.571 ms
  • 10  ae-2-70.edge5.paris1.level3.net (4.69.168.72)  184.136 ms  169.041 ms
  •     ae-1-60.edge5.paris1.level3.net (4.69.168.8)  166.249 ms
  • 11  criteo.edge5.paris1.level3.net (213.242.111.98)  181.880 ms  163.970 ms  170.280 ms
  • 12  178.250.7.240 (178.250.7.240)  159.588 ms
  •     178.250.7.242 (178.250.7.242)  169.325 ms
  •     178.250.7.240 (178.250.7.240)  165.443 ms
  • 13  static.criteo.com (178.250.0.75)  163.561 ms  192.055 ms  175.467 ms

Going to static.criteo.net I either went to SFO or to NY

  • 1  192.168.1.1 (192.168.1.1)  0.563 ms  0.357 ms  0.334 ms
  • 2  rrcs-xxx.west.biz.rr.com (xxx)  12.283 ms  9.262 ms  5.900 ms
  • 3  142.254.236.121 (142.254.236.121)  14.034 ms  29.089 ms  18.924 ms
  • 4  agg61.lsapcawv02h.socal.rr.com (24.30.169.101)  27.351 ms  23.018 ms  23.657 ms
  • 5  agg20.lsaicaev02r.socal.rr.com (72.129.19.10)  22.151 ms  23.728 ms  25.857 ms
  • 6  agg26.tustcaft01r.socal.rr.com (72.129.17.2)  44.198 ms  29.502 ms  39.897 ms
  • 7  bu-ether16.tustca4200w-bcr00.tbone.rr.com (66.109.6.64)  32.621 ms  24.070 ms  23.089 ms
  • 8  * * *
  • 9  ae-1-5.bar1.sanfrancisco1.level3.net (4.69.140.149)  34.351 ms  38.145 ms  39.065 ms
  • 10  ae-1-5.bar1.sanfrancisco1.level3.net (4.69.140.149)  39.776 ms  39.770 ms  40.181 ms
  • 11  criteo.bar1.sanfrancisco1.level3.net (4.53.132.34)  40.056 ms  49.411 ms  35.027 ms
  • 12  * 74.119.116.175 (74.119.116.175)  32.932 ms *
  • 13  * * *
  • 14  * static.criteo.net (74.119.117.74)  47.464 ms *

Because I use Google DNS and OpenDNS, I told myself that maybe that’s what was causing this weird routing.

But, then I traced from five of our nodes in the US:

Denver TWTC 

Tracing route to static.criteo.com [178.250.0.75] over a maximum of 30 hops:

  •   1   <1 ms   <1 ms   <1 ms 10.109.40.1
  •   2    1 ms   <1 ms    1 ms 74-202-23-213.static.twtelecom.net[74.202.23.213]
  •   3    1 ms    7 ms    1 ms den1-pr2-xe-2-1-0-0.us.twtelecom.net[66.192.245.198]
  •   4    *       *       *    Timed Out
  •   5  120 ms  121 ms  120 ms ae-4-90.edge5.paris1.level3.net[4.69.168.200]
  •   6  120 ms  125 ms  123 ms ae-4-90.edge5.paris1.level3.net[4.69.168.200]
  •   7  123 ms  124 ms  127 ms criteo.edge5.paris1.level3.net[213.242.111.98]
  •   8  120 ms  120 ms  120 ms 178.250.7.240
  •   9  120 ms  120 ms  119 ms static.criteo.com[178.250.0.75]

SF Level3

 Tracing route to static.criteo.com [178.250.2.75] over a maximum of 30 hops: 

  •   1   <1 ms   <1 ms   <1 ms 10.113.30.1
  •   2    6 ms   <1 ms   <1 ms lag-ae7-255.ear2.losangeles1.level3.net[4.31.61.117]
  •   3  165 ms  166 ms  219 ms ae-226-3602.edge5.amsterdam1.level3.net[4.69.162.150]
  •   4  167 ms  162 ms  163 ms criteo.edge5.amsterdam1.level3.net[212.72.41.226]
  •   5  141 ms  141 ms  141 ms n7k01-inet-am5-eth4-1.eu.criteo.net[178.250.7.116]
  •   6  141 ms  141 ms  141 ms static.criteo.com[178.250.2.75]

Miami CenturyLink

Tracing route to static.criteo.com [178.250.2.75] over a maximum of 30 hops:

  •   1   <1 ms   <1 ms   <1 ms 10.115.20.1
  •   2   <1 ms   <1 ms   <1 ms mia-edge-03.inet.qwest.net[63.237.255.221]
  •   3    6 ms    2 ms    3 ms nap-brdr-01.inet.qwest.net[67.14.29.102]
  •   4    1 ms   <1 ms   <1 ms mai-b1-link.telia.net[80.239.195.141]
  •   5   26 ms   26 ms   26 ms ash-bb3-link.telia.net[62.115.141.74]
  •   6  101 ms  142 ms  102 ms ldn-bb3-link.telia.net[80.91.246.69]
  •   7  110 ms  110 ms  128 ms adm-bb3-link.telia.net[213.155.136.105]
  •   8  106 ms  106 ms  106 ms adm-b2-link.telia.net[62.115.141.51]
  •   9  117 ms  121 ms  120 ms 62.115.8.190
  • 10  107 ms  107 ms  107 ms n7k02-inet-am5-eth4-1.eu.criteo.net[178.250.7.119]
  • 11  107 ms  107 ms  107 ms static.criteo.com[178.250.2.75]

SF VZN 

Tracing route to static.criteo.com [178.250.2.75] over a maximum of 30 hops:

  •   1    1 ms    1 ms    1 ms 10.117.20.1
  •   2    2 ms    1 ms    2 ms 120.gigabitethernet3-0.gw2.sjc7.alter.net[63.65.128.45]
  •   3    3 ms   13 ms   10 ms bundle-ether14.gw3.sjc7.alter.net[140.222.235.53]
  •   4    4 ms    3 ms    4 ms teliasonera-gw.customer.alter.net[152.179.48.214]
  •   5   70 ms  113 ms   69 ms ash-bb4-link.telia.net[213.155.130.212]
  •   6  259 ms  140 ms  141 ms ldn-bb2-link.telia.net[213.248.65.97]
  •   7  151 ms  151 ms  145 ms adm-bb4-link.telia.net[213.155.136.79]
  •   8  159 ms  165 ms  151 ms adm-b2-link.telia.net[62.115.141.11]
  •   9  147 ms  149 ms  144 ms 62.115.8.190
  • 10  169 ms  147 ms  143 ms 178.250.7.158
  • 11  144 ms  143 ms  143 ms static.criteo.com[178.250.2.75]

DC Cogent 

Tracing route to static.criteo.com [178.250.2.75] over a maximum of 30 hops:

  •   1   <1 ms   <1 ms   <1 ms 10.111.10.1
  •   2   <1 ms   <1 ms   <1 ms gi0-2-1-18.216.rcr21.iad01.atlas.cogentco.com[38.122.67.73]
  •   3   <1 ms   <1 ms   <1 ms be2955.rcr21.iad02.atlas.cogentco.com[154.54.30.190]
  •   4    1 ms    1 ms    2 ms be2658.ccr41.dca01.atlas.cogentco.com[154.54.47.137]
  •   5    8 ms    7 ms    7 ms be2806.ccr41.jfk02.atlas.cogentco.com[154.54.40.105]
  •   6   76 ms   76 ms   76 ms be2317.ccr41.lon13.atlas.cogentco.com[154.54.30.186]
  •   7   86 ms  107 ms   86 ms be12194.ccr41.ams03.atlas.cogentco.com[154.54.56.94]
  •   8   86 ms   86 ms   86 ms be2499.rcr21.b031955-0.ams03.atlas.cogentco.com[130.117.1.150]
  •   9   87 ms   87 ms   87 ms 149.14.34.114
  • 10   84 ms   84 ms   84 ms n7k01-inet-am5-eth4-1.eu.criteo.net[178.250.7.116]
  • 11   86 ms   86 ms   86 ms static.criteo.com[178.250.2.75]

The challenge here is not only SSL, but the combination of SSL and geographically induced latency that makes things even worse.

It’s also important to compare Hostname A with Hostname B. In this case, I compared www.google-analytics.com vs. static.criteo.com during the switch over to Full SSL. Again, it’s normal that the SSL request should take a bit longer. Obviously, Google has some advantages: massive internet presence, geo load balancing, amazing consistent performance (notice the flat line vs. the jittery blue line), anycast network, people dedicated to monitoring and an environment where performance is part of the core DNA of every employee, even the air we used to breath there contained performance ions!

Performance Criteo vs. Google

As we often said, your weakest link on a page is a third party that is not ready to handle your load or performance requirement. Switching to all SSL is a great feature from a security perspective, but at the cost of performance. Please make sure you keep an eye on your third parties when you switch to SSL.

What’s worrying me the most is what will happen when we move to HTTP 2.0, where it’s all secure. I know the benefits of HTTP/2, but I am very concerned by how all these third parties are going to impact websites when they switch.

Mehdi