Skip to main content
FomiVIP
Service Cases

A Microsoft China Event Site: Three Languages and a CDN

A landing page for a Microsoft China online event, in English, Chinese and Japanese. The challenge was overseas access: all static assets on a CDN, images bundled per language, and the form on a separate, cache-free domain. Our slowest pre-launch test from three regions: 1.9 seconds.

July 3, 2020Event SitesMultilingualCDN

A landing page for an online event, built in three weeks. The page itself wasn't complicated: hero visual, agenda, speakers, a registration form, and downloadable materials. The tricky part was that both sides needed to read it — colleagues in China and overseas alike had to be able to open it smoothly.

All Static Assets on the CDN

Images, stylesheets and scripts — more than 30 files in all — went straight to the CDN, split into three directories by language: zh, en and ja. That wasn't about hosting translations in three places; some images contained embedded text, so each language needed its own version. The largest PNG, the hero visual, was compressed to 180K, with a webp copy alongside.

The HTML itself stayed off the CDN, because it contained things like registration status that must not be cached. On Nginx we set a 30-day cache for static assets, with content hashes in the filenames — any change gets a new name, so there's no risk of users holding stale files.

The Form Lives on Its Own Domain

The registration form posted to submit.<domain>, a domain explicitly configured on the CDN with no caching and no acceleration — requests go straight back to origin. The first version shared the main site's domain to save effort, and during testing several POSTs were blocked by edge nodes with 403s. After the split, it never happened again.

The form had 6 fields: name, company, email, job title, language, and consent to receive materials. Validation ran on both the front end and the back end; a PHP backend received submissions, wrote them to MySQL, and pushed a notification to the client's WeCom group. A failed push never blocks a successful submission — it just gets logged. That rule was deliberate: a group chat message must never hold up a registration.

Tested 30 Times Across Three Regions

The day before launch, we ran 10 first-screen tests from nodes in three regions: Beijing, Frankfurt and Singapore. We timed with curl, plus manual clicks in a browser. The slowest load was 1.9 seconds — a Singapore request for an image that missed the cache. Once cached, everything settled around 1 second.

One small glitch: on some Windows machines the Japanese site's font fell back to SimSun and looked washed out. We gave the Japanese version its own temporary font stack and left the other two untouched.

The Rework on Localized Images

We didn't do the language-directory split thoroughly in version one. The text-bearing images came in zh, en and ja sets, but we missed a few purely decorative banners that actually had a Chinese slogan baked in. The client spotted it themselves before the Japanese launch: that image still carried untranslated text. We regenerated 4 images, added language suffixes to filenames, and put a check in the build script: scan the image names in the zh directory and fail if either of the other two directories is missing one.

That check caught another miss later — an icon missing from the English site. This is where machines beat people: they never let something slide because it "looks about right."

Deciding on the Form's 6 Fields

The client originally wanted 9 fields; we cut it to 6, dropping company size, industry, and "how did you hear about us." Same reasoning as the visa form project: nobody analyzed those three after the event, so they'd just sit in a CSV. The field we kept, consent to receive materials, was a legal requirement — mandatory, unchecked by default.

The WeCom group notification originally included full phone numbers. The client asked us not to post full numbers in the group, so we switched to last-four-digits only. Changes like this never make it into the requirements doc — usually a one-sentence fix, but missing it would be embarrassing.

Those 1.9 Seconds

The slowest of all our tests, 1.9 seconds, came from a Singapore request for an uncached image. We later added cache warming for that batch of images, pushing them to edge nodes proactively the day before the event. When we built a similar site the following year, this step was written into the launch checklist, right after "check the certificates."

In that photo it was raining in Beijing; it still sits in the project group's album, and someone later used it as a weekly report cover with the caption "another year." The 4 regenerated images all ended with _ja in their filenames and are still in the repo. The build check script is only 9 lines — far lighter than the images themselves.

On the Day

Registration opened at 9 a.m. on July 3. A few of us watched the submission curve in the admin panel — 300-plus entries in the first 20 minutes. The download button got far more clicks than expected, so at noon we pushed the PDF to the CDN too. It had lived on the origin server, and the bandwidth was getting tight with so many downloads.

In the afternoon the client asked about adding a live counter of registrants. We declined, wary of touching the caching strategy again. When the event ended we exported a CSV — 900-plus rows, split into three sheets by language — and sent it over.

As we wrapped up, it was raining in Beijing. Someone posted a photo of the view from their window in the group chat.

Consulting · Free initial chat

Need advice for your scenario?

Tell us your business context and current systems, and we'll give an actionable approach.

Contact us

Mon–Fri 9:00–18:00 · We respond on business days within one business day.

WeChat (Business Only)
WeChat (Business Only)二维码

Scan and add our WeChat for consulting

Or fill out the requirements form