Analysis

Performance testing images from a customer perspective

Recently we moved Net-A-Porter to use a dynamic product image service created by our Product Management team. Not only will it allow us to improve our customer experience but it will decrease the time to get products to market.

MRP (Mr Porter) and TON (The Outnet) had already implemented the system but at NAP (Net-A-Porter) we were waiting for a few additional features, and also see how it handled the other brands.

Previously NAP had all of the image assets mounted to the web servers with a CDN sat in front, allowing for them to be served extremely quickly. We wanted to make sure that the service creating and storing the images for us wouldn’t degrade performance for our customers.

We wanted to be able to collect performance metrics to compare NAP image performance to the other brands. I created a simple tool to test different image requests in bulk and collect the average response time.

Continue reading

Conferences

Adventures in San Francisco – part four, Google I/O 2016

After my previous visits to Sauce Labs, Google and Keen.io, it was finally time for the main event. I was lucky enough to get tickets for Google I/O through some of the Polymer work we had done over the last year. As I mentioned in part one I have never been to San Francisco before, so I didn’t have a previous I/O to compare it to. However, I know they changed up the format this year, giving it a more “festival” vibe — I assume to differentiate it from other conferences and be more “Google”.

I’m going to cover the bad, the good, the highlights, and the things I learned.

Continue reading

Javascript

Profile-Driven Development

Now, don’t worry. I’m not here to force a new programming methodology upon you. Instead I want to highlight how profiling can, and I think should, be an important part of your development process, and how it can help improve code quality.

A few months ago, we (the tech team for Net-A-Porter.com) were getting ready to launch our newest application – a new webapp to serve all of our product pages. But during load testing, we noticed very high levels of CPU activity on the server.

Continue reading

Performance

Why a killer Google PageSpeed score isn’t the end of your optimisation challenge

We don’t like testing the patience of our customers. So, like most e-commerce businesses, the technical performance of our site matters.

Measuring performance has become a core part of our development process. But occasionally it feels we focus too much on one specific metric; our Google PageSpeed score.

Continue reading

Performance

Maximising Cache Hit Rates for REST APIs

Lovell previously mentioned improved cache time relevancy in his post about how we scaled the NET-A-PORTER website. My team is responsible for the product API used during the sale and currently being adopted by other applications across the organisation. I thought I’d reveal a few techniques we’ve used to maximise our cache hit rate.

Continue reading

Open Source

Asynchronous web services with PSGI and IO::Async

Some of our internal web applications are low-traffic enough that a
preforking server can handle them without difficulty. Some others, on
the other hand, can really benefit from a non-blocking implementation,
so that each server process can serve multiple requests “at the same
time”, by working on a request while waiting for other services to
return data for other requests.

Up to now all our non-blocking web services were written for the JVM,
usually with the Akka framework, but I wanted to see how hard would it
be to build something similar in Perl.

Turns out, it’s not very hard at all, if you use the right libraries
and pay attention at a few tricks.

Continue reading

JSON

SBJson4: Don’t make me wait! (… for my content)

Last week, I went to give a talk about SBJson (an Objective-C library
for JSON parsing and writing) to the
London iOS Developer Group. They
meet on the first Wednesday of every month at the Regent Street Apple
store for technical talks, followed usually by a social event at a
nearby pub. In my talk, I tried to explain why I think SBJson is still
relevant—even after Apple added native JSON support to iOS 5
in 2011.

Continue reading