@mytechtoday/augment-extensions 0.7.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +265 -232
- package/README.md +956 -771
- package/augment-extensions/coding-standards/bash/README.md +196 -196
- package/augment-extensions/coding-standards/bash/module.json +163 -163
- package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -336
- package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -289
- package/augment-extensions/coding-standards/css/README.md +40 -40
- package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -550
- package/augment-extensions/coding-standards/css/module.json +44 -44
- package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -448
- package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -492
- package/augment-extensions/coding-standards/html/README.md +40 -40
- package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -267
- package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -505
- package/augment-extensions/coding-standards/html/module.json +44 -44
- package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -349
- package/augment-extensions/coding-standards/html-css-js/README.md +194 -194
- package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -487
- package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -550
- package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -667
- package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -267
- package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -612
- package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -505
- package/augment-extensions/coding-standards/html-css-js/module.json +48 -48
- package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -515
- package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -448
- package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -492
- package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -439
- package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -349
- package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -486
- package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -463
- package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -543
- package/augment-extensions/coding-standards/js/README.md +46 -46
- package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -487
- package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -667
- package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -612
- package/augment-extensions/coding-standards/js/module.json +49 -49
- package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -515
- package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -439
- package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -486
- package/augment-extensions/coding-standards/js/rules/performance.md +463 -463
- package/augment-extensions/coding-standards/js/rules/tooling.md +543 -543
- package/augment-extensions/coding-standards/php/README.md +248 -248
- package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -204
- package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -206
- package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -234
- package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -211
- package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -215
- package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -189
- package/augment-extensions/coding-standards/php/module.json +166 -166
- package/augment-extensions/coding-standards/php/rules/api-development.md +480 -480
- package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -332
- package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -472
- package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -561
- package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -402
- package/augment-extensions/coding-standards/php/rules/documentation.md +425 -425
- package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -627
- package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -336
- package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -677
- package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -279
- package/augment-extensions/coding-standards/php/rules/performance.md +392 -392
- package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -186
- package/augment-extensions/coding-standards/php/rules/security.md +358 -358
- package/augment-extensions/coding-standards/php/rules/testing.md +403 -403
- package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -331
- package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -426
- package/augment-extensions/coding-standards/powershell/README.md +154 -154
- package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -272
- package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -173
- package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -243
- package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -297
- package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -224
- package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -340
- package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -255
- package/augment-extensions/coding-standards/powershell/module.json +165 -165
- package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -439
- package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -240
- package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -384
- package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -383
- package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -482
- package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -296
- package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -314
- package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -466
- package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -244
- package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -266
- package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -209
- package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -314
- package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -268
- package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -197
- package/augment-extensions/coding-standards/python/README.md +48 -48
- package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -373
- package/augment-extensions/coding-standards/python/module.json +30 -30
- package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -884
- package/augment-extensions/coding-standards/python/rules/best-practices.md +232 -232
- package/augment-extensions/coding-standards/python/rules/code-organization.md +220 -220
- package/augment-extensions/coding-standards/python/rules/documentation.md +831 -831
- package/augment-extensions/coding-standards/python/rules/error-handling.md +1008 -1008
- package/augment-extensions/coding-standards/python/rules/naming-conventions.md +172 -172
- package/augment-extensions/coding-standards/python/rules/testing.md +409 -409
- package/augment-extensions/coding-standards/python/rules/tooling.md +446 -446
- package/augment-extensions/coding-standards/python/rules/type-hints.md +253 -253
- package/augment-extensions/coding-standards/react/README.md +45 -45
- package/augment-extensions/coding-standards/react/module.json +27 -27
- package/augment-extensions/coding-standards/react/rules/component-patterns.md +214 -214
- package/augment-extensions/coding-standards/react/rules/hooks-best-practices.md +235 -235
- package/augment-extensions/coding-standards/react/rules/performance.md +300 -300
- package/augment-extensions/coding-standards/react/rules/state-management.md +265 -265
- package/augment-extensions/coding-standards/react/rules/typescript-react.md +271 -271
- package/augment-extensions/coding-standards/typescript/README.md +45 -45
- package/augment-extensions/coding-standards/typescript/module.json +27 -27
- package/augment-extensions/coding-standards/typescript/rules/naming-conventions.md +225 -225
- package/augment-extensions/collections/html-css-js/README.md +82 -82
- package/augment-extensions/collections/html-css-js/collection.json +41 -41
- package/augment-extensions/domain-rules/api-design/README.md +41 -41
- package/augment-extensions/domain-rules/api-design/module.json +27 -27
- package/augment-extensions/domain-rules/api-design/rules/authentication.md +263 -263
- package/augment-extensions/domain-rules/api-design/rules/documentation.md +395 -395
- package/augment-extensions/domain-rules/api-design/rules/error-handling.md +290 -290
- package/augment-extensions/domain-rules/api-design/rules/graphql-api.md +313 -313
- package/augment-extensions/domain-rules/api-design/rules/rest-api.md +214 -214
- package/augment-extensions/domain-rules/api-design/rules/versioning.md +268 -268
- package/augment-extensions/domain-rules/database/README.md +161 -161
- package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -793
- package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -1132
- package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -868
- package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -805
- package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -621
- package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -965
- package/augment-extensions/domain-rules/database/module.json +28 -28
- package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -624
- package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -588
- package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -856
- package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -778
- package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -963
- package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -1076
- package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -697
- package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -671
- package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -607
- package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -907
- package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -783
- package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -980
- package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -485
- package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -521
- package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -858
- package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -934
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -27
- package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -26
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -23
- package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -26
- package/augment-extensions/domain-rules/mcp/README.md +150 -150
- package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -522
- package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -520
- package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -570
- package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -427
- package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -435
- package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -502
- package/augment-extensions/domain-rules/mcp/module.json +49 -49
- package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -595
- package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -345
- package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -687
- package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -636
- package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -484
- package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -360
- package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -393
- package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -194
- package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -625
- package/augment-extensions/domain-rules/security/README.md +41 -41
- package/augment-extensions/domain-rules/security/module.json +28 -28
- package/augment-extensions/domain-rules/security/rules/authentication-security.md +361 -361
- package/augment-extensions/domain-rules/security/rules/encryption.md +208 -208
- package/augment-extensions/domain-rules/security/rules/input-validation.md +294 -294
- package/augment-extensions/domain-rules/security/rules/owasp-top-10.md +339 -339
- package/augment-extensions/domain-rules/security/rules/secure-coding.md +293 -293
- package/augment-extensions/domain-rules/security/rules/web-security.md +268 -268
- package/augment-extensions/domain-rules/seo-sales-marketing/ANNOUNCEMENT.md +143 -0
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/README.md +140 -136
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/SCHEMA-VALIDATION-REPORT.md +216 -216
- package/augment-extensions/domain-rules/seo-sales-marketing/TEST-VALIDATION.md +129 -0
- package/augment-extensions/domain-rules/seo-sales-marketing/USAGE-GUIDES.md +254 -0
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/brand-kit-example.yaml +292 -292
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/campaign-brief-example.yaml +389 -389
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/content-calendar-example.yaml +643 -643
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/email-newsletter-example.md +376 -376
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/landing-page-example.md +934 -934
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/ppc-ad-copy-example.md +301 -301
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/seo-blog-post-example.md +347 -347
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/social-media-campaign-example.md +606 -606
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/module.json +50 -50
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/affiliate-influencer-marketing.md +593 -593
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/asset-management.md +418 -418
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/brand-consistency.md +210 -210
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/content-marketing.md +337 -337
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/conversion-optimization.md +455 -455
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/direct-sales.md +499 -499
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/email-marketing.md +439 -439
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/legal-compliance.md +227 -227
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/ppc-advertising.md +569 -569
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/seo-optimization.md +470 -470
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/social-media-marketing.md +414 -414
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/universal-marketing.md +177 -177
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/asset-inventory.schema.json +247 -247
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/brand-kit.schema.json +326 -326
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/campaign-brief.schema.json +342 -342
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/color-palette.schema.json +223 -223
- package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/content-template.schema.json +383 -383
- package/augment-extensions/domain-rules/wordpress/README.md +163 -163
- package/augment-extensions/domain-rules/wordpress/module.json +32 -32
- package/augment-extensions/domain-rules/wordpress/rules/coding-standards.md +617 -617
- package/augment-extensions/domain-rules/wordpress/rules/directory-structure.md +270 -270
- package/augment-extensions/domain-rules/wordpress/rules/file-patterns.md +423 -423
- package/augment-extensions/domain-rules/wordpress/rules/gutenberg-blocks.md +493 -493
- package/augment-extensions/domain-rules/wordpress/rules/performance.md +568 -568
- package/augment-extensions/domain-rules/wordpress/rules/plugin-development.md +510 -510
- package/augment-extensions/domain-rules/wordpress/rules/project-detection.md +251 -251
- package/augment-extensions/domain-rules/wordpress/rules/rest-api.md +501 -501
- package/augment-extensions/domain-rules/wordpress/rules/security.md +564 -564
- package/augment-extensions/domain-rules/wordpress/rules/theme-development.md +388 -388
- package/augment-extensions/domain-rules/wordpress/rules/woocommerce.md +441 -441
- package/augment-extensions/domain-rules/wordpress-plugin/README.md +139 -139
- package/augment-extensions/domain-rules/wordpress-plugin/examples/ajax-plugin.md +1599 -1599
- package/augment-extensions/domain-rules/wordpress-plugin/examples/custom-post-type-plugin.md +1727 -1727
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block-plugin.md +428 -428
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block.md +422 -422
- package/augment-extensions/domain-rules/wordpress-plugin/examples/mvc-plugin.md +1623 -1623
- package/augment-extensions/domain-rules/wordpress-plugin/examples/object-oriented-plugin.md +1343 -1343
- package/augment-extensions/domain-rules/wordpress-plugin/examples/rest-endpoint.md +734 -734
- package/augment-extensions/domain-rules/wordpress-plugin/examples/settings-page-plugin.md +1350 -1350
- package/augment-extensions/domain-rules/wordpress-plugin/examples/simple-procedural-plugin.md +503 -503
- package/augment-extensions/domain-rules/wordpress-plugin/examples/singleton-plugin.md +971 -971
- package/augment-extensions/domain-rules/wordpress-plugin/module.json +53 -53
- package/augment-extensions/domain-rules/wordpress-plugin/rules/activation-hooks.md +770 -770
- package/augment-extensions/domain-rules/wordpress-plugin/rules/admin-interface.md +874 -874
- package/augment-extensions/domain-rules/wordpress-plugin/rules/ajax-handlers.md +629 -629
- package/augment-extensions/domain-rules/wordpress-plugin/rules/asset-management.md +559 -559
- package/augment-extensions/domain-rules/wordpress-plugin/rules/context-providers.md +709 -709
- package/augment-extensions/domain-rules/wordpress-plugin/rules/cron-jobs.md +736 -736
- package/augment-extensions/domain-rules/wordpress-plugin/rules/database-management.md +1057 -1057
- package/augment-extensions/domain-rules/wordpress-plugin/rules/documentation-standards.md +463 -463
- package/augment-extensions/domain-rules/wordpress-plugin/rules/frontend-functionality.md +478 -478
- package/augment-extensions/domain-rules/wordpress-plugin/rules/gutenberg-blocks.md +818 -818
- package/augment-extensions/domain-rules/wordpress-plugin/rules/internationalization.md +416 -416
- package/augment-extensions/domain-rules/wordpress-plugin/rules/migration.md +667 -667
- package/augment-extensions/domain-rules/wordpress-plugin/rules/performance-optimization.md +878 -878
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-architecture.md +693 -693
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-structure.md +352 -352
- package/augment-extensions/domain-rules/wordpress-plugin/rules/rest-api.md +818 -818
- package/augment-extensions/domain-rules/wordpress-plugin/rules/scaffolding-workflow.md +624 -624
- package/augment-extensions/domain-rules/wordpress-plugin/rules/security-best-practices.md +866 -866
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing-patterns.md +1165 -1165
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing.md +414 -414
- package/augment-extensions/domain-rules/wordpress-plugin/rules/vscode-integration.md +751 -751
- package/augment-extensions/domain-rules/wordpress-plugin/rules/woocommerce-integration.md +949 -949
- package/augment-extensions/domain-rules/wordpress-plugin/rules/wordpress-org-submission.md +458 -458
- package/augment-extensions/examples/design-patterns/README.md +37 -37
- package/augment-extensions/examples/design-patterns/examples/behavioral-patterns.md +370 -370
- package/augment-extensions/examples/design-patterns/examples/creational-patterns.md +250 -250
- package/augment-extensions/examples/design-patterns/examples/structural-patterns.md +264 -264
- package/augment-extensions/examples/design-patterns/module.json +27 -27
- package/augment-extensions/examples/gutenberg-block-plugin/README.md +101 -101
- package/augment-extensions/examples/gutenberg-block-plugin/examples/testimonial-block.md +428 -428
- package/augment-extensions/examples/gutenberg-block-plugin/module.json +40 -40
- package/augment-extensions/examples/rest-api-plugin/README.md +98 -98
- package/augment-extensions/examples/rest-api-plugin/examples/task-manager-api.md +1299 -1299
- package/augment-extensions/examples/rest-api-plugin/module.json +40 -40
- package/augment-extensions/examples/woocommerce-extension/README.md +98 -98
- package/augment-extensions/examples/woocommerce-extension/examples/product-customizer.md +763 -763
- package/augment-extensions/examples/woocommerce-extension/module.json +40 -40
- package/augment-extensions/workflows/beads/README.md +135 -135
- package/augment-extensions/workflows/beads/examples/complete-workflow-example.md +278 -278
- package/augment-extensions/workflows/beads/module.json +55 -55
- package/augment-extensions/workflows/beads/rules/best-practices.md +398 -398
- package/augment-extensions/workflows/beads/rules/file-format.md +327 -327
- package/augment-extensions/workflows/beads/rules/manual-setup.md +315 -315
- package/augment-extensions/workflows/beads/rules/workflow.md +326 -326
- package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -145
- package/augment-extensions/workflows/beads-integration/README.md +143 -143
- package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -32
- package/augment-extensions/workflows/beads-integration/config/schema.json +140 -140
- package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -293
- package/augment-extensions/workflows/beads-integration/module.json +75 -75
- package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -219
- package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -256
- package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -607
- package/augment-extensions/workflows/database/README.md +195 -195
- package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -295
- package/augment-extensions/workflows/database/examples/migration-example.md +498 -498
- package/augment-extensions/workflows/database/examples/optimization-example.md +496 -496
- package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -444
- package/augment-extensions/workflows/database/module.json +42 -42
- package/augment-extensions/workflows/database/rules/data-migration.md +249 -249
- package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -339
- package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -352
- package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -435
- package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -535
- package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -305
- package/augment-extensions/workflows/database/rules/workflow.md +458 -458
- package/augment-extensions/workflows/wordpress-plugin/README.md +232 -232
- package/augment-extensions/workflows/wordpress-plugin/ai-prompts.md +839 -839
- package/augment-extensions/workflows/wordpress-plugin/bead-decomposition-patterns.md +854 -854
- package/augment-extensions/workflows/wordpress-plugin/examples/complete-plugin-example.md +540 -540
- package/augment-extensions/workflows/wordpress-plugin/examples/custom-post-type-example.md +1083 -1083
- package/augment-extensions/workflows/wordpress-plugin/examples/feature-addition-workflow.md +669 -669
- package/augment-extensions/workflows/wordpress-plugin/examples/plugin-creation-workflow.md +597 -597
- package/augment-extensions/workflows/wordpress-plugin/examples/secure-form-handler-example.md +925 -925
- package/augment-extensions/workflows/wordpress-plugin/examples/security-audit-workflow.md +752 -752
- package/augment-extensions/workflows/wordpress-plugin/examples/wordpress-org-submission-workflow.md +773 -773
- package/augment-extensions/workflows/wordpress-plugin/module.json +49 -49
- package/augment-extensions/workflows/wordpress-plugin/rules/best-practices.md +942 -942
- package/augment-extensions/workflows/wordpress-plugin/rules/development-workflow.md +702 -702
- package/augment-extensions/workflows/wordpress-plugin/rules/submission-workflow.md +728 -728
- package/augment-extensions/workflows/wordpress-plugin/rules/testing-workflow.md +775 -775
- package/augment-extensions/writing-standards/screenplay/README.md +339 -300
- package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -121
- package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -153
- package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -243
- package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -213
- package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -164
- package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -95
- package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -116
- package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -151
- package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -67
- package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -142
- package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -184
- package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -204
- package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -181
- package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -70
- package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -399
- package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -407
- package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -401
- package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -409
- package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -268
- package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -294
- package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -294
- package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -289
- package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -293
- package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -294
- package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -293
- package/augment-extensions/writing-standards/screenplay/module.json +124 -124
- package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -339
- package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -329
- package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -169
- package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -437
- package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -263
- package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -261
- package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -315
- package/augment-extensions/writing-standards/screenplay/rules/file-organization.md +213 -0
- package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -413
- package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -372
- package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -374
- package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -443
- package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -207
- package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -444
- package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -331
- package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -334
- package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -299
- package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -263
- package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -412
- package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -370
- package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -374
- package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -339
- package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -277
- package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -393
- package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -332
- package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -247
- package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -200
- package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -233
- package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -245
- package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -221
- package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -159
- package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -1449
- package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -64
- package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -520
- package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -499
- package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -497
- package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -492
- package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -509
- package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -490
- package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -499
- package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -501
- package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -499
- package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -498
- package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -499
- package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -508
- package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -500
- package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -158
- package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -643
- package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -311
- package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -562
- package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -538
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -432
- package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -637
- package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -66
- package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -2
- package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -458
- package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -490
- package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -458
- package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -459
- package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -491
- package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -491
- package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -490
- package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -464
- package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -461
- package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -489
- package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -494
- package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -483
- package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -489
- package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -496
- package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -463
- package/augment-extensions/writing-standards/screenplay/utils/__tests__/file-organization.test.ts +169 -0
- package/augment-extensions/writing-standards/screenplay/utils/file-organization.ts +165 -0
- package/cli/MODULES.md +302 -302
- package/cli/dist/cli.js +109 -22
- package/cli/dist/cli.js.map +1 -1
- package/cli/dist/commands/gui.d.ts.map +1 -1
- package/cli/dist/commands/gui.js +54 -6
- package/cli/dist/commands/gui.js.map +1 -1
- package/cli/dist/commands/init.d.ts.map +1 -1
- package/cli/dist/commands/init.js +76 -23
- package/cli/dist/commands/init.js.map +1 -1
- package/cli/dist/commands/self-remove.d.ts.map +1 -1
- package/cli/dist/commands/self-remove.js +48 -74
- package/cli/dist/commands/self-remove.js.map +1 -1
- package/cli/dist/commands/show.d.ts +11 -0
- package/cli/dist/commands/show.d.ts.map +1 -1
- package/cli/dist/commands/show.js +120 -0
- package/cli/dist/commands/show.js.map +1 -1
- package/cli/dist/commands/showCompleted.d.ts +21 -0
- package/cli/dist/commands/showCompleted.d.ts.map +1 -0
- package/cli/dist/commands/showCompleted.js +225 -0
- package/cli/dist/commands/showCompleted.js.map +1 -0
- package/cli/dist/commands/skill.js +88 -88
- package/cli/dist/commands/update.d.ts +2 -0
- package/cli/dist/commands/update.d.ts.map +1 -1
- package/cli/dist/commands/update.js +67 -1
- package/cli/dist/commands/update.js.map +1 -1
- package/cli/dist/utils/beadsCompletedChecker.d.ts +72 -0
- package/cli/dist/utils/beadsCompletedChecker.d.ts.map +1 -0
- package/cli/dist/utils/beadsCompletedChecker.js +198 -0
- package/cli/dist/utils/beadsCompletedChecker.js.map +1 -0
- package/cli/dist/utils/catalog-sync.js +13 -13
- package/cli/dist/utils/extractCommandHelp.d.ts +51 -0
- package/cli/dist/utils/extractCommandHelp.d.ts.map +1 -0
- package/cli/dist/utils/extractCommandHelp.js +250 -0
- package/cli/dist/utils/extractCommandHelp.js.map +1 -0
- package/cli/dist/utils/install-rules.js +55 -55
- package/cli/dist/utils/mcp-integration.js +44 -44
- package/cli/dist/utils/rule-install-hooks.js +8 -8
- package/modules.md +667 -630
- package/package.json +85 -85
|
@@ -1,392 +1,392 @@
|
|
|
1
|
-
# Performance Optimization
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Performance optimization is crucial for scalable PHP applications. This document defines best practices for opcode caching, database optimization, and caching strategies.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Opcode Caching
|
|
10
|
-
|
|
11
|
-
### Enable OPcache
|
|
12
|
-
|
|
13
|
-
**Rules:**
|
|
14
|
-
- OPcache MUST be enabled in production
|
|
15
|
-
- Configure OPcache settings appropriately
|
|
16
|
-
- Avoid file-based caching in favor of memory caching
|
|
17
|
-
|
|
18
|
-
**Configuration (php.ini):**
|
|
19
|
-
```ini
|
|
20
|
-
; ✅ Good - Production OPcache settings
|
|
21
|
-
opcache.enable=1
|
|
22
|
-
opcache.memory_consumption=256
|
|
23
|
-
opcache.interned_strings_buffer=16
|
|
24
|
-
opcache.max_accelerated_files=10000
|
|
25
|
-
opcache.validate_timestamps=0 ; Disable in production
|
|
26
|
-
opcache.revalidate_freq=0
|
|
27
|
-
opcache.fast_shutdown=1
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
**Deployment:**
|
|
31
|
-
```php
|
|
32
|
-
// ✅ Good - Clear OPcache on deployment
|
|
33
|
-
opcache_reset();
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## Database Query Optimization
|
|
39
|
-
|
|
40
|
-
### Avoid N+1 Query Problems
|
|
41
|
-
|
|
42
|
-
**Rules:**
|
|
43
|
-
- Use eager loading for related data
|
|
44
|
-
- Avoid queries inside loops
|
|
45
|
-
- Use joins or batch loading
|
|
46
|
-
|
|
47
|
-
**Examples:**
|
|
48
|
-
```php
|
|
49
|
-
// ✅ Good - Eager loading
|
|
50
|
-
$users = User::with('posts', 'comments')->get();
|
|
51
|
-
foreach ($users as $user) {
|
|
52
|
-
echo $user->posts->count(); // No additional query
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// ✅ Good - Batch loading
|
|
56
|
-
$userIds = [1, 2, 3, 4, 5];
|
|
57
|
-
$users = User::whereIn('id', $userIds)->get();
|
|
58
|
-
|
|
59
|
-
// ❌ Bad - N+1 problem
|
|
60
|
-
$users = User::all();
|
|
61
|
-
foreach ($users as $user) {
|
|
62
|
-
echo $user->posts()->count(); // Query for each user!
|
|
63
|
-
}
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### Use Indexes
|
|
67
|
-
|
|
68
|
-
**Rules:**
|
|
69
|
-
- Add indexes to frequently queried columns
|
|
70
|
-
- Use composite indexes for multi-column queries
|
|
71
|
-
- Avoid over-indexing (impacts write performance)
|
|
72
|
-
|
|
73
|
-
**Examples:**
|
|
74
|
-
```php
|
|
75
|
-
// ✅ Good - Migration with indexes
|
|
76
|
-
Schema::create('users', function (Blueprint $table) {
|
|
77
|
-
$table->id();
|
|
78
|
-
$table->string('email')->unique(); // Index for unique constraint
|
|
79
|
-
$table->string('username')->index(); // Index for searches
|
|
80
|
-
$table->timestamp('created_at')->index(); // Index for sorting
|
|
81
|
-
$table->index(['status', 'created_at']); // Composite index
|
|
82
|
-
});
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### Optimize Query Selection
|
|
86
|
-
|
|
87
|
-
**Rules:**
|
|
88
|
-
- Select only needed columns
|
|
89
|
-
- Use `exists()` instead of `count()` for existence checks
|
|
90
|
-
- Limit result sets appropriately
|
|
91
|
-
|
|
92
|
-
**Examples:**
|
|
93
|
-
```php
|
|
94
|
-
// ✅ Good - Select specific columns
|
|
95
|
-
$users = User::select('id', 'name', 'email')->get();
|
|
96
|
-
|
|
97
|
-
// ✅ Good - Check existence
|
|
98
|
-
if (User::where('email', $email)->exists()) {
|
|
99
|
-
// Email exists
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// ✅ Good - Limit results
|
|
103
|
-
$recentPosts = Post::orderBy('created_at', 'desc')->limit(10)->get();
|
|
104
|
-
|
|
105
|
-
// ❌ Bad - Select all columns
|
|
106
|
-
$users = User::all(); // Loads all columns
|
|
107
|
-
|
|
108
|
-
// ❌ Bad - Count for existence
|
|
109
|
-
if (User::where('email', $email)->count() > 0) { // Slower than exists()
|
|
110
|
-
// Email exists
|
|
111
|
-
}
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
### Use Query Caching
|
|
115
|
-
|
|
116
|
-
**Rules:**
|
|
117
|
-
- Cache frequently accessed query results
|
|
118
|
-
- Invalidate cache when data changes
|
|
119
|
-
- Use appropriate cache TTL
|
|
120
|
-
|
|
121
|
-
**Examples:**
|
|
122
|
-
```php
|
|
123
|
-
// ✅ Good - Cache query results
|
|
124
|
-
$users = Cache::remember('active_users', 3600, function () {
|
|
125
|
-
return User::where('status', 'active')->get();
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
// ✅ Good - Invalidate cache on update
|
|
129
|
-
function updateUser(User $user, array $data): User
|
|
130
|
-
{
|
|
131
|
-
$user->update($data);
|
|
132
|
-
Cache::forget('active_users');
|
|
133
|
-
return $user;
|
|
134
|
-
}
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## Caching Strategies
|
|
140
|
-
|
|
141
|
-
### Use Memory Caching
|
|
142
|
-
|
|
143
|
-
**Rules:**
|
|
144
|
-
- Use Redis or Memcached for distributed caching
|
|
145
|
-
- Avoid file-based caching in production
|
|
146
|
-
- Implement cache warming for critical data
|
|
147
|
-
|
|
148
|
-
**Examples:**
|
|
149
|
-
```php
|
|
150
|
-
// ✅ Good - Redis caching
|
|
151
|
-
use Illuminate\Support\Facades\Redis;
|
|
152
|
-
|
|
153
|
-
function getUserPreferences(int $userId): array
|
|
154
|
-
{
|
|
155
|
-
$cacheKey = "user_prefs:{$userId}";
|
|
156
|
-
|
|
157
|
-
$cached = Redis::get($cacheKey);
|
|
158
|
-
if ($cached !== null) {
|
|
159
|
-
return json_decode($cached, true);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
$prefs = $this->loadPreferencesFromDb($userId);
|
|
163
|
-
Redis::setex($cacheKey, 3600, json_encode($prefs));
|
|
164
|
-
|
|
165
|
-
return $prefs;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// ✅ Good - Cache warming
|
|
169
|
-
function warmCache(): void
|
|
170
|
-
{
|
|
171
|
-
$popularProducts = Product::orderBy('views', 'desc')->limit(100)->get();
|
|
172
|
-
|
|
173
|
-
foreach ($popularProducts as $product) {
|
|
174
|
-
Cache::put("product:{$product->id}", $product, 3600);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### Cache Invalidation
|
|
180
|
-
|
|
181
|
-
**Rules:**
|
|
182
|
-
- Define clear cache invalidation strategy
|
|
183
|
-
- Use cache tags for grouped invalidation
|
|
184
|
-
- Implement versioned cache keys
|
|
185
|
-
|
|
186
|
-
**Examples:**
|
|
187
|
-
```php
|
|
188
|
-
// ✅ Good - Cache tags (Laravel)
|
|
189
|
-
Cache::tags(['users', 'active'])->put('active_users', $users, 3600);
|
|
190
|
-
Cache::tags(['users'])->flush(); // Invalidate all user caches
|
|
191
|
-
|
|
192
|
-
// ✅ Good - Versioned cache keys
|
|
193
|
-
function getCacheKey(string $key): string
|
|
194
|
-
{
|
|
195
|
-
$version = config('cache.version', 1);
|
|
196
|
-
return "{$key}:v{$version}";
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
$data = Cache::get(getCacheKey('user_stats'));
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
### Cache Namespacing
|
|
203
|
-
|
|
204
|
-
**Rules:**
|
|
205
|
-
- Namespace cache keys to avoid collisions
|
|
206
|
-
- Include relevant identifiers in keys
|
|
207
|
-
- Use consistent key naming conventions
|
|
208
|
-
|
|
209
|
-
**Examples:**
|
|
210
|
-
```php
|
|
211
|
-
// ✅ Good - Namespaced keys
|
|
212
|
-
$userKey = "user:{$userId}:profile";
|
|
213
|
-
$orderKey = "order:{$orderId}:items";
|
|
214
|
-
$statsKey = "stats:daily:{$date}";
|
|
215
|
-
|
|
216
|
-
// ❌ Bad - Generic keys
|
|
217
|
-
$key = "profile"; // Collision risk
|
|
218
|
-
$key = "items"; // Collision risk
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
---
|
|
222
|
-
|
|
223
|
-
## Code Optimization
|
|
224
|
-
|
|
225
|
-
### Avoid Unnecessary Computations
|
|
226
|
-
|
|
227
|
-
**Rules:**
|
|
228
|
-
- Cache computed values
|
|
229
|
-
- Avoid repeated function calls in loops
|
|
230
|
-
- Use lazy loading when appropriate
|
|
231
|
-
|
|
232
|
-
**Examples:**
|
|
233
|
-
```php
|
|
234
|
-
// ✅ Good - Cache computed value
|
|
235
|
-
$count = count($items);
|
|
236
|
-
for ($i = 0; $i < $count; $i++) {
|
|
237
|
-
// Process item
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// ✅ Good - Lazy loading
|
|
241
|
-
class Report
|
|
242
|
-
{
|
|
243
|
-
private ?array $data = null;
|
|
244
|
-
|
|
245
|
-
public function getData(): array
|
|
246
|
-
{
|
|
247
|
-
if ($this->data === null) {
|
|
248
|
-
$this->data = $this->loadData();
|
|
249
|
-
}
|
|
250
|
-
return $this->data;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
// ❌ Bad - Repeated computation
|
|
255
|
-
for ($i = 0; $i < count($items); $i++) { // count() called each iteration
|
|
256
|
-
// Process item
|
|
257
|
-
}
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
### Use Efficient Data Structures
|
|
261
|
-
|
|
262
|
-
**Rules:**
|
|
263
|
-
- Use arrays for indexed access
|
|
264
|
-
- Use `isset()` instead of `array_key_exists()` when possible
|
|
265
|
-
- Use generators for large datasets
|
|
266
|
-
|
|
267
|
-
**Examples:**
|
|
268
|
-
```php
|
|
269
|
-
// ✅ Good - Generator for large dataset
|
|
270
|
-
function readLargeFile(string $path): Generator
|
|
271
|
-
{
|
|
272
|
-
$handle = fopen($path, 'r');
|
|
273
|
-
|
|
274
|
-
while (($line = fgets($handle)) !== false) {
|
|
275
|
-
yield $line;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
fclose($handle);
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
foreach (readLargeFile('large.txt') as $line) {
|
|
282
|
-
// Process line without loading entire file
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
// ✅ Good - isset() for existence check
|
|
286
|
-
if (isset($array[$key])) {
|
|
287
|
-
// Key exists
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
// ❌ Bad - Load entire file into memory
|
|
291
|
-
$lines = file('large.txt'); // Memory intensive
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
### Optimize String Operations
|
|
295
|
-
|
|
296
|
-
**Rules:**
|
|
297
|
-
- Use single quotes for simple strings
|
|
298
|
-
- Use string interpolation instead of concatenation
|
|
299
|
-
- Use `implode()` for joining arrays
|
|
300
|
-
|
|
301
|
-
**Examples:**
|
|
302
|
-
```php
|
|
303
|
-
// ✅ Good - Single quotes (faster)
|
|
304
|
-
$name = 'John Doe';
|
|
305
|
-
|
|
306
|
-
// ✅ Good - String interpolation
|
|
307
|
-
$message = "Hello, {$name}!";
|
|
308
|
-
|
|
309
|
-
// ✅ Good - implode() for arrays
|
|
310
|
-
$parts = ['Hello', 'World'];
|
|
311
|
-
$result = implode(' ', $parts);
|
|
312
|
-
|
|
313
|
-
// ❌ Bad - Concatenation in loop
|
|
314
|
-
$result = '';
|
|
315
|
-
foreach ($items as $item) {
|
|
316
|
-
$result .= $item . ', '; // Creates new string each iteration
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// ✅ Better - Build array then implode
|
|
320
|
-
$parts = [];
|
|
321
|
-
foreach ($items as $item) {
|
|
322
|
-
$parts[] = $item;
|
|
323
|
-
}
|
|
324
|
-
$result = implode(', ', $parts);
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
---
|
|
328
|
-
|
|
329
|
-
## Asset Optimization
|
|
330
|
-
|
|
331
|
-
### Minimize HTTP Requests
|
|
332
|
-
|
|
333
|
-
**Rules:**
|
|
334
|
-
- Combine CSS and JavaScript files
|
|
335
|
-
- Use asset bundlers (Webpack, Vite)
|
|
336
|
-
- Implement HTTP/2 server push when beneficial
|
|
337
|
-
|
|
338
|
-
### Enable Compression
|
|
339
|
-
|
|
340
|
-
**Rules:**
|
|
341
|
-
- Enable gzip/brotli compression
|
|
342
|
-
- Compress responses at web server level
|
|
343
|
-
|
|
344
|
-
**Configuration (Apache .htaccess):**
|
|
345
|
-
```apache
|
|
346
|
-
# ✅ Good - Enable gzip compression
|
|
347
|
-
<IfModule mod_deflate.c>
|
|
348
|
-
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
|
|
349
|
-
</IfModule>
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
### Use CDN for Static Assets
|
|
353
|
-
|
|
354
|
-
**Rules:**
|
|
355
|
-
- Serve static assets from CDN
|
|
356
|
-
- Use versioned asset URLs for cache busting
|
|
357
|
-
|
|
358
|
-
**Examples:**
|
|
359
|
-
```php
|
|
360
|
-
// ✅ Good - CDN with versioning
|
|
361
|
-
function assetUrl(string $path): string
|
|
362
|
-
{
|
|
363
|
-
$version = config('app.version');
|
|
364
|
-
$cdnUrl = config('app.cdn_url');
|
|
365
|
-
return "{$cdnUrl}/{$path}?v={$version}";
|
|
366
|
-
}
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
---
|
|
370
|
-
|
|
371
|
-
## Profiling and Monitoring
|
|
372
|
-
|
|
373
|
-
### Use Profiling Tools
|
|
374
|
-
|
|
375
|
-
**Tools:**
|
|
376
|
-
- Xdebug profiler
|
|
377
|
-
- Blackfire.io
|
|
378
|
-
- New Relic
|
|
379
|
-
- Tideways
|
|
380
|
-
|
|
381
|
-
**Examples:**
|
|
382
|
-
```php
|
|
383
|
-
// ✅ Good - Manual profiling
|
|
384
|
-
$start = microtime(true);
|
|
385
|
-
|
|
386
|
-
// Code to profile
|
|
387
|
-
processData($data);
|
|
388
|
-
|
|
389
|
-
$duration = microtime(true) - $start;
|
|
390
|
-
logger()->info('Processing time', ['duration' => $duration]);
|
|
391
|
-
```
|
|
392
|
-
|
|
1
|
+
# Performance Optimization
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Performance optimization is crucial for scalable PHP applications. This document defines best practices for opcode caching, database optimization, and caching strategies.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Opcode Caching
|
|
10
|
+
|
|
11
|
+
### Enable OPcache
|
|
12
|
+
|
|
13
|
+
**Rules:**
|
|
14
|
+
- OPcache MUST be enabled in production
|
|
15
|
+
- Configure OPcache settings appropriately
|
|
16
|
+
- Avoid file-based caching in favor of memory caching
|
|
17
|
+
|
|
18
|
+
**Configuration (php.ini):**
|
|
19
|
+
```ini
|
|
20
|
+
; ✅ Good - Production OPcache settings
|
|
21
|
+
opcache.enable=1
|
|
22
|
+
opcache.memory_consumption=256
|
|
23
|
+
opcache.interned_strings_buffer=16
|
|
24
|
+
opcache.max_accelerated_files=10000
|
|
25
|
+
opcache.validate_timestamps=0 ; Disable in production
|
|
26
|
+
opcache.revalidate_freq=0
|
|
27
|
+
opcache.fast_shutdown=1
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Deployment:**
|
|
31
|
+
```php
|
|
32
|
+
// ✅ Good - Clear OPcache on deployment
|
|
33
|
+
opcache_reset();
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Database Query Optimization
|
|
39
|
+
|
|
40
|
+
### Avoid N+1 Query Problems
|
|
41
|
+
|
|
42
|
+
**Rules:**
|
|
43
|
+
- Use eager loading for related data
|
|
44
|
+
- Avoid queries inside loops
|
|
45
|
+
- Use joins or batch loading
|
|
46
|
+
|
|
47
|
+
**Examples:**
|
|
48
|
+
```php
|
|
49
|
+
// ✅ Good - Eager loading
|
|
50
|
+
$users = User::with('posts', 'comments')->get();
|
|
51
|
+
foreach ($users as $user) {
|
|
52
|
+
echo $user->posts->count(); // No additional query
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// ✅ Good - Batch loading
|
|
56
|
+
$userIds = [1, 2, 3, 4, 5];
|
|
57
|
+
$users = User::whereIn('id', $userIds)->get();
|
|
58
|
+
|
|
59
|
+
// ❌ Bad - N+1 problem
|
|
60
|
+
$users = User::all();
|
|
61
|
+
foreach ($users as $user) {
|
|
62
|
+
echo $user->posts()->count(); // Query for each user!
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Use Indexes
|
|
67
|
+
|
|
68
|
+
**Rules:**
|
|
69
|
+
- Add indexes to frequently queried columns
|
|
70
|
+
- Use composite indexes for multi-column queries
|
|
71
|
+
- Avoid over-indexing (impacts write performance)
|
|
72
|
+
|
|
73
|
+
**Examples:**
|
|
74
|
+
```php
|
|
75
|
+
// ✅ Good - Migration with indexes
|
|
76
|
+
Schema::create('users', function (Blueprint $table) {
|
|
77
|
+
$table->id();
|
|
78
|
+
$table->string('email')->unique(); // Index for unique constraint
|
|
79
|
+
$table->string('username')->index(); // Index for searches
|
|
80
|
+
$table->timestamp('created_at')->index(); // Index for sorting
|
|
81
|
+
$table->index(['status', 'created_at']); // Composite index
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Optimize Query Selection
|
|
86
|
+
|
|
87
|
+
**Rules:**
|
|
88
|
+
- Select only needed columns
|
|
89
|
+
- Use `exists()` instead of `count()` for existence checks
|
|
90
|
+
- Limit result sets appropriately
|
|
91
|
+
|
|
92
|
+
**Examples:**
|
|
93
|
+
```php
|
|
94
|
+
// ✅ Good - Select specific columns
|
|
95
|
+
$users = User::select('id', 'name', 'email')->get();
|
|
96
|
+
|
|
97
|
+
// ✅ Good - Check existence
|
|
98
|
+
if (User::where('email', $email)->exists()) {
|
|
99
|
+
// Email exists
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// ✅ Good - Limit results
|
|
103
|
+
$recentPosts = Post::orderBy('created_at', 'desc')->limit(10)->get();
|
|
104
|
+
|
|
105
|
+
// ❌ Bad - Select all columns
|
|
106
|
+
$users = User::all(); // Loads all columns
|
|
107
|
+
|
|
108
|
+
// ❌ Bad - Count for existence
|
|
109
|
+
if (User::where('email', $email)->count() > 0) { // Slower than exists()
|
|
110
|
+
// Email exists
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Use Query Caching
|
|
115
|
+
|
|
116
|
+
**Rules:**
|
|
117
|
+
- Cache frequently accessed query results
|
|
118
|
+
- Invalidate cache when data changes
|
|
119
|
+
- Use appropriate cache TTL
|
|
120
|
+
|
|
121
|
+
**Examples:**
|
|
122
|
+
```php
|
|
123
|
+
// ✅ Good - Cache query results
|
|
124
|
+
$users = Cache::remember('active_users', 3600, function () {
|
|
125
|
+
return User::where('status', 'active')->get();
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// ✅ Good - Invalidate cache on update
|
|
129
|
+
function updateUser(User $user, array $data): User
|
|
130
|
+
{
|
|
131
|
+
$user->update($data);
|
|
132
|
+
Cache::forget('active_users');
|
|
133
|
+
return $user;
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Caching Strategies
|
|
140
|
+
|
|
141
|
+
### Use Memory Caching
|
|
142
|
+
|
|
143
|
+
**Rules:**
|
|
144
|
+
- Use Redis or Memcached for distributed caching
|
|
145
|
+
- Avoid file-based caching in production
|
|
146
|
+
- Implement cache warming for critical data
|
|
147
|
+
|
|
148
|
+
**Examples:**
|
|
149
|
+
```php
|
|
150
|
+
// ✅ Good - Redis caching
|
|
151
|
+
use Illuminate\Support\Facades\Redis;
|
|
152
|
+
|
|
153
|
+
function getUserPreferences(int $userId): array
|
|
154
|
+
{
|
|
155
|
+
$cacheKey = "user_prefs:{$userId}";
|
|
156
|
+
|
|
157
|
+
$cached = Redis::get($cacheKey);
|
|
158
|
+
if ($cached !== null) {
|
|
159
|
+
return json_decode($cached, true);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
$prefs = $this->loadPreferencesFromDb($userId);
|
|
163
|
+
Redis::setex($cacheKey, 3600, json_encode($prefs));
|
|
164
|
+
|
|
165
|
+
return $prefs;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// ✅ Good - Cache warming
|
|
169
|
+
function warmCache(): void
|
|
170
|
+
{
|
|
171
|
+
$popularProducts = Product::orderBy('views', 'desc')->limit(100)->get();
|
|
172
|
+
|
|
173
|
+
foreach ($popularProducts as $product) {
|
|
174
|
+
Cache::put("product:{$product->id}", $product, 3600);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Cache Invalidation
|
|
180
|
+
|
|
181
|
+
**Rules:**
|
|
182
|
+
- Define clear cache invalidation strategy
|
|
183
|
+
- Use cache tags for grouped invalidation
|
|
184
|
+
- Implement versioned cache keys
|
|
185
|
+
|
|
186
|
+
**Examples:**
|
|
187
|
+
```php
|
|
188
|
+
// ✅ Good - Cache tags (Laravel)
|
|
189
|
+
Cache::tags(['users', 'active'])->put('active_users', $users, 3600);
|
|
190
|
+
Cache::tags(['users'])->flush(); // Invalidate all user caches
|
|
191
|
+
|
|
192
|
+
// ✅ Good - Versioned cache keys
|
|
193
|
+
function getCacheKey(string $key): string
|
|
194
|
+
{
|
|
195
|
+
$version = config('cache.version', 1);
|
|
196
|
+
return "{$key}:v{$version}";
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
$data = Cache::get(getCacheKey('user_stats'));
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Cache Namespacing
|
|
203
|
+
|
|
204
|
+
**Rules:**
|
|
205
|
+
- Namespace cache keys to avoid collisions
|
|
206
|
+
- Include relevant identifiers in keys
|
|
207
|
+
- Use consistent key naming conventions
|
|
208
|
+
|
|
209
|
+
**Examples:**
|
|
210
|
+
```php
|
|
211
|
+
// ✅ Good - Namespaced keys
|
|
212
|
+
$userKey = "user:{$userId}:profile";
|
|
213
|
+
$orderKey = "order:{$orderId}:items";
|
|
214
|
+
$statsKey = "stats:daily:{$date}";
|
|
215
|
+
|
|
216
|
+
// ❌ Bad - Generic keys
|
|
217
|
+
$key = "profile"; // Collision risk
|
|
218
|
+
$key = "items"; // Collision risk
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Code Optimization
|
|
224
|
+
|
|
225
|
+
### Avoid Unnecessary Computations
|
|
226
|
+
|
|
227
|
+
**Rules:**
|
|
228
|
+
- Cache computed values
|
|
229
|
+
- Avoid repeated function calls in loops
|
|
230
|
+
- Use lazy loading when appropriate
|
|
231
|
+
|
|
232
|
+
**Examples:**
|
|
233
|
+
```php
|
|
234
|
+
// ✅ Good - Cache computed value
|
|
235
|
+
$count = count($items);
|
|
236
|
+
for ($i = 0; $i < $count; $i++) {
|
|
237
|
+
// Process item
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// ✅ Good - Lazy loading
|
|
241
|
+
class Report
|
|
242
|
+
{
|
|
243
|
+
private ?array $data = null;
|
|
244
|
+
|
|
245
|
+
public function getData(): array
|
|
246
|
+
{
|
|
247
|
+
if ($this->data === null) {
|
|
248
|
+
$this->data = $this->loadData();
|
|
249
|
+
}
|
|
250
|
+
return $this->data;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// ❌ Bad - Repeated computation
|
|
255
|
+
for ($i = 0; $i < count($items); $i++) { // count() called each iteration
|
|
256
|
+
// Process item
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Use Efficient Data Structures
|
|
261
|
+
|
|
262
|
+
**Rules:**
|
|
263
|
+
- Use arrays for indexed access
|
|
264
|
+
- Use `isset()` instead of `array_key_exists()` when possible
|
|
265
|
+
- Use generators for large datasets
|
|
266
|
+
|
|
267
|
+
**Examples:**
|
|
268
|
+
```php
|
|
269
|
+
// ✅ Good - Generator for large dataset
|
|
270
|
+
function readLargeFile(string $path): Generator
|
|
271
|
+
{
|
|
272
|
+
$handle = fopen($path, 'r');
|
|
273
|
+
|
|
274
|
+
while (($line = fgets($handle)) !== false) {
|
|
275
|
+
yield $line;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
fclose($handle);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
foreach (readLargeFile('large.txt') as $line) {
|
|
282
|
+
// Process line without loading entire file
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// ✅ Good - isset() for existence check
|
|
286
|
+
if (isset($array[$key])) {
|
|
287
|
+
// Key exists
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// ❌ Bad - Load entire file into memory
|
|
291
|
+
$lines = file('large.txt'); // Memory intensive
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Optimize String Operations
|
|
295
|
+
|
|
296
|
+
**Rules:**
|
|
297
|
+
- Use single quotes for simple strings
|
|
298
|
+
- Use string interpolation instead of concatenation
|
|
299
|
+
- Use `implode()` for joining arrays
|
|
300
|
+
|
|
301
|
+
**Examples:**
|
|
302
|
+
```php
|
|
303
|
+
// ✅ Good - Single quotes (faster)
|
|
304
|
+
$name = 'John Doe';
|
|
305
|
+
|
|
306
|
+
// ✅ Good - String interpolation
|
|
307
|
+
$message = "Hello, {$name}!";
|
|
308
|
+
|
|
309
|
+
// ✅ Good - implode() for arrays
|
|
310
|
+
$parts = ['Hello', 'World'];
|
|
311
|
+
$result = implode(' ', $parts);
|
|
312
|
+
|
|
313
|
+
// ❌ Bad - Concatenation in loop
|
|
314
|
+
$result = '';
|
|
315
|
+
foreach ($items as $item) {
|
|
316
|
+
$result .= $item . ', '; // Creates new string each iteration
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// ✅ Better - Build array then implode
|
|
320
|
+
$parts = [];
|
|
321
|
+
foreach ($items as $item) {
|
|
322
|
+
$parts[] = $item;
|
|
323
|
+
}
|
|
324
|
+
$result = implode(', ', $parts);
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## Asset Optimization
|
|
330
|
+
|
|
331
|
+
### Minimize HTTP Requests
|
|
332
|
+
|
|
333
|
+
**Rules:**
|
|
334
|
+
- Combine CSS and JavaScript files
|
|
335
|
+
- Use asset bundlers (Webpack, Vite)
|
|
336
|
+
- Implement HTTP/2 server push when beneficial
|
|
337
|
+
|
|
338
|
+
### Enable Compression
|
|
339
|
+
|
|
340
|
+
**Rules:**
|
|
341
|
+
- Enable gzip/brotli compression
|
|
342
|
+
- Compress responses at web server level
|
|
343
|
+
|
|
344
|
+
**Configuration (Apache .htaccess):**
|
|
345
|
+
```apache
|
|
346
|
+
# ✅ Good - Enable gzip compression
|
|
347
|
+
<IfModule mod_deflate.c>
|
|
348
|
+
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
|
|
349
|
+
</IfModule>
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### Use CDN for Static Assets
|
|
353
|
+
|
|
354
|
+
**Rules:**
|
|
355
|
+
- Serve static assets from CDN
|
|
356
|
+
- Use versioned asset URLs for cache busting
|
|
357
|
+
|
|
358
|
+
**Examples:**
|
|
359
|
+
```php
|
|
360
|
+
// ✅ Good - CDN with versioning
|
|
361
|
+
function assetUrl(string $path): string
|
|
362
|
+
{
|
|
363
|
+
$version = config('app.version');
|
|
364
|
+
$cdnUrl = config('app.cdn_url');
|
|
365
|
+
return "{$cdnUrl}/{$path}?v={$version}";
|
|
366
|
+
}
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## Profiling and Monitoring
|
|
372
|
+
|
|
373
|
+
### Use Profiling Tools
|
|
374
|
+
|
|
375
|
+
**Tools:**
|
|
376
|
+
- Xdebug profiler
|
|
377
|
+
- Blackfire.io
|
|
378
|
+
- New Relic
|
|
379
|
+
- Tideways
|
|
380
|
+
|
|
381
|
+
**Examples:**
|
|
382
|
+
```php
|
|
383
|
+
// ✅ Good - Manual profiling
|
|
384
|
+
$start = microtime(true);
|
|
385
|
+
|
|
386
|
+
// Code to profile
|
|
387
|
+
processData($data);
|
|
388
|
+
|
|
389
|
+
$duration = microtime(true) - $start;
|
|
390
|
+
logger()->info('Processing time', ['duration' => $duration]);
|
|
391
|
+
```
|
|
392
|
+
|