Get The Best PageSpeed Score
For Your WordPress Website
With many new features and bug fixes, PHP 8.3 has shown performance improvements compared to its previous versions. If you are using any of these popular frameworks such as Laravel, Symfony, and CodeIgniter, or CMS such as WordPress, WooCommerce, Drupal, etc, you are using PHP indirectly and upgrading to the latest version of PHP 8.3.2, you can get better performance for your websites.
The latest version has many performance improvements. Here we are going to take a look at the 5 most significant benefits one will practically get after migration.
The file()
function which is used to read the entire file into an array, is now about 7% faster when checking error flags.
Caching The DOMNodeList()
method has now a built-in cache. This method is used to get all nodes matching a selection criteria. In the older versions, getting the node list’s time complexity was always n*n. With this change, only the first call will take the same time but all subsequent results will be returned using cache if the DOM remains unaltered.
Get The Best PageSpeed Score
For Your WordPress Website
Below is an example where we will get a list of all JavaScript nodes and then defer them. Deferring JavaScript including jQuery gives a faster page load time and a better PageSpeed Insights score.
<?php
//get the HTML to be sent to the browser
$htmlString = '<!html>.......</html>';
//prepare the DOM
$domDocument = new DOMDocument;
$domDocument->loadHTML($htmlString);
//get all JS nodes
$scriptNodes = $domDocument->getElementsByTagName('script');
foreach ($scriptNodes as $scriptNode) {
$scriptNode->setAttribute('defer', 'true');
}
?>
When getting the text content from nodes, additional memory allocation was happening in the older versions which are removed in PHP 8.3. The textContent
attribute of a DOMElement
or a DOMNode
returns the text content of the current node and its descendant nodes.
The below example code explains how to get the SEO title tag of an HTML page-
//get the HTML to be sent to the browser
$htmlString = '<!html>.......</html>';
//prepare the DOM
$domDocument = new DOMDocument;
$domDocument->loadHTML($htmlString);
$list = $domDocument->getElementsByTagName("title");
if ($list->length > 0) {
$title = $list->item(0)->textContent;
if (!empty($title)) {
echo $title;
}
}
?>
The DOMChildNode::remove
function now takes only a unit of time, O(1).
There was no way to directly validate a JSON string other than decoding it first and then seeing if the decode was successful or failed. The decoding was a memory-intensive operation as it has built the entire array or object structure. A new method is now available json_validate that is much lightweight to validate the data.
However, after validating a JSON syntax using the json_validate function, you would want to decode it to see the payload, it’s better to avoid calling json_validate
and directly call json_decode
.
Along with the performance boost, there are some noticeable new features added in the PHP 8.3 version.
With better syntax highlights and notices, it’s easier to see warnings in the IDE itself and catch potential bugs early in the development process. First class callable syntax, was introduced in v 8.1 and has been greatly improved in the latest PHP 8.3 version.
<?php
function sum(int|float $x, int|float $y): int|float {
return $x + $y;
}
?>
Class, interface, trait, and enum constants now support type. For example, the below code is going to give an error because of the type being changed in the child class B.
<?php
class A {
public const int CONST1 = 1;
}
class B extends A {
# expect error here becasue of datatype mismatch
public const string CONST1 = 'a';
}
class C extends A {
# expect error too here because the datatype is not specified
public const CONST1 = 0;
}
?>
With the new version, non-read-only classes can extend read-only classes. Also, the read-only properties can be reinitialized while cloning the objects. The reinitialization of each property can be done only once to the cloned object.
ldap_connect_wallet()
, and ldap_exop_sync()
functions for interacting with LDAP servers.mb_str_pad()
function to pad a multibyte stringposix_sysconf(POSIX_SC_NPROCESSORS_ONLN);
str_increment()
and str_decrement()
functionsThe opcache.consistency_checks
directive is removed completely in PHP 8.3, though it was depreciated first in version 8.1.18. This directive was used to let OPcache verify the cache checksum for every N request, where N is the value of this configuration directive. Enabling this in the production environment was causing performance issues. It’s recommended to use opcache.revalidate_freq
directives instead.
Calling get_class()
and get_parent_class()
without arguments is now deprecated. You need to pass the object or class name to operate on.
Ever since it came into existence, its popularity kept increasing in developing websites for which HTML used to be the markup language. PHP came as a “Hypertext Preprocessor” and generating HTML using the script became even easier. The first few versions were not object-oriented but got support for it later. Developers can write C or C++ extensions to add functionalities to the language.
PHP is still very popular and is used as the server-side programming language in over 76.6% of all websites where the technology is known. Around 10 years ago, this percentage was just ~40%.
There are many frameworks based on PHP, the very popular ones are – Laravel, Symfony, CodeIgniter, Zend, CakePHP, Phalcon, etc.
Laravel is the most popular MVC-based PHP framework that is currently used by approximately 650,000 websites. Laravel offers many security features out of the box and additional helpers to quickly set up the application structure. The object-relational mapper (ORM) library is available to easily exchange data with the MySQL database.
Laravel’s latest version at the time of writing this article is v10.3.2 which requires PHP version 8.1 or higher. Upgrading to the latest version can benefit from many performances.
Laravel however lacks Core Wev Vitals optimization features. This can be achieved along with CDN and caching for Laravel, Image Optimization, and lazy load JS/CSS files by using RabbitLoader.
Symfony is another open-source PHP application framework. Applications like Spotify are built on Symfony and can handle thousands of requests every second. Symfony has many rich set features available out of the box. To access data objects, Symfony has a Doctrine object-relational mapper (ORM) that takes care of query building, database abstraction, and results caching.
Codeigniter is another popular lightweight framework that is a little easier to start with. The framework has a significant user community, but its ecosystem is relatively smaller compared to other frameworks like Laravel and Symfony.
There are many content management systems built on top of PHP, like MediaWiki, WordPress, WooCommerce (a popular WordPress e-commerce plugin), Drupal, Joomla, etc.
WordPress is the most popular CMS and is being used by 62% of the total CMS users. It was created to publish blogs but being so convenient to use, it soon became the preferred choice to create several other types of websites. Many hosting services provide a one-click installation and also managed services for premium users.
The marketplace as it grew, started having thousands of plugins and themes for others to use. Installing some plugins may cause slowness also and poor performance. RabbitLoader provides an all-in-one performance optimization plugin for WordPress.
WordPress recommends using PHP version 7.4 or higher and support for the latest PHP 8.3 is included in the WordPress 6.4 version but is in the beta phase. WordPress users should limit to use of PHP versions up to 8.2.
WooCommerce is a plugin that can be installed on any WordPress site to transform it into an e-commerce application. The application is written in PHP but also uses NodeJS for development.
Drupal is another PHP-based content management system. Drupal’s modular architecture allows users to create more tailored websites and applications to their specific needs. With thousands of modules and themes available, users can extend Drupal’s core functionality to suit various requirements.
While Drupal’s market share is way less than WordPress’s, it is used by at least 14% of the top 10,000 websites worldwide. Some of the notable users are – NASA, UNICEF, VISA, etc.
Drupal’s latest release v10.2.3 was done on 7th February 2024. To migrate to this version, you would need at least PHP 8.1 or higher. Drupal 10 also recommends Composer version 2.3.6 or higher, which is required for compatibility with PHP 8.2.
Users should migrate to the latest version of PHP 8.3 to gain performance benefits. WordPress users need to wait for some time to be fully compatible with PHP 8.3
Get The Best PageSpeed Score
For Your WordPress Website