Forwarded from Joomla Feed (Sergey Tolkachyov)
Производительность Joomla на PHP 8.3 достигла показателя в 341 RPS, показав прирост в 30%
Агентство Kinsta 2 января 2024 года обновило данные бенчмарк-тестов популярных CMS и PHP фреймворков. При выборе движков для теста учитываются популярность, примерное количество живых сайтов, доля рынка, тенденции использования, доля в поиске (США).
Участники соревнования
На беговой дорожке рядом оказались:
👩💻 WordPress
👩💻 WooCommerce
👩💻 Laravel
👩💻 Drupal
👩💻 Joomla
👩💻 Symfony
- CodeIgniter
- Craft CMS
- OpenCart
- Statamic
- Typo3
⚠️ Все CMS и фреймворки тестировались на дефолтных настройках. Во всех подобных тестах нужно учитывать, что "тяжесть" формирования дефолтной страницы у всех движков разная: разное количество запросов в базу данных (обычно слабое место в быстродействии сайтов), разное количество различных проверок и т.д. Например в Joomla по умолчанию главная страница - это избранные материалы. Из базы данных идёт выборка материалов со статусом
Все движки тестировались на версиях PHP 8.1, 8.2 и 8.3. Так же некоторые на 7.4.
Также для нагрузочных тестов важен показатель RPS - requests per second. Этот показатель означает запрос к Приложению на генерацию данных без учета разного рода кэша.
🔥 Результаты тестов производительности
👩💻 Joomla
Joomla показала следующие результаты.
Тестируемая версия Joomla: 4.3.3
Тестируемый URL: главная страница
Размер страницы: 8,111,000 байт
Результаты:
- PHP 8.1: 274 req/s
- PHP 8.2: 265 req/s.
- PHP 8.3: 341 req/s.
Таким образом Joomla "из коробки" на PHP 8.3 показала прирост производительности около 30%.
Другие движки
👩💻 Wordpress
Тестировались версии Wordpress 6.4.2 и 6.2.2. Возьмём данные по последней версии, в целом они примерно одинаковые.
Тестируемая версия Wordpress: 6.4.2
Тестируемый URL: главная страница
Размер страницы: 84,257,000 байт
Результаты:
- PHP 7.4: 149 res/s.
- PHP 8.1: 153 req/s.
- PHP 8.2: 158 req/s.
- PHP 8.3: 169 req/s.
👩💻 Laravel
Это PHP-фреймворк, на котором обычно пишут "серьёзные" проекты.
Тестируемая версия Laravel: 10.16.1
Тестируемый URL: главная страница
Размер страницы: 27,514,000 байт
Результаты:
- PHP 8.1: 611 req/s.
- PHP 8.2: 670 req/s.
- PHP 8.3: 925 req/s.
👩💻 Drupal
Тестируемая версия Drupal: 10.11
Тестируемый URL: главная страница
Размер страницы: 19,102,000 байт
Результаты:
- PHP 8.1: 922 req/s.
- PHP 8.2: 941 req/s.
- PHP 8.3: 1432 req/s.
👩💻 Symfony
Также PHP-фреймворк, используемый для бэкенда сайтов и приложений.
Тестируемая версия Symfony: 6.3.0
Тестируемый URL: главная страница
Размер страницы: 559,000 байт
Результаты:
- PHP 8.1: 931 req/s.
- PHP 8.2: 997 req/s.
- PHP 8.3: 1182 req/s.
OpenCart
Специализированный движок для создания интернет-магазинов.
Тестируемая версия OpenCart: 4.0.2.2
Тестируемый URL: главная страница
Размер страницы: 33,014,000 байт
Результаты:
- PHP 8.1: 151 req/s.
- PHP 8.2: 154 req/s.
- PHP 8.3: 164 req/s.
Подробнее
Агентство Kinsta 2 января 2024 года обновило данные бенчмарк-тестов популярных CMS и PHP фреймворков. При выборе движков для теста учитываются популярность, примерное количество живых сайтов, доля рынка, тенденции использования, доля в поиске (США).
Участники соревнования
На беговой дорожке рядом оказались:
👩💻 Symfony
- CodeIgniter
- Craft CMS
- OpenCart
- Statamic
- Typo3
⚠️ Все CMS и фреймворки тестировались на дефолтных настройках. Во всех подобных тестах нужно учитывать, что "тяжесть" формирования дефолтной страницы у всех движков разная: разное количество запросов в базу данных (обычно слабое место в быстродействии сайтов), разное количество различных проверок и т.д. Например в Joomla по умолчанию главная страница - это избранные материалы. Из базы данных идёт выборка материалов со статусом
избранные, происходит проверка прав доступа к материалам, а так же на странице несколько модулей со своими настройками прав доступа, времени начала и окончания публикации и т.д. С виду одинаковая страница на разных движках под капотом означает разное количество работы. Даже смена типа главной страницы на компонент "пустая страница", где нет выборки из бд, проверки прав пользователя и рендера компонента даёт прирост скорости формирования страницы.Все движки тестировались на версиях PHP 8.1, 8.2 и 8.3. Так же некоторые на 7.4.
Также для нагрузочных тестов важен показатель RPS - requests per second. Этот показатель означает запрос к Приложению на генерацию данных без учета разного рода кэша.
🔥 Результаты тестов производительности
Joomla показала следующие результаты.
Тестируемая версия Joomla: 4.3.3
Тестируемый URL: главная страница
Размер страницы: 8,111,000 байт
Результаты:
- PHP 8.1: 274 req/s
- PHP 8.2: 265 req/s.
- PHP 8.3: 341 req/s.
Таким образом Joomla "из коробки" на PHP 8.3 показала прирост производительности около 30%.
Другие движки
Тестировались версии Wordpress 6.4.2 и 6.2.2. Возьмём данные по последней версии, в целом они примерно одинаковые.
Тестируемая версия Wordpress: 6.4.2
Тестируемый URL: главная страница
Размер страницы: 84,257,000 байт
Результаты:
- PHP 7.4: 149 res/s.
- PHP 8.1: 153 req/s.
- PHP 8.2: 158 req/s.
- PHP 8.3: 169 req/s.
Это PHP-фреймворк, на котором обычно пишут "серьёзные" проекты.
Тестируемая версия Laravel: 10.16.1
Тестируемый URL: главная страница
Размер страницы: 27,514,000 байт
Результаты:
- PHP 8.1: 611 req/s.
- PHP 8.2: 670 req/s.
- PHP 8.3: 925 req/s.
Тестируемая версия Drupal: 10.11
Тестируемый URL: главная страница
Размер страницы: 19,102,000 байт
Результаты:
- PHP 8.1: 922 req/s.
- PHP 8.2: 941 req/s.
- PHP 8.3: 1432 req/s.
Также PHP-фреймворк, используемый для бэкенда сайтов и приложений.
Тестируемая версия Symfony: 6.3.0
Тестируемый URL: главная страница
Размер страницы: 559,000 байт
Результаты:
- PHP 8.1: 931 req/s.
- PHP 8.2: 997 req/s.
- PHP 8.3: 1182 req/s.
OpenCart
Специализированный движок для создания интернет-магазинов.
Тестируемая версия OpenCart: 4.0.2.2
Тестируемый URL: главная страница
Размер страницы: 33,014,000 байт
Результаты:
- PHP 8.1: 151 req/s.
- PHP 8.2: 154 req/s.
- PHP 8.3: 164 req/s.
Подробнее
Please open Telegram to view this post
VIEW IN TELEGRAM
Kinsta®
PHP 8.5 benchmarks: The state of PHP performance across major CMSs and frameworks
An in-depth look at performance benchmarks for various PHP CMS & frameworks to see how different PHP 8.5 stacks up against 8.4, 8.3 and 8.2.
👍34🤨15👎4🔥4🤔4🤮2
Forwarded from OpenNews (HK-47)
Рейтинг языков программирования TIOBE за январь 2024 года
Компания TIOBE Software опубликовала январский рейтинг популярности языков программирования, в котором по сравнению с январём 2023 года выделяется перемещение языка JavaScript с седьмого на шестое место, языка PHP с 10 на 7 место, Scratch с 20 на 10 место (рост популярности на 0.83%) , Go - c 12 на 11, Fortran - с 27 на 12 (+0.64%), Object Pascal - c 17 на 13, MathLab - с 15 на 14, Kotlin - с 25 на 17 и Cobol - с 31 на 20. Языком года назван C#, который сохранил 5 место, но стал лидером по росту популярности (+1.43%).
Компания TIOBE Software опубликовала январский рейтинг популярности языков программирования, в котором по сравнению с январём 2023 года выделяется перемещение языка JavaScript с седьмого на шестое место, языка PHP с 10 на 7 место, Scratch с 20 на 10 место (рост популярности на 0.83%) , Go - c 12 на 11, Fortran - с 27 на 12 (+0.64%), Object Pascal - c 17 на 13, MathLab - с 15 на 14, Kotlin - с 25 на 17 и Cobol - с 31 на 20. Языком года назван C#, который сохранил 5 место, но стал лидером по росту популярности (+1.43%).
👍20🤔2
Антон Морев показал как он работает на 7 мониторах - я был впечатлён 🤯
Говорит обычно у него с десяток запущенных PhpStorm, пару сотен вкладок в браузере, множество docker контейнеров, больше всего не любит перезагружать комьютер - перезагрузка отнимает много времени.
2 видеокарты, 96 Гб оперативки, 5,5 Тб SSD, чтобы не разбирать хлам файлов просто докупает новые SSD по терабайту - моё почтение!
https://youtu.be/z8pnoBh9o9s?si=RA5g--7htjT1oNQt
Говорит обычно у него с десяток запущенных PhpStorm, пару сотен вкладок в браузере, множество docker контейнеров, больше всего не любит перезагружать комьютер - перезагрузка отнимает много времени.
2 видеокарты, 96 Гб оперативки, 5,5 Тб SSD, чтобы не разбирать хлам файлов просто докупает новые SSD по терабайту - моё почтение!
https://youtu.be/z8pnoBh9o9s?si=RA5g--7htjT1oNQt
YouTube
7 мониторов - отличное решение для программиста
Решил поделиться тем, как устроена "мониторная" часть моего рабочего места. Я давно работаю на 6 мониторах и, недавно добавился седьмой. Уже есть мысли куда поставить восьмой, но об этом когда-набудь потом:)
В ролике поделился своим путем к 7 мониторам …
В ролике поделился своим путем к 7 мониторам …
🤯49💩36🤪9👍5🤡5😁3❤2🤔1🤮1🥱1🥴1
Тейлор и Ко. возобновляют Laravel Worldwide Meetup (online). Ближайшая встреча 30 января 2024: https://meetup.laravel.com
Laravel
Laravel Worldwide Meetup
Join the official Laravel meetup in the cloud. Learn from familiar faces and new speakers while chatting with fellow Laravel devs.
👍17💩3🤡2👎1
Шаблонизатор Twig 2.0 официально прекратил своё развитие - переходим на Twig 3.0!
Twig 2.0 был выпущен в январе 2017 года, а Twig 3.0 - в ноябре 2019 года - можно считать что Twig 3.0 уже достаточно заматерел.
Symfony 7.0 не будет поддерживать Twig 2.
Что было удалено в ветке 3.0 по сравнению с 2.0: https://twig.symfony.com/doc/2.x/deprecated.html
Twig 2.0 был выпущен в январе 2017 года, а Twig 3.0 - в ноябре 2019 года - можно считать что Twig 3.0 уже достаточно заматерел.
Symfony 7.0 не будет поддерживать Twig 2.
Что было удалено в ветке 3.0 по сравнению с 2.0: https://twig.symfony.com/doc/2.x/deprecated.html
Symfony
Deprecated Features - Documentation - Twig PHP
Twig - The flexible, fast, and secure template engine for PHP
👍11🤡2😱1
Forwarded from Haiku
GPT от Николая Самохвалова про postgres performance https://chat.openai.com/g/g-ZmfkdmXzD-postgresmarathon
ChatGPT
ChatGPT - #PostgresMarathon
Postgres.ai bot that studied the #PostgresMarathon materials (https://gitlab.com/postgres-ai/postgresql-consulting/postgres-howtos/)
👍3🤮2
Forwarded from Live PHP
Приглашаем на очередной митап сообщества Live PHP
который пройдет в Санкт-Петербурге в четверг, 15 февраля 2024
Все оттенки асинхронности
Многие слышали об асинхронности, но не многие применяли. А те, кто применяли — почти всегда
используют готовые инструменты.
С приходом PHP 8.1 в язык добавили Fiber API, которые изменяют подходы к разработке ПО, но не
только лишь все смотрят в завтрашний день, понимая насколько они могут изменить "правила игры".
В докладе предлагается "изобрести" асинхронность заново, и задуматься о том, что подходы к
разработке с использованием EventLoop, используемые в Revolt/ReactPHP/Amp/etc с приходом файберов
морально устарели.
А может и нет... Решать вам =)
Полиморфизм в современном PHP
На первый взгляд может показаться, что в PHP есть только полиморфизм подтипов. Однако если вооружиться современными инструментами и напильником, можно получить все три вида полиморфизма.
На докладе мы глубоко прокачаем понимание типизации. Обсудим в сотый раз LSP, разберёмся с вариантностью (declaration-site и call-site), реализуем простейшую перегрузку методов и поймём, почему её нет в языке. Будет познавательно и полезно не только в контексте PHP.
Переносимое окружение для разработки и тестов
Про облегчение деплоя сказано много. Но про локальный стенд для разработки и тестов говорить часто боятся. Уходит много сил на перекидывание ключей доступа к песочницам сторонних сервисов и дампов данных от одних программистов другим. Пока Кирилл берёт быка за Фаберже, исправим эту оплошность :)
Расскажем, как выстроить удобное локальное окружение для разработки и тестов при командной работе с коллегами или с собой со второго компьютера. Как обмениваться демо-данными, подключать и эмулировать сторонние сервисы, разрабатывать отдельные микросервисы без необходимости поднимать соседние сервисы и как тестировать проекты с базами данных и очередями.
Санкт-Петербург, 4-я Советская, д.7
https://yandex.ru/maps/-/CDu9r83l
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥20
Forwarded from Alisa Kruglova [MSK -2]
Результаты ежегодного опроса сообщества готовы!
📥 1120 мнений о прошедшем 2023 в лендинге и статье.
📎 На каких версиях PHP сидят команды;
📎 Как в сообществе относятся к ИИ-инструментам для разработки;
📎 Статьи, видео, человек года, по мнению сообщества;
📎 Топ инструментов для статического анализа;
📎 и не только.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27
Один из ключевых разработчиков nginx, не согласный с политикой нынешних владельцев (компания F5), заявил, что больше не будет контрибьютить в nginx и запустил свой форк FreeNginx: http://freenginx.org/hg/nginx
История обычная.
Что меня удивило: репозиторий под управлением Mercurial! Я, конечно, тоже считаю что Mercurial в своё время был круче git, но уже 2024 год, как привлекать комьюнити к работе с open source на Mercurial?
История обычная.
Что меня удивило: репозиторий под управлением Mercurial! Я, конечно, тоже считаю что Mercurial в своё время был круче git, но уже 2024 год, как привлекать комьюнити к работе с open source на Mercurial?
🤨26🙈19😁8👍3😱1🤝1
Zero config, zero overhead, новый фреймворк (пока суровая alfa стадия): Tempest
https://github.com/tempestphp/tempest-framework
Серия видео по Tempest: https://youtube.com/playlist?list=PL0bgkxUS9EaILnUL8Q4np6B3qxjQbE7PH&si=xTVS0pMLPy7WqHCe
https://github.com/tempestphp/tempest-framework
Серия видео по Tempest: https://youtube.com/playlist?list=PL0bgkxUS9EaILnUL8Q4np6B3qxjQbE7PH&si=xTVS0pMLPy7WqHCe
GitHub
GitHub - tempestphp/tempest-framework: The PHP framework that gets out of your way
The PHP framework that gets out of your way. Contribute to tempestphp/tempest-framework development by creating an account on GitHub.
👎10🔥7🤔5👍4🌚1
Forwarded from Хэндлим тему | Дерепко (Dmitrii)
Тестирования функций из стандартной библиотеки PHP и не только
#пост №7
Цель
Подмена (mock) функций, которые уже “загружены” в PHP еще до подгрузки Composer Autoloader, каких-либо include или других объвлений
Подмена не только из под не пустого namespace, например
Проблема
Если объявить функцию с именем, которая уже существует в стандартной библиотеке PHP, то получим ошибку, что такая функция уже существует и переопределить её нельзя.
Можно было бы “выгрузить” её из памяти, но увы, выгружать из памяти функции в PHP нельзя.
Можно лишь переопределить функцию до её непосредственного объявления. Но такой способ не подходит, потому что функция уже объявлена при любом вызове
Ресерч
В php.ini можно найти флаг
Если использовать этот флаг, то
Это и логично. Функции
Если объявить функцию самостоятельно, то ошибки больше не будет:
Бинго!
Помещаем объявление функции в библиотеку, создаем State manager, через которого сможем управлять возвращаемым значение “123” и делаем пользователю интерфейс взаимодействия с этим менеджером.
Теперь, если пользователь захочет протестировать вызов
Но как быть, если нужно протестировать измененную функцию
Можно так и сделать: State manager создает для всех тестов функцию, которая эмулирует стандартную
Вроде всё логично и понятно. Можно накодить и наслаждаться тестированием.
Однако, а как эмулировать системное время? Если с различными полифилами от symfony всё понятно: можно создать какую-то функцию, которая будет базировать на другой функции, преобразовывать результат под новый формат и отдавать его.
Но на какой функции нужно базировать время?
Bash! 🤪
PHP имеет возможность в любое время обратиться к своему старшему брату-башу простыми обратными кавычками:
Для аналога
Значит для State manager осталось написать только возможность использовать не статичное значение, а функцию, которая каждый раз будет выполняться.
Всё это и не только сделано в библиотеке xepozz/internal-mocker
Читаем доку по установке и первичной настройке, добавляем нужные файлы, вписываем следующую конфигурацию:
——
Если кто-то писал свои костыли или специально убирал
——
Описание disable-functions: https://www.php.net/manual/en/ini.core.php#ini.disable-functions
Internal mocker: https://github.com/xepozz/internal-mocker/
#пост №7
Цель
Подмена (mock) функций, которые уже “загружены” в PHP еще до подгрузки Composer Autoloader, каких-либо include или других объвлений
function name(){} Подмена не только из под не пустого namespace, например
App\Service\name , но и из корневого namespace: проще всего это сделать через use function name;Проблема
Если объявить функцию с именем, которая уже существует в стандартной библиотеке PHP, то получим ошибку, что такая функция уже существует и переопределить её нельзя.
Можно было бы “выгрузить” её из памяти, но увы, выгружать из памяти функции в PHP нельзя.
Можно лишь переопределить функцию до её непосредственного объявления. Но такой способ не подходит, потому что функция уже объявлена при любом вызове
php .Ресерч
В php.ini можно найти флаг
disable_functions , которая принимает список имен функций, которые нужно “не объявлять” в недрах PHP.Если использовать этот флаг, то
php -ddisable_functions=time -r "echo time();" выкинет ошибку:
❯ php -ddisable_functions=time -r "echo time();"
PHP Fatal error: Uncaught Error: Call to undefined function time() in Command line code:1
Stack trace:
#0 {main}
thrown in Command line code on line 1
Fatal error: Uncaught Error: Call to undefined function time() in Command line code on line 1
Error: Call to undefined function time() in Command line code on line 1
Call Stack:
0.0000 389568 1. {main}() Command line code:0
Это и логично. Функции
time больше нет. Но теперь ведь можно создать её самостоятельно?Если объявить функцию самостоятельно, то ошибки больше не будет:
❯ php -ddisable_functions=time -r "function time() { return 123; } echo time();"
123%
Бинго!
Помещаем объявление функции в библиотеку, создаем State manager, через которого сможем управлять возвращаемым значение “123” и делаем пользователю интерфейс взаимодействия с этим менеджером.
Теперь, если пользователь захочет протестировать вызов
time , то сможем самостоятельно указать требуемые значения. Время в будущем, в прошлом, 0, false, что угодно.Но как быть, если нужно протестировать измененную функцию
time лишь в одном тесте, а в других местах оставить всё как есть?Можно так и сделать: State manager создает для всех тестов функцию, которая эмулирует стандартную
time , а в нужном тесте наложить на общую эмуляцию частную. Вроде всё логично и понятно. Можно накодить и наслаждаться тестированием.
Однако, а как эмулировать системное время? Если с различными полифилами от symfony всё понятно: можно создать какую-то функцию, которая будет базировать на другой функции, преобразовывать результат под новый формат и отдавать его.
Но на какой функции нужно базировать время?
DateTime`* классы? `date() ? mktime ? hrtime ? А если их тоже отключить нужно?Bash! 🤪
PHP имеет возможность в любое время обратиться к своему старшему брату-башу простыми обратными кавычками:
`command` . Результат будет строкой, но всегда можно "кастануть". Для аналога
time() команда `date +%s` .Значит для State manager осталось написать только возможность использовать не статичное значение, а функцию, которая каждый раз будет выполняться.
Всё это и не только сделано в библиотеке xepozz/internal-mocker
Читаем доку по установке и первичной настройке, добавляем нужные файлы, вписываем следующую конфигурацию:
$mocker = new Mocker();
$mocker->load([
[
'namespace' => '',
'name' => 'time',
'function' => fn () => `date +%s`,
],
]);
MockerState::saveState();
——
Если кто-то писал свои костыли или специально убирал
use function из файлов, чтобы подменять функции в нужном namespace, теперь можете избавиться от них и заменить это на подключение библиотеки и небольшой конфиг.——
Описание disable-functions: https://www.php.net/manual/en/ini.core.php#ini.disable-functions
Internal mocker: https://github.com/xepozz/internal-mocker/
👍21🙈12🔥6👎3😱2
Недавно я занялся настройкой новой операционной системы macOS, начиная с нуля. В этот раз решил опробовать развёртывание PHP-разработки с использованием Laravel Herd (https://herd.laravel.com) — приложения, включающего в себя готовые бинарные файлы PHP, nginx и DNSMasq.
Установка прошла гладко, согласно инструкции, и с первой попытки заработало всё, включая Xdebug.
Однако, изучение документации выявило, что в основе Laravel Herd лежат разработки Laravel Valet, что вызвало у меня смешанные чувства. Несколько лет назад я уже сталкивался с Laravel Valet и тогда его баги заставили меня отказаться от использования, оставив после себя негативные впечатления.
В целом, философия Laravel Valet, как и всего Laravel, заключается в том, что множество "магии" скрыто от разработчика, который не должен вникать в детали работы системы — она просто работает. Этот подход имеет свои преимущества.
Однако, то, что мне категорически не нравится в Laravel Valet, так это то, что вся гибкость настройки конфигурации nginx перекладывается с файла конфигурации nginx на так называемые Valet Drivers, написанные на PHP. На первый взгляд, работа с Drivers может показаться проще, чем настройка nginx, но это кажется неестественным и оторванным от реальных условий производственной среды, где, в конечном итоге, всё равно приходится работать с конфигурацией nginx.
Для тех, кто не знаком с Laravel Valet, вот интересный и, возможно, шокирующий факт: все запросы обрабатываются через некий файл server.php, который, благодаря системе Drivers, заменяет собой роутинг на уровне nginx. Это означает, что вместо использования директив location в конфигурации nginx, мы имеем набор условий if в PHP-коде.
Более того, через инфраструктуру Valet проходят даже HTTP-запросы на получение статических файлов. Например, когда браузер запрашивает my-site.test/logo.png, запрос проходит через множество PHP-кода внутри Laravel Valet. Файл определяется с помощью file_exists(), и контент logo.png в итоге отдаётся через PHP-FPM, что кажется довольно необычным решением. 🙈
Установка прошла гладко, согласно инструкции, и с первой попытки заработало всё, включая Xdebug.
Однако, изучение документации выявило, что в основе Laravel Herd лежат разработки Laravel Valet, что вызвало у меня смешанные чувства. Несколько лет назад я уже сталкивался с Laravel Valet и тогда его баги заставили меня отказаться от использования, оставив после себя негативные впечатления.
В целом, философия Laravel Valet, как и всего Laravel, заключается в том, что множество "магии" скрыто от разработчика, который не должен вникать в детали работы системы — она просто работает. Этот подход имеет свои преимущества.
Однако, то, что мне категорически не нравится в Laravel Valet, так это то, что вся гибкость настройки конфигурации nginx перекладывается с файла конфигурации nginx на так называемые Valet Drivers, написанные на PHP. На первый взгляд, работа с Drivers может показаться проще, чем настройка nginx, но это кажется неестественным и оторванным от реальных условий производственной среды, где, в конечном итоге, всё равно приходится работать с конфигурацией nginx.
Для тех, кто не знаком с Laravel Valet, вот интересный и, возможно, шокирующий факт: все запросы обрабатываются через некий файл server.php, который, благодаря системе Drivers, заменяет собой роутинг на уровне nginx. Это означает, что вместо использования директив location в конфигурации nginx, мы имеем набор условий if в PHP-коде.
Более того, через инфраструктуру Valet проходят даже HTTP-запросы на получение статических файлов. Например, когда браузер запрашивает my-site.test/logo.png, запрос проходит через множество PHP-кода внутри Laravel Valet. Файл определяется с помощью file_exists(), и контент logo.png в итоге отдаётся через PHP-FPM, что кажется довольно необычным решением. 🙈
Laravel Herd
Laravel Development perfected - One click PHP development environment.
🤯34🤮29👍6😁2😢1💩1😐1
Опублликован видео-плейлист прошедшей конференции Laracon EU 2024, видео продолжают добавляться каждый день: https://youtube.com/playlist?list=PLMdXHJK-lGoBx3Nq2jHgrU7DGsJNi1nwi&si=1TUwqXqg01wFBr_h
🔥10👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Блоггер заморочился и снял на slow motion задержку при рендере букв в редакторе Zed против VSCode
😁46🤡9👍6👏2🔥1
Убийца PHP вышел в публичную бету: https://1cmycloud.com/welcome/
1Cmycloud
1С:Предприятие.Элемент - это облачная технология low-code разработки веб-кабинетов, порталов, браузерных и мобильных приложений
1С:Предприятие.Элемент - это облачная технология low-code разработки веб-кабинетов, порталов, браузерных и мобильных приложений.
готовые ui-компоненты, облако, встроенная BI-аналитика, разработка веб-приложений, веб-среда разработки, разработка…
готовые ui-компоненты, облако, встроенная BI-аналитика, разработка веб-приложений, веб-среда разработки, разработка…
🤣90😁18🤡14🤮11😱7🔥3
В PhpStorm в панели Project есть иконка Expand All - рекурсивно раскрывает все директории в дереве проекта, таким образом можно посмотреть всё и сразу.
В реальной жизни это значит, что будут раскрыто всё дерево внутри vendor и node_modules - представляете сколько там директорий и как будет выглядеть отображение ВСЕГО во вкладке Project?
Я иногда промахиваюсь и нажимаю эту кнопку. Развёртывание идёт постепенно, общий UI не блокируется, и в этот момент нужно как можно быстрее успеть нажать соседнюю кнопку Collapse All, тогда процедура Expand All прервётся.
Но если не нажать Collapse All вовремя, то PhpStorm спустя прау десятков секунд просто зависает в попытке развернуть все директории в дереве! 🤦
Только что в очередной раз попал в эту ситуацию: случайно нажал Expand All и не нажал вовремя Collapse All - редактор завис.
Я проверил все настройки и не нашел как отключить эту мину.
Подозреваю, что эта кнопка может быть полезна для просмотра дерева мини-проекта или какого-то демо репозитория из 5 папок. Т.е. примерно никогда.
Причём этот опаснейший элемент интерфейса является частью всей платформы Idea. Т.е., например, разработчики больших Java проектов на Idea также страдают?
👩💻 👩💻 👩💻 👩💻 👩💻 👩💻 👩💻
Совершенно не понятно, зачем в интерфейс профессионального продукта для разработки сложных проектов добавлена кнопка у которой нет реального практического применения, но есть побочный эффект "повесить редактор с вероятностью 99%".
В реальной жизни это значит, что будут раскрыто всё дерево внутри vendor и node_modules - представляете сколько там директорий и как будет выглядеть отображение ВСЕГО во вкладке Project?
Я иногда промахиваюсь и нажимаю эту кнопку. Развёртывание идёт постепенно, общий UI не блокируется, и в этот момент нужно как можно быстрее успеть нажать соседнюю кнопку Collapse All, тогда процедура Expand All прервётся.
Но если не нажать Collapse All вовремя, то PhpStorm спустя прау десятков секунд просто зависает в попытке развернуть все директории в дереве! 🤦
Только что в очередной раз попал в эту ситуацию: случайно нажал Expand All и не нажал вовремя Collapse All - редактор завис.
Я проверил все настройки и не нашел как отключить эту мину.
Подозреваю, что эта кнопка может быть полезна для просмотра дерева мини-проекта или какого-то демо репозитория из 5 папок. Т.е. примерно никогда.
Причём этот опаснейший элемент интерфейса является частью всей платформы Idea. Т.е., например, разработчики больших Java проектов на Idea также страдают?
Совершенно не понятно, зачем в интерфейс профессионального продукта для разработки сложных проектов добавлена кнопка у которой нет реального практического применения, но есть побочный эффект "повесить редактор с вероятностью 99%".
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74💯7🤔6❤5😁5😈3😡3🤮2🥱2👎1👏1
Пятиминутка PHP
В PhpStorm в панели Project есть иконка Expand All - рекурсивно раскрывает все директории в дереве проекта, таким образом можно посмотреть всё и сразу. В реальной жизни это значит, что будут раскрыто всё дерево внутри vendor и node_modules - представляете…
В продолжение к предыдущему посту я изучил баг-трекер Idea, нашел несколько просьб отключения этой кнопки с аналогичными аргументами, ставим лайки:
https://youtrack.jetbrains.com/issue/IDEA-260517/Add-option-to-remove-Expand-all-from-Project-Tool-Winow-Bar
https://youtrack.jetbrains.com/issue/IDEA-322819/Expand-All-button-in-Project-tool-window-is-broken-and-it-would-be-better-to-make-it-a-context-aware-button
https://youtrack.jetbrains.com/issue/IDEA-286610/Hide-Expand-All-button#focus=Comments-27-5811125.0-0
https://youtrack.jetbrains.com/issue/IDEA-320855/Can-the-expand-all-button-be-removed
https://youtrack.jetbrains.com/issue/IDEA-260517/Add-option-to-remove-Expand-all-from-Project-Tool-Winow-Bar
https://youtrack.jetbrains.com/issue/IDEA-322819/Expand-All-button-in-Project-tool-window-is-broken-and-it-would-be-better-to-make-it-a-context-aware-button
https://youtrack.jetbrains.com/issue/IDEA-286610/Hide-Expand-All-button#focus=Comments-27-5811125.0-0
https://youtrack.jetbrains.com/issue/IDEA-320855/Can-the-expand-all-button-be-removed
👍42🗿9🤮3
Forwarded from Laravel World
Тейлор сменил тип компании с Laravel LLC (Общество с ограниченной ответственностью) на свежезарегистрированную Laravel Holdings, Inc (Корпорация). Занятно, что создана она не Арканзасе, родном штате Отвела, а в Делавэре.
Либо собирается скупать другие компании, либо привлекать капиталы. Плюс с сайта был убран список сотрудников, возможно, в связи с тем, что планируется резко увеличить их число. Разрабы трудятся — лавэха мутится.
Либо собирается скупать другие компании, либо привлекать капиталы. Плюс с сайта был убран список сотрудников, возможно, в связи с тем, что планируется резко увеличить их число. Разрабы трудятся — лавэха мутится.
😁25👍6🤔4