A revolution is currently going on in the underpinnings of the web. HTTP, the protocol your browser uses to connect to your site, has a new version: HTTP/2. This is not something that should concern the average user, but for web developers, it changes how we do performance optimization entirely. In this short article, I want to explain what performance optimization best practices you can do away with, and why.

What changed?

The most important thing you should know about the new HTTP/2 is that it no longer requires a new request for each file. This is the modification that makes our performance optimization guidelines change so drastically. In the HTTP1 / HTTP/1.1 world, it’d be faster to combine JS & CSS files and even images, so there would be fewer requests between browser and server. In the HTTP/2 world, this type of optimization is no longer needed and can even become counterproductive.

Let our SEO experts analyze and optimize your site: Get Yoast SEO Care! »

Yoast SEO Care$ 199 - Buy now » Info

Can I use this already?

The answer is, fairly simply: yes. If your site is running on HTTPS, then all major current browsers support HTTP/2. You or your hosting company might have to change your server configuration to make sure it supports HTTP/2, but that’s it. Some older browsers might not be able to use it, but your site would still work for them.

So I can use HTTP/2, but should I?

Yes, you should use HTTP/2! It’s a lot faster than old fashioned HTTP1, and when you set it up well, most of your visitors will benefit hugely.

Does HTTP/2 mean I don’t need a CDN?

Even with HTTP/2 you still need a CDN. A CDN delivers content a lot faster than your average server ever will, so your site would still benefit enormously from having one. Every proper CDN will already support HTTP/2.

Performance best practices that changed

The following performance best practices are no longer needed with HTTP/2 and should be done away with:

  • Concatenating CSS and JS files
    As reducing the number of requests is no longer an issue, there’s no reason to do this anymore.
  • Image spriting
    Image spriting is the practice of combining several small images into a larger image so as to reduce the number of requests. This is a cumbersome process with quite a bit of overhead, and HTTP/2 entirely removes the need for it.
  • Domain sharding
    Though this was slightly less common, some heavy sites used multiple CDN domains to serve their files. This because a browser could only open eight parallel connections to a server in the world of HTTP/1 and they’d want to serve more files in parallel. Because HTTP/2 removes the need for parallel connections as there can be parallel downloads within one connection, this best practice becomes counterproductive. The use of multiple CDN domains actually means multiple DNS requests, which slows the site down instead of speeding it up. (Steve Souders, the godfather of web performance, already predicted in 2013 that when HTTP/2 becomes ubiquitous, domain sharding will go away.)
  • Inlining CSS and JS
    Inlining small bits of CSS and JS is a practice that was aggressively pushed by Google. Because the CSS and JS are inline, it cannot be cached properly. As a request for a small file now has no extra overhead, we can do away with this best practice.

Google PageSpeed and HTTP/2

Unfortunately, Google’s PageSpeed tool and many other web performance testing tools are rather slow in their adoption of HTTP/2. They should be changing their guidelines. If a simple HTTP/2 test shows you that a site is capable of using HTTP/2, quite a few of the site speed suggestions are moot. Their documentation speaks of “networking round trips” that simply, in an HTTP/2 environment, don’t happen.

There are people at Google that understand this, of course. This presentation by Ilya Gregorik in 2015 already shows all of that.

Read more: ‘Site speed: tools and suggestions’ »

We’re at a turning point: 2017 is going to be the year that we’re going to see features in WordPress which require hosts to have HTTPS available. Just as JavaScript is a near necessity for smoother user experiences and more modern PHP versions are critical for performance, SSL .

SSL basically means the link between your browser and the server is encrypted. SSL used to be difficult to implement, and often expensive or slow. Modern browsers, and the incredible success of projects like Let’s Encrypt have made getting a certificate to secure your site fast, free, and something we think every host should support by default, especially in a post-Snowden era. Google also weighs SSL as a search engine ranking factor and will begin flagging unencrypted sites in Chrome.

First, early in 2017, we will only promote hosting partners that provide a SSL certificate by default in their accounts. Later we will begin to assess which features, such as API authentication, would benefit the most from SSL and make them only enabled when SSL is there.

Separately, I also think the performance improvements in PHP7 are particularly impressive, and major kudos to everyone who worked on that. We will consider whether hosts use PHP7 by default for new accounts next year as well.

 

At WordCamp Milano, I gave a talk with the enticing title Why every developer should read Plato. The short answer to that question: to learn Socratic thinking. In this post, I will share some of my personal journeys as a philosopher in software development. In doing so, I will also introduce a few philosophical concepts that might help you level up your skills as a developer.

Why I chose philosophy

I never viewed myself as a technical person. As soon as I graduated from high school, I started studying Dutch language and literature. After one year I switched to Philosophy. I wanted to get to the bottom of things. Any “working” theory about something just wasn’t good enough for me. I wasn’t so much interested in actually arriving at conclusions and applying them somehow. Instead, I wanted to spend my time discovering more fundamental principles and truths that lay behind this big pile of “knowledge” they were throwing at us at the university.

Rationalism

When I say I want to spend my time discovering more fundamental principles, I am already taking a Platonic stance. Let’s start with noticing how discovery implies there’s already something in place to be discovered. It implies there is some objective or universal truth that exists independent of us. Any knowledge of it should, therefore, be present in us before our awareness or perception of it. We call this a priori knowledge.

We can use mathematical examples to demonstrate this. Given certain mathematical axioms, we know that the outcome of 1 + 6 is 7. Looking for another outcome of this equation in the wild would be somewhat pointless. By the nature of numbers and of addition as it is known to us, we know 1 + 6 = 7. We might investigate why or how this is the case. We might come up with mathematical proof to support this knowledge. But it makes little to no sense to look for possible falsifying evidence against this outcome.

Optimize your site for search & social media and keep it optimized with Yoast SEO Premium »

Yoast SEO for WordPress pluginBuy now » Info

Plato

Plato (together with Socrates and Aristotle) is considered to be the father of western philosophy. He is most famous for his writings about Socrates and his theory of forms. In his theory of forms, Plato assumes the existence of a realm of abstract forms, which contain the essential truth of all we see in the world around us. It is another way of saying we understand the world around us through abstractions.

For Plato, abstractions are more real than the things themselves. It’s true because the things themselves change through time, while their abstract forms are eternal. The abstract form of a chair as an object devised for sitting doesn’t lose its meaning while an actual chair burns in a fire. The important thing to remember here is that when inquiring anything in the world around us, we should focus on the abstractions, not the concretions.

Socrates

Socrates is the main character in Plato’s writing and one of the greatest philosophers who has ever lived. He is a master of inquiry by constantly acting as a midwife, helping to give birth to the ideas of his counterparts through dialogue and asking questions. You could say that Socrates quality is that he has mastered the art of asking questions. What makes him so good?

Socratic irony

Socrates’ success comes from his irony. He starts with a very straightforward and elegant assumption; I know that I know nothing. From this assumption, he automatically takes the seat of the student and puts his counterparts in the role of the teacher. He can neither accept nor reject any knowledge conveyed by his teachers as the truth because Socrates knows nothing! Thus, the only thing Socrates can do is inquire further into the thought of his counterparts.

Anamnesis

The discovery of truth is called anamnesis. How does this work if it’s not possible to know anything? According to Plato, we can access the abstract forms through our mind. However, we cannot own them. Here’s where Socrates comes in. Our own understanding of the truth can never be entirely true. We can always replace our conscious understanding of the truth with a “truer” version, but we can’t replace it with the truth itself.

The moment in which we realize a previously held understanding to be false is then the real discovery. In light of the truth and through Socratic inquiry of our thought process, we discover our beliefs to be false. We call this anamnesis. We can now replace our old understanding with a better, more fine-grained understanding or we remain without one.

Software development

The Socratic inquiry is a highly useful practice to use in software development, especially in architecting software and debugging. I was able to experience that myself for the first time in 2012 when I joined Innovation Factory for a web development internship. I had no prior knowledge of software development but was able to add value from the start by simply asking questions to my seniors.

In the beginning, I felt a bit ashamed for asking my colleague’s many questions. To me, it seemed like I was taking valuable time from my seniors. Like Socrates, I didn’t even know if what they explained to me made any sense at all since I was still such a blank page. But every time I asked another innocent question, my seniors responded enthusiastically. They were amazed by the fact that they also didn’t know how to explain the things they took for granted every day. It became a great learning experience for the both of us.

Pragmatic inquiry

As software developers, we are pragmatic. We fix things, we deliver. We do magic, but we need a use case to do it. Things need to be useful; otherwise, they become wasteful. How do we make sure Socratic inquiry remains useful? Yes, we do want better solutions by discovering better abstractions, but we don’t want to end up without a solution, and we definitely don’t want to get stuck in endless inquiry!

Well, aren’t we lucky? As developers, we always have a concrete problem to solve under real conditions. There are the programming languages, the frameworks and the tooling surrounding our applications. There’s the user story or the bug report, and finally, there’s a deadline or a velocity that we have committed to. These are the conditions within which we do our work. As long as we meet those conditions, we are free to inquire!

So, read Plato!

I hope I’ve convinced you now of the value of Socratic inquiry. If you want to learn more, why not learn from the master himself? Plato has written dozens of dialogues in which Socrates is the key figure. Even if you are not a philosopher, these dialogues are still lots of fun to read! They are often stories about five guys sitting in a bar discussing the meaning of beauty, justice, good and evil.

If you don’t want to learn from a book, you can learn in practice. Start pair programming! If there’s one practice in our craft today where you can learn Socratic inquiry, it’s pair programming. As a navigator, try to be ignorant. Simply ask the driver to explain why he is doing the things he’s doing. You’ll be surprised how much better the code will turn out to be!


Read more: ‘Documenting JavaScript in WordPress’ »

The second release candidate for WordPress 4.6 is now available.

We’ve made over 30 changes since the first release candidate. RC means we think we’re done, but with millions of users and thousands of plugins and themes, it’s possible we’ve missed something. We hope to ship WordPress 4.6 on Tuesday, August 16, but we need your help to get there.

If you haven’t tested 4.6 yet, now is the time!

Think you’ve found a bug? Please post to the Alpha/Beta support forum. If any known issues come up, you’ll be able to find them here.

To test WordPress 4.6, you can use the WordPress Beta Tester plugin or you can download the release candidate here (zip).

For more information about what’s new in version 4.6, check out the Beta 1, Beta 2, Beta 3, Beta 4, and RC 1 blog posts.

A few changes of note since the first release candidate:

  • Support for custom HTTP methods and proxy authentication has been restored.
  • Various fixes for the streamlined updates, including better failure messages and error handling, basic back-compat styling for custom update notifications, and additional and standardized JavaScript events.
  • Unnecessary reference parameters have been removed from new multisite functions.
  • A compatibility issue with PHP 7.0.9 (and PHP 7.1) has been fixed.

Developers, please test your plugins and themes against WordPress 4.6 and update your plugin’s Tested up to version in the readme to 4.6. If you find compatibility problems please be sure to post to the support forums so we can figure those out before the final release – we never want to break things.

Be sure to read the in-depth field guide, a post with all the developer-focused changes that take place under the hood.

Translators, strings are now frozen, including the About Page, so you are clear to translate! Help us translate WordPress into more than 100 languages!

Happy testing!

The verdict is in,
Can I haz all the features,
Your best WordPress yet.

?️‍?

The release candidate for WordPress 4.6 is now available.

We’ve made a few refinements since releasing Beta 4 a week ago. RC means we think we’re done, but with millions of users and thousands of plugins and themes, it’s possible we’ve missed something. We hope to ship WordPress 4.6 on Tuesday, August 16, but we need your help to get there.

If you haven’t tested 4.6 yet, now is the time!

Think you’ve found a bug? Please post to the Alpha/Beta support forum. If any known issues come up, you’ll be able to find them here.

To test WordPress 4.6, you can use the WordPress Beta Tester plugin or you can download the release candidate here (zip).

For more information about what’s new in version 4.6, check out the Beta 1Beta 2, Beta 3, and Beta 4 blog posts.

Developers, please test your plugins and themes against WordPress 4.6 and update your plugin’s Tested up to version in the readme to 4.6. If you find compatibility problems please be sure to post to the support forums so we can figure those out before the final release – we never want to break things.

Be sure to read the in-depth field guide, a post with all the developer-focused changes that take place under the hood.

Do you speak a language other than English? Help us translate WordPress into more than 100 languages!

Happy testing!

Der Sommer ist da,
Zeit für ein neues Release.
Bald ist es soweit.

WordPress 4.6 Beta 4 is now available!

This software is still in development, so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.6, try the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”). Or you can download the beta here (zip).

For more information on what’s new in 4.6, check out the Beta 1, Beta 2, and Beta 3 blog posts, along with in-depth field guides. This is the final planned beta of WordPress 4.6, with a release candidate scheduled for next week.

Some of the fixes in Beta 4 include:

  • Media: alt attributes are now always added to images inserted from URLs (#36735).
  • Object subtype handling has been removed from register_meta(). Details about this change are explained in a post for developers.
  • Resource hints are now limited to enqueued assets (#37385).
  • A regression with query alterations introduced by the new WP_Term_Query has been fixed (#37378).
  • The Ajax searches for installed and new plugins have been enhanced to fix several accessibility issues and to improve compatibility with older browsers. (#37233, #37373)
  • The media player MediaElement.js has been updated to 2.22.0 to fix YouTube video embeds (#37363).
  • The Import screen was overhauled, improving accessibility and making it much easier to install and run an importer (#35191).
  • Emoji support has been updated to include all of the latest Unicode 9 emoji characters (#37361). ???????
  • Various bug fixes. We’ve made more than 60 changes during the last week.

Do you speak a language other than English? Help us translate WordPress into more than 100 languages!

If you think you’ve found a bug, you can post to the Alpha/Beta area in the support forums. Or, if you’re comfortable writing a bug report, file one on the WordPress Trac. There, you can also find a list of known bugs and everything we’ve fixed.

Happy testing!

This is Beta 4,
The last before RC 1.
Please test all the things.

WordPress 4.6 Beta 3 is now available!

This software is still in development, so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.6, try the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”). Or you can download the beta here (zip).

For more information on what’s new in 4.6, check out the Beta 1 and Beta 2 blog posts, along with in-depth field guides on make/core. Some of the fixes in Beta 3 include:

  • Revisions: Autosaves can now be restored when revisions are disabled (#36262).
  • An improved handling of PHP’s memory limit which doesn’t lower the limit anymore (#32075).
  • TinyMCE has been updated to 4.4.0 (#37327).
  • HTTP API: Proxy settings weren’t honored by the new HTTP library. This has been fixed (#37107).
  • Improved handling of UTF-8 address headers for emails (#21659).
  • Various bug fixes. We’ve made more than 65 changes during the last week.

Do you speak a language other than English? Help us translate WordPress into more than 100 languages!

If you think you’ve found a bug, you can post to the Alpha/Beta area in the support forums. Or, if you’re comfortable writing a bug report, file one on the WordPress Trac. There, you can also find a list of known bugs and everything we’ve fixed.

Happy testing!

Beta 3 is here,
The more testing, the better.
Gotta catch ‘em all!

WordPress 4.6 Beta 2 is now available!

This software is still in development, so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.6, try the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”). Or you can download the beta here (zip).

Notable changes since WordPress 4.6 Beta 1:

  • Meta: The fallback authentication for the previous registration method has been restored. Also, retrieving registered metadata now works and non-core object types are no longer forcibly blocked. See #35658.
  • REST API: The order of setting sanitization and validation has been reversed; validation now occurs prior to sanitization. Previously, the sanitization callback ran before the validation callback. See #37192.
  • Customize: The order of setting sanitization and validation has been reversed; validation now occurs prior to sanitization. See #37247.
  • HTTP API: WP_Http::request() returns an array again. See #37097.
  • Various bug fixes. We’ve made just over 50 changes in the last week.

For more of what’s new in version 4.6, check out the Beta 1 blog post.

Do you speak a language other than English? Help us translate WordPress into more than 100 languages!

If you think you’ve found a bug, you can post to the Alpha/Beta area in the support forums. Or, if you’re comfortable writing a bug report, file one on the WordPress Trac. There, you can also find a list of known bugs and everything we’ve fixed.

Happy testing!

Teenage Beta 2
Thirteen years of pressing words
Rejoice with testing!

WordPress 4.6 Beta 1 is now available!

This software is still in development, so we don’t recommend you run it on a production site. Consider setting up a test site just to play with the new version. To test WordPress 4.6, try the WordPress Beta Tester plugin (you’ll want “bleeding edge nightlies”). Or you can download the beta here (zip).

WordPress 4.6 is slated for release on August 16, but to get there, we need your help testing what we have been working on, including:

  • Shiny Updates v2 ([37714]) – Shiny Updates replaces progress updates with a simpler and more straight forward experience when installing, updating, and deleting plugins and themes.
  • Native Fonts in the Admin (#31195) – Experience faster load times, especially when working offline, a removal of a third-party dependency, and a more native-feeling experience as the lines between the mobile web and native applications continue to blur.
  • Editor Improvements – A more reliable recovery mode (#37025) and detection of broken URLs while you type them (#36638).

There have been changes for developers to explore as well:

  • Resource Hints (#34292) – Allow browsers to prefetch specific pages, render them in the background, perform DNS lookups, or to begin the connection handshake (DNS, TCP, TLS) in the background.
  • New WP_Site_Query (#35791) and WP_Network_Query (#32504) classes to query sites and networks with lazy loading for details.
  • Requests (#33055) – A new PHP library for HTTP requests that supports parallel requests and more.
  • WP_Term_Query (#35381) is modeled on existing query classes and provides a more consistent structure for generating term queries.
  • Language Packs (#34114#34213) – Translations managed through translate.wordpress.org now have a higher priority and are loaded just-in-time.
  • WP_Post_Type (#36217) provides easier access to post type objects and their underlying properties.
  • The Widgets API (#28216) was enhanced to support registering pre-instantiated widgets.
  • Index definitions are now normalized by dbDelta() ([37583]).
  • Comments can now be stored in a persistent object cache (#36906).
  • External Libraries were updated to the latest versions – Masonry to 3.3.2 and imagesLoaded to 3.2.0 (#32802), MediaElement.js to 2.21.2 (#36759), and TinyMCE to 4.3.13 (#37225).
  • REST API responses now include an auto-discovery header (#35580) and a refreshed nonce when responding to an authenticated response (#35662).
  • Expanded Meta Registration API via register_meta() (#35658).

If you want a more in-depth view of what major changes have made it into 4.6, check out posts tagged with 4.6 on the main development blog, or look at a list of everything that’s changed.

If you think you’ve found a bug, you can post to the Alpha/Beta area in the support forums. We’d love to hear from you! If you’re comfortable writing a reproducible bug report, file one on the WordPress Trac. There, you can also find a list of known bugs.

Happy testing!

More Shiny Updates
In 4.6 Beta 1.
And Font Natively.

The second release candidate for WordPress 4.5 is now available.

We’ve made 91 changes since the first release candidate. RC means we think we’re done, but with millions of users and thousands of plugins and themes, it’s possible we’ve missed something. We hope to ship WordPress 4.5 on Tuesday, April 12, but we need your help to get there.

If you haven’t tested 4.5 yet, now is the time!

Think you’ve found a bug? Please post to the Alpha/Beta support forum. If any known issues come up, you’ll be able to find them here.

To test WordPress 4.5, you can use the WordPress Beta Tester plugin or you can download the release candidate here (zip).

For more information about what’s new in version 4.5, check out the Beta 1Beta 2, Beta 3, and Beta 4 blog posts.

Developers, please test your plugins and themes against WordPress 4.5 and update your plugin’s Tested up to version in the readme to 4.5. If you find compatibility problems, we never want to break things, so please be sure to post to the support forums so we can figure those out before the final release.

Polyglots, strings are now hard frozen, including the About Page, so you are clear to translate!

A few changes of note since the first release candidate:

  • Normalized non-slashing of data in the REST API infrastructure. If you use the REST API infrastructure, check out the post on this change.
  • Customizer settings for widget instances get registered a bit later to give a chance for the widget instances themselves to be registered first. See #36431 for details.
  • Fixed various cropping issues in the Custom Logo feature and Twenty Fifteen / Twenty Sixteen themes.

Be sure to follow along the core development blog, where you can find the Field Guide for 4.5.

It’s great fun to test
Enjoyment in another
Release Candidate