mcp-wordpress 1.1.7 → 1.2.2
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/README.md +388 -66
- package/dist/cache/CacheInvalidation.d.ts +118 -0
- package/dist/cache/CacheInvalidation.d.ts.map +1 -0
- package/dist/cache/CacheInvalidation.js +349 -0
- package/dist/cache/CacheInvalidation.js.map +1 -0
- package/dist/cache/CacheManager.d.ts +143 -0
- package/dist/cache/CacheManager.d.ts.map +1 -0
- package/dist/cache/CacheManager.js +308 -0
- package/dist/cache/CacheManager.js.map +1 -0
- package/dist/cache/HttpCacheWrapper.d.ts +121 -0
- package/dist/cache/HttpCacheWrapper.d.ts.map +1 -0
- package/dist/cache/HttpCacheWrapper.js +280 -0
- package/dist/cache/HttpCacheWrapper.js.map +1 -0
- package/dist/cache/__tests__/CacheInvalidation.test.d.ts +5 -0
- package/dist/cache/__tests__/CacheInvalidation.test.d.ts.map +1 -0
- package/dist/cache/__tests__/CacheInvalidation.test.js +236 -0
- package/dist/cache/__tests__/CacheInvalidation.test.js.map +1 -0
- package/dist/cache/__tests__/CacheManager.test.d.ts +5 -0
- package/dist/cache/__tests__/CacheManager.test.d.ts.map +1 -0
- package/dist/cache/__tests__/CacheManager.test.js +233 -0
- package/dist/cache/__tests__/CacheManager.test.js.map +1 -0
- package/dist/cache/__tests__/CachedWordPressClient.test.d.ts +5 -0
- package/dist/cache/__tests__/CachedWordPressClient.test.d.ts.map +1 -0
- package/dist/cache/__tests__/CachedWordPressClient.test.js +228 -0
- package/dist/cache/__tests__/CachedWordPressClient.test.js.map +1 -0
- package/dist/cache/__tests__/HttpCacheWrapper.test.d.ts +5 -0
- package/dist/cache/__tests__/HttpCacheWrapper.test.d.ts.map +1 -0
- package/dist/cache/__tests__/HttpCacheWrapper.test.js +296 -0
- package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +1 -0
- package/dist/cache/index.d.ts +12 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +9 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/client/CachedWordPressClient.d.ts +160 -0
- package/dist/client/CachedWordPressClient.d.ts.map +1 -0
- package/dist/client/CachedWordPressClient.js +338 -0
- package/dist/client/CachedWordPressClient.js.map +1 -0
- package/dist/client/WordPressClient.d.ts +81 -0
- package/dist/client/WordPressClient.d.ts.map +1 -0
- package/dist/client/WordPressClient.js +354 -0
- package/dist/client/WordPressClient.js.map +1 -0
- package/dist/config/ConfigurationSchema.d.ts +281 -0
- package/dist/config/ConfigurationSchema.d.ts.map +1 -0
- package/dist/config/ConfigurationSchema.js +205 -0
- package/dist/config/ConfigurationSchema.js.map +1 -0
- package/dist/config/ServerConfiguration.d.ts +38 -0
- package/dist/config/ServerConfiguration.d.ts.map +1 -0
- package/dist/config/ServerConfiguration.js +158 -0
- package/dist/config/ServerConfiguration.js.map +1 -0
- package/dist/docs/DocumentationGenerator.d.ts +184 -0
- package/dist/docs/DocumentationGenerator.d.ts.map +1 -0
- package/dist/docs/DocumentationGenerator.js +735 -0
- package/dist/docs/DocumentationGenerator.js.map +1 -0
- package/dist/docs/MarkdownFormatter.d.ts +84 -0
- package/dist/docs/MarkdownFormatter.d.ts.map +1 -0
- package/dist/docs/MarkdownFormatter.js +448 -0
- package/dist/docs/MarkdownFormatter.js.map +1 -0
- package/dist/docs/index.d.ts +8 -0
- package/dist/docs/index.d.ts.map +1 -0
- package/dist/docs/index.js +7 -0
- package/dist/docs/index.js.map +1 -0
- package/dist/index.d.ts +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -212
- package/dist/index.js.map +1 -1
- package/dist/performance/AnomalyDetector.d.ts +63 -0
- package/dist/performance/AnomalyDetector.d.ts.map +1 -0
- package/dist/performance/AnomalyDetector.js +222 -0
- package/dist/performance/AnomalyDetector.js.map +1 -0
- package/dist/performance/BenchmarkAnalyzer.d.ts +67 -0
- package/dist/performance/BenchmarkAnalyzer.d.ts.map +1 -0
- package/dist/performance/BenchmarkAnalyzer.js +301 -0
- package/dist/performance/BenchmarkAnalyzer.js.map +1 -0
- package/dist/performance/MetricsCollector.d.ts +139 -0
- package/dist/performance/MetricsCollector.d.ts.map +1 -0
- package/dist/performance/MetricsCollector.js +320 -0
- package/dist/performance/MetricsCollector.js.map +1 -0
- package/dist/performance/PerformanceAnalytics.d.ts +162 -0
- package/dist/performance/PerformanceAnalytics.d.ts.map +1 -0
- package/dist/performance/PerformanceAnalytics.js +554 -0
- package/dist/performance/PerformanceAnalytics.js.map +1 -0
- package/dist/performance/PerformanceMonitor.d.ts +202 -0
- package/dist/performance/PerformanceMonitor.d.ts.map +1 -0
- package/dist/performance/PerformanceMonitor.js +478 -0
- package/dist/performance/PerformanceMonitor.js.map +1 -0
- package/dist/performance/TrendAnalyzer.d.ts +69 -0
- package/dist/performance/TrendAnalyzer.d.ts.map +1 -0
- package/dist/performance/TrendAnalyzer.js +203 -0
- package/dist/performance/TrendAnalyzer.js.map +1 -0
- package/dist/performance/index.d.ts +11 -0
- package/dist/performance/index.d.ts.map +1 -0
- package/dist/performance/index.js +8 -0
- package/dist/performance/index.js.map +1 -0
- package/dist/security/InputValidator.d.ts +215 -0
- package/dist/security/InputValidator.d.ts.map +1 -0
- package/dist/security/InputValidator.js +278 -0
- package/dist/security/InputValidator.js.map +1 -0
- package/dist/security/SecurityConfig.d.ts +129 -0
- package/dist/security/SecurityConfig.d.ts.map +1 -0
- package/dist/security/SecurityConfig.js +262 -0
- package/dist/security/SecurityConfig.js.map +1 -0
- package/dist/server/ConnectionTester.d.ts +24 -0
- package/dist/server/ConnectionTester.d.ts.map +1 -0
- package/dist/server/ConnectionTester.js +61 -0
- package/dist/server/ConnectionTester.js.map +1 -0
- package/dist/server/ToolRegistry.d.ts +46 -0
- package/dist/server/ToolRegistry.d.ts.map +1 -0
- package/dist/server/ToolRegistry.js +148 -0
- package/dist/server/ToolRegistry.js.map +1 -0
- package/dist/tools/BaseToolClass.d.ts +76 -0
- package/dist/tools/BaseToolClass.d.ts.map +1 -0
- package/dist/tools/BaseToolClass.js +104 -0
- package/dist/tools/BaseToolClass.js.map +1 -0
- package/dist/tools/BaseToolManager.d.ts +26 -0
- package/dist/tools/BaseToolManager.d.ts.map +1 -0
- package/dist/tools/BaseToolManager.js +56 -0
- package/dist/tools/BaseToolManager.js.map +1 -0
- package/dist/tools/base.d.ts +37 -0
- package/dist/tools/base.d.ts.map +1 -0
- package/dist/tools/base.js +60 -0
- package/dist/tools/base.js.map +1 -0
- package/dist/tools/cache.d.ts +260 -0
- package/dist/tools/cache.d.ts.map +1 -0
- package/dist/tools/cache.js +237 -0
- package/dist/tools/cache.js.map +1 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/performance.d.ts +63 -0
- package/dist/tools/performance.d.ts.map +1 -0
- package/dist/tools/performance.js +865 -0
- package/dist/tools/performance.js.map +1 -0
- package/dist/types/client.d.ts +1 -0
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/client.js.map +1 -1
- package/dist/utils/toolWrapper.d.ts +4 -0
- package/dist/utils/toolWrapper.d.ts.map +1 -1
- package/dist/utils/toolWrapper.js +11 -0
- package/dist/utils/toolWrapper.js.map +1 -1
- package/dist/utils/validation.d.ts +68 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +185 -0
- package/dist/utils/validation.js.map +1 -0
- package/docs/CACHING.md +340 -0
- package/docs/DOCKER.md +451 -0
- package/docs/PERFORMANCE_MONITORING.md +471 -0
- package/docs/SECURITY_TESTING.md +393 -0
- package/docs/api/README.md +200 -0
- package/docs/api/categories/auth.md +40 -0
- package/docs/api/categories/cache.md +41 -0
- package/docs/api/categories/comment.md +44 -0
- package/docs/api/categories/media.md +43 -0
- package/docs/api/categories/page.md +43 -0
- package/docs/api/categories/performance.md +44 -0
- package/docs/api/categories/post.md +43 -0
- package/docs/api/categories/site.md +43 -0
- package/docs/api/categories/taxonomy.md +47 -0
- package/docs/api/categories/user.md +43 -0
- package/docs/api/openapi.json +3305 -0
- package/docs/api/summary.json +12 -0
- package/docs/api/tools/wp_approve_comment.md +98 -0
- package/docs/api/tools/wp_cache_clear.md +120 -0
- package/docs/api/tools/wp_cache_info.md +119 -0
- package/docs/api/tools/wp_cache_stats.md +119 -0
- package/docs/api/tools/wp_cache_warm.md +119 -0
- package/docs/api/tools/wp_create_application_password.md +102 -0
- package/docs/api/tools/wp_create_category.md +102 -0
- package/docs/api/tools/wp_create_comment.md +128 -0
- package/docs/api/tools/wp_create_page.md +135 -0
- package/docs/api/tools/wp_create_post.md +147 -0
- package/docs/api/tools/wp_create_tag.md +101 -0
- package/docs/api/tools/wp_create_user.md +135 -0
- package/docs/api/tools/wp_delete_application_password.md +101 -0
- package/docs/api/tools/wp_delete_category.md +100 -0
- package/docs/api/tools/wp_delete_comment.md +101 -0
- package/docs/api/tools/wp_delete_media.md +108 -0
- package/docs/api/tools/wp_delete_page.md +108 -0
- package/docs/api/tools/wp_delete_post.md +117 -0
- package/docs/api/tools/wp_delete_tag.md +100 -0
- package/docs/api/tools/wp_delete_user.md +108 -0
- package/docs/api/tools/wp_get_application_passwords.md +103 -0
- package/docs/api/tools/wp_get_auth_status.md +101 -0
- package/docs/api/tools/wp_get_category.md +103 -0
- package/docs/api/tools/wp_get_comment.md +103 -0
- package/docs/api/tools/wp_get_current_user.md +101 -0
- package/docs/api/tools/wp_get_media.md +103 -0
- package/docs/api/tools/wp_get_page.md +103 -0
- package/docs/api/tools/wp_get_page_revisions.md +103 -0
- package/docs/api/tools/wp_get_post.md +112 -0
- package/docs/api/tools/wp_get_post_revisions.md +103 -0
- package/docs/api/tools/wp_get_site_settings.md +108 -0
- package/docs/api/tools/wp_get_tag.md +103 -0
- package/docs/api/tools/wp_get_user.md +103 -0
- package/docs/api/tools/wp_list_categories.md +111 -0
- package/docs/api/tools/wp_list_comments.md +111 -0
- package/docs/api/tools/wp_list_media.md +145 -0
- package/docs/api/tools/wp_list_pages.md +145 -0
- package/docs/api/tools/wp_list_posts.md +156 -0
- package/docs/api/tools/wp_list_tags.md +110 -0
- package/docs/api/tools/wp_list_users.md +111 -0
- package/docs/api/tools/wp_performance_alerts.md +162 -0
- package/docs/api/tools/wp_performance_benchmark.md +160 -0
- package/docs/api/tools/wp_performance_export.md +162 -0
- package/docs/api/tools/wp_performance_history.md +161 -0
- package/docs/api/tools/wp_performance_optimize.md +162 -0
- package/docs/api/tools/wp_performance_stats.md +160 -0
- package/docs/api/tools/wp_search_site.md +99 -0
- package/docs/api/tools/wp_spam_comment.md +98 -0
- package/docs/api/tools/wp_switch_auth_method.md +122 -0
- package/docs/api/tools/wp_test_auth.md +96 -0
- package/docs/api/tools/wp_update_category.md +102 -0
- package/docs/api/tools/wp_update_comment.md +127 -0
- package/docs/api/tools/wp_update_media.md +129 -0
- package/docs/api/tools/wp_update_page.md +135 -0
- package/docs/api/tools/wp_update_post.md +144 -0
- package/docs/api/tools/wp_update_site_settings.md +127 -0
- package/docs/api/tools/wp_update_tag.md +102 -0
- package/docs/api/tools/wp_update_user.md +134 -0
- package/docs/api/tools/wp_upload_media.md +131 -0
- package/docs/api/types/WordPressPost.md +39 -0
- package/docs/contract-testing.md +183 -0
- package/docs/developer/NPM_AUTH_SETUP.md +3 -3
- package/docs/wordpress-rest-api-authentication-troubleshooting.md +218 -0
- package/package.json +84 -64
- package/src/cache/CacheInvalidation.ts +421 -0
- package/src/cache/CacheManager.ts +391 -0
- package/src/cache/HttpCacheWrapper.ts +372 -0
- package/src/cache/__tests__/CacheInvalidation.test.ts +299 -0
- package/src/cache/__tests__/CacheManager.test.ts +300 -0
- package/src/cache/__tests__/CachedWordPressClient.test.ts +304 -0
- package/src/cache/__tests__/HttpCacheWrapper.test.ts +359 -0
- package/src/cache/index.ts +26 -0
- package/src/client/CachedWordPressClient.ts +442 -0
- package/src/config/ConfigurationSchema.ts +246 -0
- package/src/config/ServerConfiguration.ts +215 -0
- package/src/docs/DocumentationGenerator.ts +952 -0
- package/src/docs/MarkdownFormatter.ts +494 -0
- package/src/docs/index.ts +21 -0
- package/src/index.ts +14 -274
- package/src/performance/MetricsCollector.ts +447 -0
- package/src/performance/PerformanceAnalytics.ts +762 -0
- package/src/performance/PerformanceMonitor.ts +649 -0
- package/src/performance/index.ts +28 -0
- package/src/security/InputValidator.ts +319 -0
- package/src/security/SecurityConfig.ts +301 -0
- package/src/server/ConnectionTester.ts +74 -0
- package/src/server/ToolRegistry.ts +194 -0
- package/src/tools/BaseToolManager.ts +66 -0
- package/src/tools/cache.ts +259 -0
- package/src/tools/index.ts +2 -0
- package/src/tools/performance.ts +948 -0
- package/src/types/client.ts +1 -0
- package/src/utils/toolWrapper.ts +11 -0
- package/src/utils/validation.ts +259 -0
package/docs/CACHING.md
ADDED
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
# Intelligent Caching System
|
|
2
|
+
|
|
3
|
+
The WordPress MCP Server includes a comprehensive intelligent caching system that dramatically improves performance by reducing API calls and providing faster response times.
|
|
4
|
+
|
|
5
|
+
## 🚀 **Performance Benefits**
|
|
6
|
+
|
|
7
|
+
- **50-70% reduction** in taxonomy API calls (categories, tags)
|
|
8
|
+
- **40-60% reduction** in authentication requests
|
|
9
|
+
- **30-50% reduction** in user profile lookups
|
|
10
|
+
- **Significantly improved** response times for static data
|
|
11
|
+
- **Better rate limit utilization** - 60 requests/minute becomes much more effective
|
|
12
|
+
|
|
13
|
+
## 🏗️ **Architecture Overview**
|
|
14
|
+
|
|
15
|
+
### **Multi-Layer Caching System**
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Request → Cache Check → API Call (if miss) → Cache Store → Response
|
|
19
|
+
↑ ↓
|
|
20
|
+
└── ETag Validation ← HTTP Headers ←──────────┘
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Layer 1: HTTP Response Cache**
|
|
24
|
+
- ETags support for efficient revalidation
|
|
25
|
+
- Cache-Control headers based on data volatility
|
|
26
|
+
- Conditional requests (If-None-Match)
|
|
27
|
+
|
|
28
|
+
**Layer 2: In-Memory Application Cache**
|
|
29
|
+
- TTL-based expiration by data type
|
|
30
|
+
- LRU eviction for memory management
|
|
31
|
+
- Site-specific cache keys for multi-site support
|
|
32
|
+
|
|
33
|
+
**Layer 3: Intelligent Invalidation**
|
|
34
|
+
- Event-based cache clearing on content changes
|
|
35
|
+
- Pattern-based invalidation of related data
|
|
36
|
+
- Cascading invalidation (e.g., post changes clear category counts)
|
|
37
|
+
|
|
38
|
+
## 📊 **Cache Strategies by Data Type**
|
|
39
|
+
|
|
40
|
+
### **Static Data (4 hour TTL)**
|
|
41
|
+
- Site settings, user roles, capabilities
|
|
42
|
+
- Cache-Control: `public, max-age=14400`
|
|
43
|
+
- **Why**: Changes very rarely, safe to cache long-term
|
|
44
|
+
|
|
45
|
+
### **Semi-Static Data (2 hour TTL)**
|
|
46
|
+
- Categories, tags, user profiles
|
|
47
|
+
- Cache-Control: `public, max-age=7200`
|
|
48
|
+
- **Why**: Changes occasionally but stable for hours
|
|
49
|
+
|
|
50
|
+
### **Dynamic Data (15 minute TTL)**
|
|
51
|
+
- Posts, pages, comments
|
|
52
|
+
- Cache-Control: `public, max-age=900`
|
|
53
|
+
- **Why**: Content changes frequently, shorter cache needed
|
|
54
|
+
|
|
55
|
+
### **Session Data (30 minute TTL)**
|
|
56
|
+
- Authentication status, current user info
|
|
57
|
+
- Cache-Control: `private, max-age=1800`
|
|
58
|
+
- **Why**: User-specific data, moderate stability
|
|
59
|
+
|
|
60
|
+
## 🛠️ **Cache Management Tools**
|
|
61
|
+
|
|
62
|
+
The system includes dedicated cache management tools:
|
|
63
|
+
|
|
64
|
+
### **wp_cache_stats**
|
|
65
|
+
Get detailed cache statistics for performance monitoring.
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
wp_cache_stats --site="site1"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Returns:**
|
|
72
|
+
- Hit/miss rates
|
|
73
|
+
- Total cache entries
|
|
74
|
+
- Eviction statistics
|
|
75
|
+
- Invalidation queue status
|
|
76
|
+
|
|
77
|
+
### **wp_cache_clear**
|
|
78
|
+
Clear cache entries with optional pattern matching.
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Clear all cache
|
|
82
|
+
wp_cache_clear --site="site1"
|
|
83
|
+
|
|
84
|
+
# Clear specific patterns
|
|
85
|
+
wp_cache_clear --site="site1" --pattern="posts"
|
|
86
|
+
wp_cache_clear --site="site1" --pattern="categories"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### **wp_cache_warm**
|
|
90
|
+
Pre-populate cache with essential WordPress data.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
wp_cache_warm --site="site1"
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Warms cache with:
|
|
97
|
+
- Current user information
|
|
98
|
+
- Categories and tags
|
|
99
|
+
- Site settings
|
|
100
|
+
|
|
101
|
+
### **wp_cache_info**
|
|
102
|
+
Get detailed cache configuration and status.
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
wp_cache_info --site="site1"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## ⚙️ **Configuration**
|
|
109
|
+
|
|
110
|
+
### **Enable/Disable Caching**
|
|
111
|
+
|
|
112
|
+
Caching is **enabled by default**. To disable:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
export DISABLE_CACHE=true
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### **Cache Settings**
|
|
119
|
+
|
|
120
|
+
Configure via `SecurityConfig.cache` in `src/security/SecurityConfig.ts`:
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
cache: {
|
|
124
|
+
enabled: true,
|
|
125
|
+
maxSize: 1000, // Maximum cache entries
|
|
126
|
+
defaultTTL: 15 * 60 * 1000, // 15 minutes default
|
|
127
|
+
enableLRU: true,
|
|
128
|
+
enableStats: true,
|
|
129
|
+
|
|
130
|
+
// TTL presets by data type
|
|
131
|
+
ttlPresets: {
|
|
132
|
+
static: 4 * 60 * 60 * 1000, // 4 hours
|
|
133
|
+
semiStatic: 2 * 60 * 60 * 1000, // 2 hours
|
|
134
|
+
dynamic: 15 * 60 * 1000, // 15 minutes
|
|
135
|
+
session: 30 * 60 * 1000, // 30 minutes
|
|
136
|
+
realtime: 60 * 1000 // 1 minute
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## 🔄 **Cache Invalidation**
|
|
142
|
+
|
|
143
|
+
### **Automatic Invalidation Rules**
|
|
144
|
+
|
|
145
|
+
The system automatically invalidates related cache entries when content changes:
|
|
146
|
+
|
|
147
|
+
**Post Operations:**
|
|
148
|
+
- **Create Post** → Clears posts listings, categories, tags, search
|
|
149
|
+
- **Update Post** → Clears specific post, posts listings, search
|
|
150
|
+
- **Delete Post** → Clears posts listings, categories, tags, search
|
|
151
|
+
|
|
152
|
+
**Category/Tag Operations:**
|
|
153
|
+
- **Create/Update/Delete** → Clears taxonomies AND related posts
|
|
154
|
+
- **Cascading Effect** → Post cache cleared when categories change
|
|
155
|
+
|
|
156
|
+
**User Operations:**
|
|
157
|
+
- **Update User** → Clears user cache, current user cache
|
|
158
|
+
- **User Role Changes** → Clears capability-dependent caches
|
|
159
|
+
|
|
160
|
+
### **Manual Invalidation**
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# Clear specific patterns
|
|
164
|
+
wp_cache_clear --pattern="posts.*" # All post-related cache
|
|
165
|
+
wp_cache_clear --pattern="categories" # Category cache
|
|
166
|
+
wp_cache_clear --pattern="users" # User cache
|
|
167
|
+
|
|
168
|
+
# Clear everything (nuclear option)
|
|
169
|
+
wp_cache_clear
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## 🧪 **Testing & Benchmarking**
|
|
173
|
+
|
|
174
|
+
### **Run Cache Tests**
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
npm run build
|
|
178
|
+
node scripts/test-caching.js
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**Tests Include:**
|
|
182
|
+
- Cache infrastructure performance
|
|
183
|
+
- Memory usage analysis
|
|
184
|
+
- Hit/miss rate calculations
|
|
185
|
+
- Invalidation timing
|
|
186
|
+
- Configuration validation
|
|
187
|
+
|
|
188
|
+
### **Performance Monitoring**
|
|
189
|
+
|
|
190
|
+
Monitor cache effectiveness:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# Check cache statistics
|
|
194
|
+
wp_cache_stats --site="your-site"
|
|
195
|
+
|
|
196
|
+
# Monitor hit rates over time
|
|
197
|
+
while true; do
|
|
198
|
+
wp_cache_stats --site="your-site" | grep "hit_rate"
|
|
199
|
+
sleep 30
|
|
200
|
+
done
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### **Expected Performance Gains**
|
|
204
|
+
|
|
205
|
+
**Before Caching:**
|
|
206
|
+
- Categories API call: ~200-500ms
|
|
207
|
+
- Repeated user lookups: ~150-300ms each
|
|
208
|
+
- Site settings: ~100-200ms each call
|
|
209
|
+
|
|
210
|
+
**After Caching:**
|
|
211
|
+
- Categories (cached): ~1-5ms
|
|
212
|
+
- User lookups (cached): ~1-3ms
|
|
213
|
+
- Site settings (cached): ~1-2ms
|
|
214
|
+
|
|
215
|
+
## 🔐 **Multi-Site Support**
|
|
216
|
+
|
|
217
|
+
Each WordPress site gets isolated cache:
|
|
218
|
+
|
|
219
|
+
**Cache Key Format:**
|
|
220
|
+
```
|
|
221
|
+
{siteId}:{endpoint}:{params_hash}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Examples:**
|
|
225
|
+
```
|
|
226
|
+
site1:posts:abc123 # Site 1 posts listing
|
|
227
|
+
site2:posts:abc123 # Site 2 posts listing (separate)
|
|
228
|
+
site1:categories:def456 # Site 1 categories
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Site-Specific Operations:**
|
|
232
|
+
```bash
|
|
233
|
+
wp_cache_clear --site="site1" # Clear only site1 cache
|
|
234
|
+
wp_cache_clear --site="site2" --pattern="posts" # Clear site2 posts only
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## 🚨 **Troubleshooting**
|
|
238
|
+
|
|
239
|
+
### **Cache Not Working**
|
|
240
|
+
|
|
241
|
+
1. **Check if caching is enabled:**
|
|
242
|
+
```bash
|
|
243
|
+
wp_cache_info --site="your-site"
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
2. **Verify no DISABLE_CACHE environment variable:**
|
|
247
|
+
```bash
|
|
248
|
+
echo $DISABLE_CACHE # Should be empty or 'false'
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
3. **Check cache statistics:**
|
|
252
|
+
```bash
|
|
253
|
+
wp_cache_stats --site="your-site"
|
|
254
|
+
```
|
|
255
|
+
- Hit rate should increase over time
|
|
256
|
+
- Total entries should grow with usage
|
|
257
|
+
|
|
258
|
+
### **Poor Cache Performance**
|
|
259
|
+
|
|
260
|
+
1. **Monitor hit rates:**
|
|
261
|
+
- Good: >60% hit rate after warm-up
|
|
262
|
+
- Poor: <30% hit rate indicates issues
|
|
263
|
+
|
|
264
|
+
2. **Check TTL settings:**
|
|
265
|
+
- Too short: Frequent cache misses
|
|
266
|
+
- Too long: Stale data issues
|
|
267
|
+
|
|
268
|
+
3. **Memory pressure:**
|
|
269
|
+
- LRU evictions happening too frequently
|
|
270
|
+
- Consider increasing `maxSize` in config
|
|
271
|
+
|
|
272
|
+
### **Stale Data Issues**
|
|
273
|
+
|
|
274
|
+
1. **Check invalidation:**
|
|
275
|
+
```bash
|
|
276
|
+
wp_cache_info --site="your-site"
|
|
277
|
+
```
|
|
278
|
+
- Verify invalidation rules are active
|
|
279
|
+
- Check queue processing status
|
|
280
|
+
|
|
281
|
+
2. **Manual cache clear:**
|
|
282
|
+
```bash
|
|
283
|
+
wp_cache_clear --site="your-site" --pattern="problematic_endpoint"
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
3. **Verify TTL appropriateness:**
|
|
287
|
+
- Static data: 4h is usually safe
|
|
288
|
+
- Dynamic content: Consider shorter TTL
|
|
289
|
+
|
|
290
|
+
## 📈 **Optimization Tips**
|
|
291
|
+
|
|
292
|
+
### **For High-Traffic Sites**
|
|
293
|
+
|
|
294
|
+
1. **Increase cache size:**
|
|
295
|
+
```typescript
|
|
296
|
+
maxSize: 2000 // From default 1000
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
2. **Tune TTL values:**
|
|
300
|
+
```typescript
|
|
301
|
+
ttlPresets: {
|
|
302
|
+
static: 8 * 60 * 60 * 1000, // 8 hours for very stable data
|
|
303
|
+
semiStatic: 4 * 60 * 60 * 1000, // 4 hours
|
|
304
|
+
dynamic: 30 * 60 * 1000, // 30 minutes for less active sites
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
3. **Pre-warm cache on deployment:**
|
|
309
|
+
```bash
|
|
310
|
+
wp_cache_warm --site="production-site"
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### **For Development**
|
|
314
|
+
|
|
315
|
+
1. **Shorter TTL for faster iteration:**
|
|
316
|
+
```typescript
|
|
317
|
+
ttlPresets: {
|
|
318
|
+
dynamic: 30 * 1000, // 30 seconds for development
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
2. **Easy cache clearing:**
|
|
323
|
+
```bash
|
|
324
|
+
# Add to development scripts
|
|
325
|
+
wp_cache_clear # Clear all during development
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
## 🔮 **Future Enhancements**
|
|
329
|
+
|
|
330
|
+
Planned improvements:
|
|
331
|
+
|
|
332
|
+
- **Redis backend** for distributed caching
|
|
333
|
+
- **Cache warming strategies** based on access patterns
|
|
334
|
+
- **Adaptive TTL** based on content change frequency
|
|
335
|
+
- **Cache compression** for larger datasets
|
|
336
|
+
- **Metrics dashboard** for cache performance visualization
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
The intelligent caching system provides significant performance improvements while maintaining data freshness appropriate for each content type. It's designed to work transparently with existing WordPress operations while providing tools for monitoring and management.
|