@editora/performance
Advanced tools
@@ -1,1 +0,1 @@ | ||
| "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class o{constructor(e={}){this.batch=[],this.batchTimeout=null,this.config={maxBatchSize:10,maxBatchTime:16,enabled:!0,...e}}add(e){if(!this.config.enabled){this.flush([e]);return}this.batch.push(e),this.batch.length>=this.config.maxBatchSize?this.flushBatch():this.batch.length===1&&this.scheduleFlush()}flushBatch(){this.batch.length>0&&(this.flush([...this.batch]),this.batch=[],this.clearTimeout())}setOnFlush(e){this.onFlush=e}getBatchSize(){return this.batch.length}isEnabled(){return this.config.enabled}setEnabled(e){this.config.enabled=e,e||this.flushBatch()}flush(e){if(this.onFlush){const t=e[0]?.beforeState||{};this.onFlush(e,t)}}scheduleFlush(){this.clearTimeout(),this.batchTimeout=window.setTimeout(()=>{this.flushBatch()},this.config.maxBatchTime)}clearTimeout(){this.batchTimeout&&(window.clearTimeout(this.batchTimeout),this.batchTimeout=null)}destroy(){this.clearTimeout(),this.flushBatch()}}function l(r){return new o(r)}class c{constructor(e=250){this.timeoutId=null,this.delay=e}execute(e,...t){this.timeoutId!==null&&clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{e(...t)},this.delay)}cancel(){this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}}function u(r){return new c(r)}class h{constructor(e={}){this.cleanupInterval=null,this.eventListeners=new Map,this.timeouts=new Set,this.intervals=new Set,this.config={maxMemoryMB:100,cleanupIntervalMs:3e4,autoCleanup:!0,...e},this.config.autoCleanup&&this.startAutoCleanup()}registerEventListener(e,t,n,i){const s=`${t}_${Math.random()}`;e.addEventListener(t,n,i),this.eventListeners.set(s,n)}registerTimeout(e){this.timeouts.add(e)}registerInterval(e){this.intervals.add(e)}unregisterTimeout(e){this.timeouts.delete(e)}unregisterInterval(e){this.intervals.delete(e)}forceGC(){window.gc&&window.gc()}getMemoryUsage(){const e=performance.memory;return e?{used:Math.round(e.usedJSHeapSize/1024/1024),total:Math.round(e.totalJSHeapSize/1024/1024),limit:Math.round(e.jsHeapSizeLimit/1024/1024)}:null}isMemoryHigh(){const e=this.getMemoryUsage();return e?e.used>this.config.maxMemoryMB:!1}cleanup(){for(const e of this.timeouts)clearTimeout(e);this.timeouts.clear();for(const e of this.intervals)clearInterval(e);this.intervals.clear(),this.forceGC()}startAutoCleanup(){this.cleanupInterval=window.setInterval(()=>{this.isMemoryHigh()&&this.cleanup()},this.config.cleanupIntervalMs)}stopAutoCleanup(){this.cleanupInterval&&(clearInterval(this.cleanupInterval),this.cleanupInterval=null)}destroy(){this.stopAutoCleanup(),this.cleanup(),this.eventListeners.clear()}}function d(r){return new h(r)}class m{constructor(e={}){this.metrics=[],this.isMonitoring=!1,this.sampleInterval=null,this.currentOperation=null,this.config={enabled:!0,sampleInterval:5e3,maxSamples:100,logWarnings:!0,...e},this.config.enabled&&this.startMonitoring()}startMonitoring(){this.isMonitoring||(this.isMonitoring=!0,this.sampleInterval=window.setInterval(()=>{this.collectMetrics()},this.config.sampleInterval))}stopMonitoring(){this.isMonitoring&&(this.isMonitoring=!1,this.sampleInterval&&(clearInterval(this.sampleInterval),this.sampleInterval=null))}startOperation(e){if(!this.config.enabled)return;const t=performance.memory;this.currentOperation={type:e,startTime:performance.now(),memoryStart:t?t.usedJSHeapSize:0}}endOperation(){if(!this.config.enabled||!this.currentOperation)return null;const e=performance.now(),t=performance.memory,n=t?t.usedJSHeapSize:0,i={domTime:0,renderTime:e-this.currentOperation.startTime,transactionTime:e-this.currentOperation.startTime,memoryUsage:Math.round((n-this.currentOperation.memoryStart)/1024/1024),timestamp:Date.now()};switch(this.currentOperation.type){case"transaction":i.transactionTime=e-this.currentOperation.startTime;break;case"render":i.renderTime=e-this.currentOperation.startTime;break;case"dom":i.domTime=e-this.currentOperation.startTime;break}return this.addMetrics(i),this.currentOperation=null,this.config.logWarnings&&this.checkPerformanceWarnings(i),i}getMetrics(){return[...this.metrics]}getAverageMetrics(e=6e4){const t=Date.now()-e,n=this.metrics.filter(s=>s.timestamp>t);if(n.length===0)return{};const i=n.reduce((s,a)=>({domTime:s.domTime+a.domTime,renderTime:s.renderTime+a.renderTime,transactionTime:s.transactionTime+a.transactionTime,memoryUsage:s.memoryUsage+a.memoryUsage}),{domTime:0,renderTime:0,transactionTime:0,memoryUsage:0});return{domTime:Math.round(i.domTime/n.length),renderTime:Math.round(i.renderTime/n.length),transactionTime:Math.round(i.transactionTime/n.length),memoryUsage:Math.round(i.memoryUsage/n.length)}}clearMetrics(){this.metrics=[]}collectMetrics(){const e=performance.memory;if(!e)return;const t={domTime:0,renderTime:0,transactionTime:0,memoryUsage:Math.round(e.usedJSHeapSize/1024/1024),timestamp:Date.now()};this.addMetrics(t)}addMetrics(e){this.metrics.push(e),this.metrics.length>this.config.maxSamples&&(this.metrics=this.metrics.slice(-this.config.maxSamples))}checkPerformanceWarnings(e){const t=[];e.renderTime>16&&t.push(`Slow render: ${e.renderTime}ms`),e.transactionTime>100&&t.push(`Slow transaction: ${e.transactionTime}ms`),e.memoryUsage>50&&t.push(`High memory usage: ${e.memoryUsage}MB`),t.length>0&&console.warn("Performance warning:",t.join(", "))}destroy(){this.stopMonitoring(),this.clearMetrics()}}function f(r){return new m(r)}exports.Debouncer=c;exports.MemoryManager=h;exports.PerformanceMonitor=m;exports.TransactionBatcher=o;exports.createDebouncer=u;exports.createMemoryManager=d;exports.createPerformanceMonitor=f;exports.createTransactionBatcher=l; | ||
| "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});class o{constructor(e={}){this.batch=[],this.batchTimeout=null,this.config={maxBatchSize:10,maxBatchTime:16,enabled:!0,...e}}add(e){if(!this.config.enabled){this.flush([e]);return}this.batch.push(e),this.batch.length>=this.config.maxBatchSize?this.flushBatch():this.batch.length===1&&this.scheduleFlush()}flushBatch(){this.batch.length>0&&(this.flush([...this.batch]),this.batch=[],this.clearTimeout())}setOnFlush(e){this.onFlush=e}getBatchSize(){return this.batch.length}isEnabled(){return this.config.enabled}setEnabled(e){this.config.enabled=e,e||this.flushBatch()}flush(e){if(this.onFlush){const t=e[0]?.beforeState||{};this.onFlush(e,t)}}scheduleFlush(){this.clearTimeout(),this.batchTimeout=window.setTimeout(()=>{this.flushBatch()},this.config.maxBatchTime)}clearTimeout(){this.batchTimeout&&(window.clearTimeout(this.batchTimeout),this.batchTimeout=null)}destroy(){this.clearTimeout(),this.flushBatch()}}function l(r){return new o(r)}class c{constructor(e=250){this.timeoutId=null,this.delay=e}execute(e,...t){this.timeoutId!==null&&clearTimeout(this.timeoutId),this.timeoutId=window.setTimeout(()=>{e(...t)},this.delay)}cancel(){this.timeoutId!==null&&(clearTimeout(this.timeoutId),this.timeoutId=null)}}function u(r){return new c(r)}class h{constructor(e={}){this.cleanupInterval=null,this.eventListeners=new Map,this.timeouts=new Set,this.intervals=new Set,this.config={maxMemoryMB:100,cleanupIntervalMs:3e4,autoCleanup:!0,...e},this.config.autoCleanup&&this.startAutoCleanup()}registerEventListener(e,t,n,i){const s=`${t}_${Math.random()}`;e.addEventListener(t,n,i),this.eventListeners.set(s,n)}registerTimeout(e){this.timeouts.add(e)}registerInterval(e){this.intervals.add(e)}unregisterTimeout(e){this.timeouts.delete(e)}unregisterInterval(e){this.intervals.delete(e)}forceGC(){window.gc&&window.gc()}getMemoryUsage(){const e=performance.memory;return e?{used:Math.round(e.usedJSHeapSize/1024/1024),total:Math.round(e.totalJSHeapSize/1024/1024),limit:Math.round(e.jsHeapSizeLimit/1024/1024)}:null}isMemoryHigh(){const e=this.getMemoryUsage();return e?e.used>this.config.maxMemoryMB:!1}cleanup(){for(const e of this.timeouts)clearTimeout(e);this.timeouts.clear();for(const e of this.intervals)clearInterval(e);this.intervals.clear(),this.forceGC()}startAutoCleanup(){this.cleanupInterval=window.setInterval(()=>{this.isMemoryHigh()&&this.cleanup()},this.config.cleanupIntervalMs)}stopAutoCleanup(){this.cleanupInterval&&(clearInterval(this.cleanupInterval),this.cleanupInterval=null)}destroy(){this.stopAutoCleanup(),this.cleanup(),this.eventListeners.clear()}}function d(r){return new h(r)}class m{constructor(e={}){this.metrics=[],this.isMonitoring=!1,this.sampleInterval=null,this.currentOperation=null,this.config={enabled:!0,sampleInterval:5e3,maxSamples:100,logWarnings:!0,...e},this.config.enabled&&this.startMonitoring()}startMonitoring(){this.isMonitoring||(this.isMonitoring=!0,this.sampleInterval=window.setInterval(()=>{this.collectMetrics()},this.config.sampleInterval))}stopMonitoring(){this.isMonitoring&&(this.isMonitoring=!1,this.sampleInterval&&(clearInterval(this.sampleInterval),this.sampleInterval=null))}startOperation(e){if(!this.config.enabled)return;const t=performance.memory;this.currentOperation={type:e,startTime:performance.now(),memoryStart:t?t.usedJSHeapSize:0}}endOperation(){if(!this.config.enabled||!this.currentOperation)return null;const e=performance.now(),t=performance.memory,n=t?t.usedJSHeapSize:0,i={domTime:0,renderTime:e-this.currentOperation.startTime,transactionTime:e-this.currentOperation.startTime,memoryUsage:Math.round((n-this.currentOperation.memoryStart)/1024/1024),timestamp:Date.now()};switch(this.currentOperation.type){case"transaction":i.transactionTime=e-this.currentOperation.startTime;break;case"render":i.renderTime=e-this.currentOperation.startTime;break;case"dom":i.domTime=e-this.currentOperation.startTime;break}return this.addMetrics(i),this.currentOperation=null,this.config.logWarnings&&this.checkPerformanceWarnings(i),i}getMetrics(){return[...this.metrics]}getAverageMetrics(e=6e4){const t=Date.now()-e,n=this.metrics.filter(s=>s.timestamp>t);if(n.length===0)return{};const i=n.reduce((s,a)=>({domTime:s.domTime+a.domTime,renderTime:s.renderTime+a.renderTime,transactionTime:s.transactionTime+a.transactionTime,memoryUsage:s.memoryUsage+a.memoryUsage}),{domTime:0,renderTime:0,transactionTime:0,memoryUsage:0});return{domTime:Math.round(i.domTime/n.length),renderTime:Math.round(i.renderTime/n.length),transactionTime:Math.round(i.transactionTime/n.length),memoryUsage:Math.round(i.memoryUsage/n.length)}}clearMetrics(){this.metrics=[]}collectMetrics(){const e=performance.memory;if(!e)return;const t={domTime:0,renderTime:0,transactionTime:0,memoryUsage:Math.round(e.usedJSHeapSize/1024/1024),timestamp:Date.now()};this.addMetrics(t)}addMetrics(e){this.metrics.push(e),this.metrics.length>this.config.maxSamples&&(this.metrics=this.metrics.slice(-this.config.maxSamples))}checkPerformanceWarnings(e){const t=[];e.renderTime>16&&t.push(`Slow render: ${e.renderTime}ms`),e.transactionTime>100&&t.push(`Slow transaction: ${e.transactionTime}ms`),e.memoryUsage>50&&t.push(`High memory usage: ${e.memoryUsage}MB`),t.length>0&&console.warn("Performance warning:",t.join(", "))}destroy(){this.stopMonitoring(),this.clearMetrics()}}function f(r){return new m(r)}exports.Debouncer=c;exports.MemoryManager=h;exports.PerformanceMonitor=m;exports.TransactionBatcher=o;exports.createDebouncer=u;exports.createMemoryManager=d;exports.createPerformanceMonitor=f;exports.createTransactionBatcher=l; |
+5
-4
| { | ||
| "name": "@editora/performance", | ||
| "version": "1.0.5", | ||
| "version": "1.0.6", | ||
| "description": "Performance optimization utilities for Editora Rich Text Editor", | ||
@@ -19,3 +19,4 @@ "homepage": "https://editora-free.netlify.app/", | ||
| "import": "./dist/index.esm.js", | ||
| "require": "./dist/index.cjs.js" | ||
| "require": "./dist/index.cjs.js", | ||
| "default": "./dist/index.esm.js" | ||
| } | ||
@@ -39,3 +40,3 @@ }, | ||
| "dependencies": { | ||
| "@editora/core": "^1.0.5" | ||
| "@editora/core": "^1.0.6" | ||
| }, | ||
@@ -62,3 +63,3 @@ "keywords": [ | ||
| "devDependencies": { | ||
| "@editora/core": "^1.0.5", | ||
| "@editora/core": "^1.0.6", | ||
| "typescript": "^5.0.0", | ||
@@ -65,0 +66,0 @@ "vite": "^7.3.1" |
37056
0.18%Updated