ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ ΠΏΡΠ½ΠΈΠΊΠ° | PHP, Laravel, Symfony, CodeIgniter
ΠΡΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ Π΄Π»Ρ ΠΏΡ ΠΏΡΠ½ΠΈΠΊΠ° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ°Π½Π°Π»Π΅. ΠΠΎ ΡΠ΅ΠΊΠ»Π°ΠΌΠ΅: @tproger_sales_bot Π£ΡΠΈΡΡΡΡ Ρ Π½Π°Ρ: clc.to/M561SQ ΠΠ»Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ: @proglibrary_feeedback_bot Π ΠΠ: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Show moreπ Analytical overview of Telegram channel ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ ΠΏΡΠ½ΠΈΠΊΠ° | PHP, Laravel, Symfony, CodeIgniter
Channel ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ ΠΏΡΠ½ΠΈΠΊΠ° | PHP, Laravel, Symfony, CodeIgniter (@phpproglib) in the Russian language segment is an active participant. Currently, the community unites 10 461 subscribers, ranking 11 698 in the Technologies & Applications category and 60 802 in the Russia region.
π Audience metrics and dynamics
Since its creation on Π½Π΅Π²ΡΠ΄ΠΎΠΌΠΎ, the project has demonstrated rapid growth, gathering an audience of 10 461 subscribers.
According to the latest data from 26 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -35 over the last 30 days and by -5 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 16.11%. Within the first 24 hours after publication, content typically collects 7.39% reactions from the total number of subscribers.
- Post reach: On average, each post receives 1 685 views. Within the first day, a publication typically gains 773 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 2.
- Thematic interests: Content is focused on key topics such as php, laravel, ΠΏΡ ΠΏΡΠ½ΠΈΠΊΠ°, artisan, api.
π Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
βΠΡΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ Π΄Π»Ρ ΠΏΡ
ΠΏΡΠ½ΠΈΠΊΠ° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ°Π½Π°Π»Π΅.
ΠΠΎ ΡΠ΅ΠΊΠ»Π°ΠΌΠ΅: @tproger_sales_bot
Π£ΡΠΈΡΡΡΡ Ρ Π½Π°Ρ: clc.to/M561SQ
ΠΠ»Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ: @proglibrary_feeedback_bot
Π ΠΠ: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68bβ
Thanks to the high frequency of updates (latest data received on 27 October, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
if ($request->filled('email')) {
// ...
}
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ has(), Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΊΠ»ΡΡΠ°, Π½ΠΎ ΠΈ ΡΠΎ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ blank. ΠΡΠΈ ΡΡΠΎΠΌ 0 ΠΈ false ΡΡΠΈΡΠ°ΡΡΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΌΠΈ.
π Π£Π΄ΠΎΠ±Π½ΡΠΉ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ±ΠΈΡΠ°Π΅Ρ Π»ΠΈΡΠ½ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈΠ· ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ.
πΈ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ
ΠΏΡΠ½ΠΈΠΊΠ°
$stream = Storage::disk('s3')
->getDriver()
->readStream($sourceFile);
Storage::disk('sftp')->put($targetFile, $stream);
ΠΠΎΡΠΎΠΊ ΡΠΈΡΠ°Π΅ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π΄Π°Π»ΡΡΠ΅ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π²Π΅ΡΡ ΡΠ°ΠΉΠ» Π² ΠΏΠ°ΠΌΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
β‘οΈ Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°:
Storage::disk('s3')->put(
$targetFile,
fopen($sourceFile, 'r')
);
π ΠΠ»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½Π°. ΠΠ»Ρ ΡΠΎΡΠ΅Π½ ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ ΠΈΠ»ΠΈ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ β ΡΠΆΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³Π°Ρ ΠΈΡΡΠΎΡΠΈΡ.
πΈ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ
ΠΏΡΠ½ΠΈΠΊΠ°
class User
{
public string $email {
set => strtolower(trim($value));
}
public string $displayName {
get => ucfirst($this->firstName);
}
}
ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π΄Π»Ρ:
β Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ
β Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ
β Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΡ
ΡΠ²ΠΎΠΉΡΡΠ²
β DTO ΠΈ Value Objects
Π Ρ asymmetric visibility ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΌ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, Π½ΠΎ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·Π²Π½Π΅:
public private(set) string $email;
π ΠΠΎ ΠΌΠΈΠ³ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π΄ΠΈ Property Hooks Π½Π΅ ΡΡΠΎΠΈΡ. ΠΡΠ»ΠΈ PHP 8.4+ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, hooks Ρ
ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡ Π΄Π»Ρ ΡΠΎΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π° ΡΠ°ΠΌ, Π³Π΄Π΅ Π½Π°ΠΊΠΎΠΏΠΈΠ»ΠΈΡΡ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΠ΅ getter/setter.
β οΈ Property Hooks Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ Ρ readonly.
π ΠΡΡΠΎΡΠ½ΠΈΠΊ
πΈ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ
ΠΏΡΠ½ΠΈΠΊΠ°
final readonly class Money
{
public function __construct(
public int $amount,
public string $currency,
) {}
public function withAmount(int $amount): self
{
return new self($amount, $this->currency);
}
}
β‘οΈ Π PHP 8.5 ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π½ΠΎΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ clone():
$price = new Money(1000, 'USD');
$discounted = clone($price, [
'amount' => 850,
]);
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ $price ΠΎΡΡΠ°ΡΡΡΡ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΌ, Π° $discounted ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ amount. ΠΠ»Π°Π²Π½Π°Ρ ΡΠΈΡΠΊΠ°: ΡΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π΄Π°ΠΆΠ΅ readonly-ΡΠ²ΠΎΠΉΡΡΠ²Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π£Π΄ΠΎΠ±Π½ΠΎ Π΄Π»Ρ Value Object, DTO ΠΈ immutable-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π³Π΄Π΅ ΡΠ°Π½ΡΡΠ΅ ΡΠ°Π΄ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ withSomething().
π ΠΡΡΠΎΡΠ½ΠΈΠΊ
πΈ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ
ΠΏΡΠ½ΠΈΠΊΠ°
php artisan dev
β‘οΈ ΠΠΎΠΌΠ°Π½Π΄Π° ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²:
php artisan dev
β
βββ server β php artisan serve
βββ queue β queue worker
βββ logs β Laravel Pail
βββ vite β frontend dev server
Π ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²ΡΠ΅ΠΌ ΡΡΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΡΠΌΠΎ ΠΈΠ· ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°: ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠΈΠΌ ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ½ΡΠΌ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΈΡ
, ΠΎΡΠΈΡΠ°ΡΡ Π»ΠΎΠ³ΠΈ ΠΈ ΠΈΡΠΊΠ°ΡΡ ΠΏΠΎ Π²ΡΠ²ΠΎΠ΄Ρ.
Π‘Π²ΠΎΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Reverb ΠΈΠ»ΠΈ listener Π΄Π»Ρ Stripe. ΠΠ΅Π½ΡΡΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΎΠ² ΠΈ ΡΡΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° β
π ΠΡΡΠΎΡΠ½ΠΈΠΊ
πΈ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ
ΠΏΡΠ½ΠΈΠΊΠ°
class Box<T>
{
public function __construct(public T $value) {}
}
π ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ (Π½Π°ΠΆΠΌΠΈ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ):
ΠΠΎΠΊΠ° β Π½Π΅Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΈΠ·Π°.
Π 2026 Π³ΠΎΠ΄Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π½ΠΎΠ²ΡΠΉ RFC Bound-Erased Generic Types, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π» Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΡΡΠ΅ΠΉΡΠΎΠ², ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². Π ΠΈΡΠ½Π΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ½Π΅ΡΠ»ΠΈ Π½Π° Π³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π½ΠΈΠ΅, Π½ΠΎ RFC Π±ΡΠ» ΠΎΡΠΊΠ»ΠΎΠ½ΡΠ½.
ποΈ ΠΠΎΡΡΠΎΠΌΡ Π½Π° Π°Π²Π³ΡΡΡ 2026 Π³ΠΎΠ΄Π° Π½Π°ΡΠΈΠ²Π½ΡΡ
Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² Π² PHP Π½Π΅Ρ ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ΠΈ ΠΏΠΎΡΠ²ΡΡΡΡ, ΡΠΎΠΆΠ΅ Π½Π΅Ρ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ generics ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΠ΅ΡΠ΅Π· PHPDoc ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ Π²ΡΠΎΠ΄Π΅ PHPStan ΠΈ Psalm:
/**
* @template T
*/
class Box
{
/** @param T $value */
public function __construct(public mixed $value) {}
}
π β Π·Π½Π°Π»/Π°
π₯ β ΡΡΠ°Π»ΠΎ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅
πΈ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ
ΠΏΡΠ½ΠΈΠΊΠ°40 β 200 β 350 ΠΠβ¦ ΠΈ ΡΠ°ΠΊ Π΄ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°. Unset, GC, collect_cycles() β Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ.ΠΡΠΎ Π½Π΅ ΡΡΠ΅ΡΠΊΠ°. ΠΡΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° PHP. π΅ ΠΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ PHP ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Zend Memory Manager: ΠΎΠ½ Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΡ ΠΊΡΡΠΏΠ½ΡΠΌΠΈ ΡΠ°Π½ΠΊΠ°ΠΌΠΈ (2β4 ΠΠ) ΠΈ Π½Π΅ ΠΎΡΠ΄Π°ΡΡ ΠΈΡ ΠΠ‘ Π½Π°Π·Π°Π΄, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Π½ΡΡΡΠΈ Π²ΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΎ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΈΠΊ β Π½ΠΎΠ²ΡΠΉ baseline. ΠΠ±ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ 100k Π·Π°ΠΏΠΈΡΠ΅ΠΉ β ΠΏΠ°ΠΌΡΡΡ Π²ΡΡΠΎΡΠ»Π° β ΠΏΡΠΎΡΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ Π΄Π΅ΡΠΆΠ°ΡΡ ΡΡΠΎΡ ΠΎΠ±ΡΡΠΌ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΠΆΠΈΠ·Π½ΠΈ. π₯ Π§ΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Β«ΡΠ°Π·Π±ΡΡ Π°Π½ΠΈΠ΅Β»
ORM ->all() ΠΈΠ»ΠΈ ->get() Π½Π° Π΄Π΅ΡΡΡΠΊΠΈ ΡΡΡΡΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°ΠΉΠ» Π² file_get_contents() Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΡΠ»ΠΎΠΆΠ½ΡΠ΅ eager-loading Π³ΡΠ°ΡΡ ORMβ ΠΠ°ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ β Π‘ΡΡΠΈΠΌΠΈΠ½Π³ Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ:
User::lazy()->each(fn($u) => processUser($u));ΠΈΠ»ΠΈ:
Record::chunk(100, function ($rows) {
foreach ($rows as $r) processRecord($r);
});
βοΈ Doctrine:
foreach ($q->toIterable() as $u) {
process($u);
$em->detach($u);
}
β ΠΠ·ΠΎΠ»ΡΡΠΈΡ ΡΡΠΆΡΠ»ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² ΡΡΠ½ΠΊΡΠΈΡ β ΠΏΠ°ΠΌΡΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΠΏΡΠΈ Π²ΡΡ
ΠΎΠ΄Π΅ ΠΈΠ· scope.
β Π ΠΎΡΠ°ΡΠΈΡ Π²ΠΎΡΠΊΠ΅ΡΠΎΠ² β ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°:
Laravel: php artisan queue:work --max-jobs=1000 RoadRunner: pool: max_jobs: 1000 Messenger: messenger:consume --limit=1000πΈ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ ΠΏΡΠ½ΠΈΠΊΠ°
@env_required() ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΠ΅Π΄Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΠΈ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΎΡ null. ΠΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΡΠ΅Π΄Ρ.
Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° @env_required() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ APP_KEY. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°, Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠΎΡΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ
ΠΏΡΠ½ΠΈΠΊΠ°$map = [
'foo' => 'bar',
'foobar' => 'foo',
];
$input = 'foobar and foo';
echo str_replace(
array_keys($map),
array_values($map),
$input
);
// bar bar and bar
Π‘Π½Π°ΡΠ°Π»Π° "foo" ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² "bar", ΠΏΠΎΡΡΠΎΠΌΡ "foobar" ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ "barbar" ΠΈ Π΄ΠΎ Π²ΡΠΎΡΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ ΡΠΆΠ΅ Π½Π΅ Π΄ΠΎΡ
ΠΎΠ΄ΠΈΡ.
π΄ strtr() ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠ½Π°ΡΠ΅:
echo strtr($input, $map);
// foo and bar
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡ
ΠΎΠ΄ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ ΠΈ Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΡΠ°ΠΌΠΎΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅. Π£ΠΆΠ΅ Π·Π°ΠΌΠ΅Π½ΡΠ½Π½ΡΠ΅ ΡΠ°ΡΡΠΈ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ:
β Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅;
β Π·Π°ΠΌΠ΅Π½Ρ Π½Π΅ Π²Π»ΠΈΡΡΡ Π΄ΡΡΠ³ Π½Π° Π΄ΡΡΠ³Π°;
β ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΌ.ΠΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊ ΠΏΠΎ ΡΠ»ΠΎΠ²Π°ΡΡ Π²ΠΈΠ΄Π° "ΡΡΠΎ" => "Π½Π° ΡΡΠΎ", strtr() ΡΠ°ΡΡΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄Π°ΡΠ½ΡΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ ΠΏΡΠ½ΠΈΠΊΠ°
ΠΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΡΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΆΠ΅ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΉ ΠΆΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ: Π½Π΅ ΠΏΠΎΠΊΡΠΏΠ°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΡΡΡ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΡ Π½ΠΎΠ²ΡΡ ΡΠ΅ΠΌΡ, Π° ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΈ Π²ΡΠ±ΠΈΡΠ°ΡΡ, ΡΡΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ΅ΠΉΡΠ°Ρ.Π’Π°ΠΊΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΈ Π² Proglib Academy. ΠΠΌΠ΅ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΡΡΡΠ° β Π΄ΠΎΡΡΡΠΏ ΡΡΠ°Π·Ρ ΠΊΠΎ Π²ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΈ Π½ΠΎΠ²ΡΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π² ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ΅ π π ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ πββοΈ Proglib Academy
// ΠΡΠ»ΠΎ
$result = strlen(htmlspecialchars(trim($input)));
// Π‘ΡΠ°Π»ΠΎ
$result = $input
|> trim(...)
|> htmlspecialchars(...)
|> strlen(β¦);
ΠΠ°ΠΏΠΈΡΡ ... β ΡΡΠΎ first-class callable. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΡΠ΅ ΡΠΈΡΠ°ΡΡ, ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ ΠΈ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΡΠ°ΡΡΠΈΡΡΡΡ: ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΡΠ°ΠΏ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π½ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ.
Pipe-ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΡΠ°ΠΌ, Π³Π΄Π΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΡ
ΠΎΠ΄ΡΡ ΡΠ΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ β ΠΌΠ΅Π½ΡΡΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ, Π±ΠΎΠ»ΡΡΠ΅ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ.
π ΠΡΡΠΎΡΠ½ΠΈΠΊ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ
ΠΏΡΠ½ΠΈΠΊΠ°class X
{
public function foo(int $a, string $c, string ...$b): void {}
}
class Y extends X
{
public function foo(int $a, string ...$b): void {}
}
Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ΅Π½. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π»ΠΎ Π² $c, Π² Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΌ ΡΡΠ°Π½Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ $b.
β‘οΈ ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ? ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ, Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ:
$x->foo(1, 'A');
$x->foo(1, 'A', 'B', 'C');
Π Π²ΠΎΡ ΡΠ°ΠΊ ΡΠΆΠ΅ Π½Π΅Π»ΡΠ·Ρ:
class Y extends X
{
public function foo(int $a, int ...$b): void {}
}
ΠΈΠ»ΠΈ
class Y extends X
{
public function foo(int $a, string $c, string $d, string ...$b): void {}
}
Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ β Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ±Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° Π½Π°ΡΡΡΠ°ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ ΡΠΈΠ³Π½Π°ΡΡΡ.
π‘ ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠΎΡΡΠΎΠ΅: ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π²ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ
ΠΏΡΠ½ΠΈΠΊΠ°Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ΅Π»ΠΈΠ· PHP 8.6 ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ 19 Π½ΠΎΡΠ±ΡΡ 2026 Π³ΠΎΠ΄Π°.π‘ ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΈΠ»ΠΈ ΠΊΡΡΠΏΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ΅ΠΉΡΠ°Ρ Ρ ΠΎΡΠΎΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ PHP 8.6 Π² CI ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ ΠΈ ΠΏΡΠΎΠ³Π½Π°ΡΡ ΡΠ΅ΡΡΡ. ΠΠ°ΠΉΡΠΈ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Π·Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΡΠ΅Π² Π΄ΠΎ ΡΠ΅Π»ΠΈΠ·Π° Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅, ΡΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅ Π²ΡΡ ΠΎΠ΄Π° ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ ΠΏΡΠ½ΠΈΠΊΠ°
npx terser src/app.js -o dist/app.min.js -c -m
π‘ ΠΠΈΠ½ΠΈΡΠΈΡΠΈΡΡΠ΅Ρ Π²Π°Ρ JavaScript, ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ΄ ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Terser.
ΠΠΎΠΌΠ°Π½Π΄Π° (Node.js + CleanCSS Π΄Π»Ρ CSS):
npx clean-css-cli -o dist/style.min.css src/style.css
π‘ ΠΠΈΠ½ΠΈΡΠΈΡΠΈΡΡΠ΅Ρ CSS, ΡΠ΄Π°Π»ΡΡ ΠΏΡΠΎΠ±Π΅Π»Ρ, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ ΡΠΏΡΠΎΡΠ°Ρ Π·Π°ΠΏΠΈΡΠΈ, ΡΡΠΎ ΡΡΠΊΠΎΡΡΠ΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΡ ΡΡΡΠ°Π½ΠΈΡΡ.
β ΠΠ°ΡΠ΅ΠΌ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ?
πΉ Π£ΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡ: ΠΠ΅Π½ΡΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ JS ΠΈ CSS ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ . πΉ ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ: ΠΠΈΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠΌ Π±ΡΡΡΡΠ΅Π΅. πΉ Π§ΠΈΡΡΡΠΉ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½: Π£Π±ΠΈΡΠ°ΡΡΡΡ Π½Π΅Π½ΡΠΆΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π΅Π»Ρ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΠΌ.βοΈ ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ Terser: -c ΠΈΠ»ΠΈ --compress: Π‘ΠΆΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠ΄, ΡΠ΄Π°Π»ΡΡ Π»ΠΈΡΠ½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ. -m ΠΈΠ»ΠΈ --mangle: ΠΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²ΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΌΠ΅Π½ΡΡΠ°Ρ ΡΠ°Π·ΠΌΠ΅Ρ. --source-map: ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅Ρ source map Π΄Π»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π΄Π΅Π±Π°Π³Π° ΠΌΠΈΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡΠΈΠΌΠ΅Ρ Ρ source map: npx terser src/app.js -o dist/app.min.js -c -m --source-map βοΈ ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ CleanCSS: --compatibility β Π·Π°Π΄Π°ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠ°ΠΌΠΈ. --level β ΡΡΠΎΠ²Π΅Π½Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ (1 ΠΈΠ»ΠΈ 2). ΠΡΠΈΠΌΠ΅Ρ:
npx clean-css-cli -o dist/style.min.css src/style.css --level 2
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡ
ΠΏΡΠ½ΠΈΠΊΠ°