Benchmarks
Plugin footprint 82% from 16 tests
Installer Passed 1 test
🔺 Critical test (weight: 50) | All plugins must install correctly, without throwing any errors, warnings, or notices
Installer ran successfully
Server metrics [RAM: ▲0.84MB] [CPU: ▲566.45ms] 50% from 4 tests
Analyzing server-side resources used by Workshop Butler
Please fix the following
- CPU: Try to keep total CPU usage under 500.00ms (currently 3,743.93ms on /wp-admin/options-general.php?page=WorkshopButler)
- Extra CPU: The extra CPU usage should be kept under 200.00ms (currently 566.45ms on /wp-admin/options-general.php?page=WorkshopButler)
Page | Memory (MB) | CPU Time (ms) |
---|---|---|
Home / | 4.20 ▲0.74 | 59.64 ▲24.65 |
Dashboard /wp-admin | 4.52 ▲1.21 | 965.57 ▲916.18 |
Posts /wp-admin/edit.php | 4.25 ▲0.89 | 3,908.75 ▲3,861.93 |
Add New Post /wp-admin/post-new.php | 6.75 ▲0.87 | 761.81 ▲673.77 |
Media Library /wp-admin/upload.php | 4.08 ▲0.85 | 687.16 ▲651.19 |
Workshop Butler /wp-admin/options-general.php?page=WorkshopButler | 5.35 | 3,743.93 |
Server storage [IO: ▲9.53MB] [DB: ▲0.14MB] Passed 3 tests
Analyzing filesystem and database footprints of this plugin
This plugin was installed successfully
Filesystem: 1,244 new files
Database: no new tables, 10 new options
New WordPress options |
---|
widget_recent-comments |
db_upgraded |
widget_recent-posts |
widget_theysaidso_widget |
theysaidso_admin_options |
can_compress_scripts |
wsb-settings-transients |
wsb-internal-settings |
widget_wsb_workshop_widget |
wsb-settings |
Browser metrics Passed 4 tests
Checking browser requirements for Workshop Butler
This plugin has a minimal impact on browser resources
Page | Nodes | Memory (MB) | Script (ms) | Layout (ms) |
---|---|---|---|---|
Home / | 2,865 ▲104 | 14.35 ▼0.20 | 1.73 ▲0.21 | 37.19 ▼0.25 |
Dashboard /wp-admin | 2,258 ▲81 | 5.55 ▼0.11 | 80.78 ▼14.78 | 38.32 ▼4.55 |
Posts /wp-admin/edit.php | 2,101 ▲4 | 2.00 ▼0.02 | 33.35 ▼2.62 | 38.72 ▲7.15 |
Add New Post /wp-admin/post-new.php | 1,537 ▲9 | 18.13 ▼5.12 | 604.84 ▼72.10 | 57.77 ▲0.32 |
Media Library /wp-admin/upload.php | 1,407 ▲10 | 4.16 ▲0.01 | 89.25 ▼14.20 | 43.29 ▼1.24 |
Workshop Butler /wp-admin/options-general.php?page=WorkshopButler | 1,879 | 3.65 | 75.28 | 81.94 |
Uninstaller [IO: ▲0.00MB] [DB: ▲0.14MB] 75% from 4 tests
🔸 Tests weight: 35 | Checking the uninstaller removed all traces of the plugin
It is recommended to fix the following
- Zombie WordPress options were found after uninstall: 8 options
- widget_recent-comments
- widget_theysaidso_widget
- wsb-settings-transients
- can_compress_scripts
- widget_wsb_workshop_widget
- widget_recent-posts
- db_upgraded
- theysaidso_admin_options
Smoke tests 0% from 4 tests
Server-side errors 0% from 1 test
🔹 Test weight: 20 | Just a short smoke test targeting errors on the server (in the Apache logs)
Smoke test failed, please fix the following
- > GET request to /wp-admin/options-general.php?page=WorkshopButler
- > Error in wp-includes/Requests/src/Exception/InvalidArgument.php+29
Uncaught WpOrg\Requests\Exception\InvalidArgument: WpOrg\Requests\Cookie::__construct(): Argument #1 ($name) must be of type string, integer given in wp-includes/Requests/src/Exception/InvalidArgument.php:29
Stack trace:
#0 wp-includes/Requests/src/Cookie.php(84): WpOrg\Requests\Exception\InvalidArgument::create()
#1 wp-includes/class-wp-http.php(472): WpOrg\Requests\Cookie->__construct()
#2 wp-includes/class-wp-http.php(352): WP_Http::normalize_cookies()
#3 wp-includes/http.php(150): WP_Http->request()
#4 wp-content/plugins/workshop-butler/lib/ReduxFramework/ReduxCore/inc/class.p.php(229): wp_remote_request()
#5 wp-includes/class-wp-hook.php(310): WorkshopButler\Redux_P->proxy()
#6 wp-includes/class-wp-hook.php(334): WP_Hook->apply_filters()
#7 wp-includes/plugin.php(517): WP_Hook->do_action()
#8 wp-admin/admin-ajax.php(1
SRP 0% from 2 tests
🔹 Tests weight: 20 | The single-responsibility principle: PHP files have to remain inert when accessed directly, throwing no errors and performing no actions
The following issues need your attention
- 1× PHP files output text when accessed directly:
- > /wp-content/plugins/workshop-butler/templates/calendar/tiles/trainers.php
- 271× GET requests to PHP files trigger server-side errors or Error 500 responses (only 10 are shown):
- > PHP Fatal error
Uncaught Error: Class 'Twig\\TokenParser\\AbstractTokenParser' not found in wp-content/plugins/workshop-butler/vendor/twig/twig/src/TokenParser/WithTokenParser.php:24
- > PHP Fatal error
Uncaught Error: Call to undefined function WorkshopButler\\plugin_dir_path() in wp-content/plugins/workshop-butler/public/includes/models/class-paid-ticket-type.php:15
- > PHP Fatal error
Uncaught Error: Class 'Twig\ode\\Expression\\TestExpression' not found in wp-content/plugins/workshop-butler/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php:34
- > PHP Fatal error
Uncaught Error: Class 'Twig\ode\\Expression\\AbstractExpression' not found in wp-content/plugins/workshop-butler/vendor/twig/twig/src/Node/Expression/TempNameExpression.php:16
- > PHP Fatal error
require_once(): Failed opening required 'WSB_ABSPATH/includes/wsb-core-functions.php' (include_path='.:/usr/share/php') in wp-content/plugins/workshop-butler/public/includes/hooks/class-trainer-list-hooks.php on line 13
- > PHP Fatal error
Uncaught Error: Class 'Twig\ode\\Expression\\Binary\\AbstractBinary' not found in wp-content/plugins/workshop-butler/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php:17
- > PHP Fatal error
Uncaught Error: Class 'Twig\\Error\\Error' not found in wp-content/plugins/workshop-butler/vendor/twig/twig/src/Error/LoaderError.php:19
- > PHP Fatal error
Uncaught Error: Class 'Twig_Test' not found in wp-content/plugins/workshop-butler/vendor/twig/twig/lib/Twig/Test/Method.php:23
- > PHP Fatal error
Uncaught Error: Class 'Twig\\TokenParser\\AbstractTokenParser' not found in wp-content/plugins/workshop-butler/vendor/twig/twig/src/TokenParser/ForTokenParser.php:35
- > PHP Warning
require_once(WSB_ABSPATH/includes/wsb-core-functions.php): failed to open stream: No such file or directory in wp-content/plugins/workshop-butler/public/includes/hooks/class-registration-form-hooks.php on line 11
- > PHP Fatal error
User-side errors 0% from 1 test
🔹 Test weight: 20 | This is a smoke test targeting browser errors/issues
Please fix the following browser errors
- > GET request to /wp-admin/options-general.php?page=WorkshopButler
- > Deprecation (warning) in unknown
/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=6.3.1 1 Listener added for a synchronous 'DOMSubtreeModified' DOM Mutation Event. This event type is deprecated (https://w3c.github.io/uievents/#legacy-event-types) and work is underway to remove it from this browser. Usage of this event listener will cause performance issues today, and represents a risk of future incompatibility. Consider using MutationObserver instead.
- > GET request to /wp-admin/options-general.php?page=WorkshopButler
- > Network (severe)
wp-admin/admin-ajax.php?action=redux_p&nonce=80da503d72&url=http%3A%2F%2Flook.redux.io%2Fapi%2Findex.php%3Fjs%26g%261%26v%3D2&proxy=http%3A%2F%2Fwp.com%2Fwp-admin%2Fadmin-ajax.php%3Faction%3Dredux_p%26nonce%3D80da503d72%26url%3D - Failed to load resource: the server responded with a status of 500 (Internal Server Error)
- > GET request to /wp-admin/options-general.php?page=WorkshopButler
- > Security (severe) in unknown
/wp-admin/options-general.php?page=WorkshopButler - Refused to execute script from '/wp-admin/admin-ajax.php?action=redux_p&nonce=80da503d72&url=http%3A%2F%2Flook.redux.io%2Fapi%2Findex.php%3Fjs%26g%261%26v%3D2&proxy=http%3A%2F%2Fwp.com%2Fwp-admin%2Fadmin-ajax.php%3Faction%3Dredux_p%26nonce%3D80da503d72%26url%3D' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.
Optimizations
Plugin configuration 90% from 29 tests
readme.txt 88% from 16 tests
The readme.txt file uses markdown syntax to describe your plugin to the world
These attributes need your attention:
- Screenshots: These screenshots have no corresponding images in /assets: #1 (General), #2 (Events), #3 (Trainers), #4 (Pages), #5 (Custom CSS)
- Plugin Name: Please replace "Plugin Name" with the name of your plugin on the first line (
=== workshop-butler ===
)
workshop-butler/workshop-butler.php 92% from 13 tests
The main file in "Workshop Butler" v. 3.2.1 serves as a complement to information provided in readme.txt and as the entry point to the plugin
It is important to fix the following:
- Text Domain: The text domain must be the same as the plugin slug, although optional since WordPress version 4.6
Code Analysis 97% from 3 tests
File types Passed 1 test
🔸 Test weight: 35 | A short glimpse at programming languages used with this plugin and a check that no dangerous files are present
Success! There were no dangerous files found in this plugin70,021 lines of code in 1,009 files:
Language | Files | Blank lines | Comment lines | Lines of code |
---|---|---|---|---|
PHP | 636 | 8,631 | 17,138 | 34,641 |
JavaScript | 91 | 2,766 | 2,021 | 12,875 |
PO File | 8 | 3,449 | 0 | 7,046 |
Sass | 53 | 1,105 | 54 | 6,972 |
SVG | 5 | 0 | 12 | 3,775 |
reStructuredText | 94 | 2,338 | 2,156 | 2,882 |
Twig | 60 | 6 | 6 | 758 |
CSS | 50 | 26 | 44 | 376 |
JSON | 4 | 0 | 0 | 264 |
YAML | 3 | 42 | 0 | 171 |
make | 1 | 24 | 5 | 124 |
LESS | 1 | 0 | 0 | 53 |
Bourne Shell | 1 | 6 | 1 | 43 |
Python | 1 | 73 | 165 | 33 |
Markdown | 1 | 4 | 0 | 8 |
PHP code 50% from 2 tests
Analyzing cyclomatic complexity and code structure
The following items need your attention
- Please reduce cyclomatic complexity of methods to less than 100 (currently 113)
Cyclomatic complexity | |
---|---|
Average complexity per logical line of code | 0.50 |
Average class complexity | 9.85 |
▷ Minimum class complexity | 1.00 |
▷ Maximum class complexity | 881.00 |
Average method complexity | 3.65 |
▷ Minimum method complexity | 1.00 |
▷ Maximum method complexity | 113.00 |
Code structure | ||
---|---|---|
Namespaces | 29 | |
Interfaces | 26 | |
Traits | 0 | |
Classes | 548 | |
▷ Abstract classes | 18 | 3.28% |
▷ Concrete classes | 530 | 96.72% |
▷ Final classes | 5 | 0.94% |
Methods | 2,004 | |
▷ Static methods | 285 | 14.22% |
▷ Public methods | 1,570 | 78.34% |
▷ Protected methods | 294 | 14.67% |
▷ Private methods | 140 | 6.99% |
Functions | 134 | |
▷ Named functions | 100 | 74.63% |
▷ Anonymous functions | 34 | 25.37% |
Constants | 170 | |
▷ Global constants | 8 | 4.71% |
▷ Class constants | 162 | 95.29% |
▷ Public constants | 162 | 100.00% |
Plugin size 50% from 2 tests
Image compression 50% from 2 tests
Often times overlooked, PNG files can occupy unnecessary space in your plugin
35 PNG files occupy 1.03MB with 0.59MB in potential savings
Potential savings
Compression of 5 random PNG files using pngquant | |||
---|---|---|---|
File | Size - original | Size - compressed | Savings |
lib/ReduxFramework/ReduxCore/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_flat_0_aaaaaa_40x100.png | 0.18KB | 0.08KB | ▼ 51.67% |
screenshot-5.png | 199.48KB | 45.95KB | ▼ 76.97% |
lib/ReduxFramework/ReduxCore/assets/css/vendor/jquery-ui-bootstrap/images/ui-bg_inset-soft_95_fef1ec_1x100.png | 0.12KB | 0.16KB | 0.00% |
lib/ReduxFramework/ReduxCore/assets/img/2-col-portfolio.png | 1.02KB | 0.15KB | ▼ 85.07% |
screenshot-2.png | 247.64KB | 66.14KB | ▼ 73.29% |