Блог

Новини и полезни съвети за Вашите услуги и уебсайтове!

Блог

Новини и полезни съвети за Вашите услуги и уебсайтове!

PHP 8.0 с JIT компилатор и много подобрения

Най-новата основна версия на PHP 8.0 се поддържа на всички сървъри при СуперХостинг.БГ.

Версия 8.0 е основна версия на PHP езика. PHP е скриптовият език, на който е написан WordPress (най-известната CMS платформа). 

Основните версии на PHP са малко по-интересни от минорните, защото в тях се добавят големи и дългоочаквани новости, правят се съществени подобрения и се премахват deprecated (остарели) функции.

Така например в предишната основна версия на PHP 7.0 беше обновен PHP двигателят Zend Engine с нова и по-бърза версия 3. Това беше стратегическа новост, която отвори възможности за следващи подобрения по езика.

Сега в PHP 8.0 можем да видим една голяма добавка, която също можем да приемем за стратегическа новост – JIT (Just In Time) компилатор. Освен него, в новата версия има много подобрения по езика, производителността и сигурността му.

JIT компилатор

PHP е скриптов език, който се интерпретира. Това означава, че за да „работи“ PHP приложението, изходният код се „превежда“ от PHP интерпретатора (Zend VM) до байткод, а след това – до четим от процесора машинен код.

Това превръщане на PHP кода до машинен код се извършва от PHP интерпретатора при всяко изпълнение на даден скрипт. За разлика от програмните езици като C например, при които кодът на приложението е предварително компилиран до изпълним файл, съдържащ машинен код, например Windows .exe файловете.

Just In Time („точно навреме“) компилаторът превежда междинния (байткод) до машинен код. JIT е имплементиран като част от OPCache. За да може да се използва JIT, е нужно OPCache да е активиран. Машинният код се кешира от OPCache и може директно да се подава и изпълнява от процесора. Това изключва нуждата от предварителната интерпретация на кода от PHP интерпретатора и се отразява в подобрена скорост на  изчислителните задачи. Това подобрение ще се отрази на всякакви функции, които извършват изчислителни задачи.

Голямото ускорение в изпълнението на кода е страхотно от гледна точка на производителността на PHP. Но има едно НО. В масовите уеб приложения като WordPress много малка част от кода се използва за изчисления. Скриптовете на тези приложения предимно се занимават не с изчислителни, а с входно/изходни задачи (IO) – обработка на HTTP заявки, изчакване на отговор от базата данни, четене от други файлове и други. Поради това към момента ползите от JIT в масовите уеб приложения няма да са силно осезаеми. Което означава, че няма да видим ускорено зареждане на уебсайтовете само заради JIT.

Относителното подобрение от JIT в производителността на PHP 8.0.
Относителното подобрение от JIT в производителността на PHP 8.0 (php.net).

От тестовете на производителността на PHP 8.0 се установява, че за обичайните уеб приложения, тя е еднаква с тази с PHP 7.4.

Примерно ускорение от JIT при изчислителни функции може да се види в следното клипче на Зеев Сураски (Zeev+Andi=Zend): https://youtu.be/dWH65pmnsrI 

Въпреки че за момента JIT няма да облагодетелства осезаемо уеб приложенията като WordPress, той може да се приеме за стратегическата новост в езика. С нея се отварят възможности пред PHP, например за използването му в области, в които се изискват комплексни изчисления като машинното самообучение и големите данни. 

Именувани аргументи

В PHP 8 аргументите на функциите могат да се подават, като се именува на кой аргумент каква стойност се подава.

Така може да се пропускат незадължителни параметри и да се прескача редът на подаване на параметрите.

Пример

Преди:

htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

Сега:

htmlspecialchars($string, double_encode: false);

В случая във втората функция са подадени първият и четвъртият параметър, като са пропуснати двата параметъра по средата: $flags и $encoding.

Извикването на параметър по име позволява те да не се подават в реда, в който са дефинирани.

И още

Атрибути

Вместо досегашните анотации с PHPDoc, сега атрибутите може да се използват в кода за съхранение и използване на структурирани данни.

Атрибутите се прилагат към класове, методи на класове, функции, параметри и константи.

Данните, записани като атрибут, могат да се четат runtime с Reflection API-то на PHP.

Constructor property promotion

В новото PHP е направено улеснение, с което се пише по-малко код за дефиниране на property-тата на класа. Те могат да се декларират само един път в конструктора на класа:

Пример:

class Point {
  public function __construct(
    public float $x = 0.0,
    public float $y = 0.0,
    public float $z = 0.0,
  ) {}
}

Това улеснение цели програмистите да пишат по-малко код и да инициализират своите променливо по-лесно.

Nullsafe operator

В PHP 7 бе въведен nullsafe оператор с улеснен синтаксис за управление на null стойностите.

Пример:

$а = $array['data']??'';

Този съкратен запис е удобен при ситуации, когато дадена променлива не е дефинирана или стойността ѝ е null.

В PHP 8 тази възможност е добавена и за характеристиките на даден клас.

Пример:

$country = $session?->user?->getAddress()?->country;

Този синтаксис спестява доста проверки с if, улеснява писането на код и цели да минимизира грешките при работа на приложението.

WordPress и PHP 8

Въпреки че ядрото на WordPress от версия 5.6 е съвместимо с новата версия на PHP 8.0, това все още не може да се каже за всички съществуващи плъгини и теми.

Ако в сайта си използвате тема или плъгини, които не са обявили изрично, че поддържат PHP 8.0, тогава не е препоръчително да го активирате. 

Експерименти със сайта можете да правите на отделно негово копие (тестово копие). Ако решите да опитате с новата версия на PHP, нека е на тестовото копие.

Абонирайте се за СуперБлога, за да научавате първи най-важното и полезното от света на уеб, касаещо Вашия сайт и дигитално развитие.

Мадлена Методиева
Мадлена Методиева
Меган е една от нашите super-support-гурута. СуперСилите ѝ се крият в таланта ѝ да разказва за технически „неща“ по разбираем и достъпен начин.
5 1 vote
.
Абониране
Уведоми ме при
guest
0 Коментара
Inline Feedbacks
View all comments