Skip to content

Commit 8b9ab91

Browse files
committed
@csstools/postcss-slow-plugins v1.0.1
1 parent 8cbe5a0 commit 8b9ab91

File tree

6 files changed

+22
-8
lines changed

6 files changed

+22
-8
lines changed

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/postcss-slow-plugins/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changes to PostCSS Slow Plugins
22

3+
### 1.0.1
4+
5+
_September 4, 2023_
6+
7+
- Include ignored plugins in single run mode.
8+
39
### 1.0.0
410

511
_September 4, 2023_
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
"use strict";const creator=s=>{const o=(null==s?void 0:s.ignore)??[];return{postcssPlugin:"postcss-slow-plugins",Once:async(s,{result:n,postcss:t})=>{var e,i;console.log("Analyzing with file:\n "+(null==(e=s.source)?void 0:e.input.from)+"\n");const r=(null==(i=s.source)?void 0:i.input.css)??"",l=[...n.processor.plugins.filter((s=>"postcssPlugin"in s&&"postcss-slow-plugins"!==s.postcssPlugin))],c=(await t(l).process(r??"",n.opts)).css.length/1024,medianDuration=async s=>{const o=[];for(let n=0;n<21;n++){const n=performance.now();await s(),o.push(performance.now()-n)}return o.sort(((s,o)=>s-o)),o[10]},p=await medianDuration((async()=>{(await t(l).process(r??"",n.opts)).css}));{const s=[];for(let e=0;e<l.length;e++){const i="postcssPlugin"in l[e]?l[e].postcssPlugin:"unknown plugin";if(o.includes(i))continue;const u=l.filter((s=>s!==l[e])),a=await medianDuration((async()=>{(await t(u).process(r??"",n.opts)).css})),d=p-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(c/a).toFixed(3)}kb/ms`,drop:d,name:i,"index in plugins list":e})}s.sort(((s,o)=>Number(o.drop)-Number(s.drop))),s.splice(0,0,{duration:`${p.toFixed(3)}ms`,"kb's per ms":`${(c/p).toFixed(3)}kb/ms`,drop:"--",name:"-- all plugins --","index in plugins list":"--"}),s.map((s=>("string"==typeof s.drop||(s.drop=`${s.drop.toFixed(3)}ms`),s))),console.log("Most impactful to remove, ordered by drop in duration when excluded:"),console.table(s.slice(0,11))}{const s=[];for(let e=0;e<l.length;e++){const i="postcssPlugin"in l[e]?l[e].postcssPlugin:"unknown plugin";if(o.includes(i))continue;const u=[l[e]],a=await medianDuration((async()=>{(await t(u).process(r??"",n.opts)).css})),d=p-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(c/a).toFixed(3)}kb/ms`,drop:d,name:i,"index in plugins list":e})}s.sort(((s,o)=>Number(s.drop)-Number(o.drop))),s.map((s=>(delete s.drop,s))),console.log("Most impactful to remove, ordered by increase in duration when running alone:"),console.table(s.slice(0,11))}}}};creator.postcss=!0,module.exports=creator;
1+
"use strict";const creator=s=>{const o=(null==s?void 0:s.ignore)??[];return{postcssPlugin:"postcss-slow-plugins",Once:async(s,{result:n,postcss:t})=>{var e,i;console.log("Analyzing with file:\n "+(null==(e=s.source)?void 0:e.input.from)+"\n");const l=(null==(i=s.source)?void 0:i.input.css)??"",r=[...n.processor.plugins.filter((s=>"postcssPlugin"in s&&"postcss-slow-plugins"!==s.postcssPlugin))],c=(await t(r).process(l??"",n.opts)).css.length/1024,medianDuration=async s=>{const o=[];for(let n=0;n<21;n++){const n=performance.now();await s(),o.push(performance.now()-n)}return o.sort(((s,o)=>s-o)),o[10]},p=await medianDuration((async()=>{(await t(r).process(l??"",n.opts)).css}));{const s=[];for(let e=0;e<r.length;e++){const i="postcssPlugin"in r[e]?r[e].postcssPlugin:"unknown plugin";if(o.includes(i))continue;const u=r.filter((s=>s!==r[e])),a=await medianDuration((async()=>{(await t(u).process(l??"",n.opts)).css})),d=p-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(c/a).toFixed(3)}kb/ms`,drop:d,name:i,"index in plugins list":e})}s.sort(((s,o)=>Number(o.drop)-Number(s.drop))),s.splice(0,0,{duration:`${p.toFixed(3)}ms`,"kb's per ms":`${(c/p).toFixed(3)}kb/ms`,drop:"--",name:"-- all plugins --","index in plugins list":"--"}),s.map((s=>("string"==typeof s.drop||(s.drop=`${s.drop.toFixed(3)}ms`),s))),console.log("Most impactful to remove, ordered by drop in duration when excluded:"),console.table(s.slice(0,11))}{const s=[];for(let e=0;e<r.length;e++){const i="postcssPlugin"in r[e]?r[e].postcssPlugin:"unknown plugin";if(o.includes(i))continue;const u=[...r.filter((s=>s===r[e]||"postcssPlugin"in s&&o.includes(s.postcssPlugin)))],a=await medianDuration((async()=>{(await t(u).process(l??"",n.opts)).css})),d=p-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(c/a).toFixed(3)}kb/ms`,drop:d,name:i,"index in plugins list":e})}s.sort(((s,o)=>Number(s.drop)-Number(o.drop))),s.map((s=>(delete s.drop,s))),console.log("Most impactful to remove, ordered by increase in duration when running alone:"),console.table(s.slice(0,11))}}}};creator.postcss=!0,module.exports=creator;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
const creator=s=>{const o=(null==s?void 0:s.ignore)??[];return{postcssPlugin:"postcss-slow-plugins",Once:async(s,{result:n,postcss:t})=>{var e,i;console.log("Analyzing with file:\n "+(null==(e=s.source)?void 0:e.input.from)+"\n");const r=(null==(i=s.source)?void 0:i.input.css)??"",l=[...n.processor.plugins.filter((s=>"postcssPlugin"in s&&"postcss-slow-plugins"!==s.postcssPlugin))],c=(await t(l).process(r??"",n.opts)).css.length/1024,medianDuration=async s=>{const o=[];for(let n=0;n<21;n++){const n=performance.now();await s(),o.push(performance.now()-n)}return o.sort(((s,o)=>s-o)),o[10]},p=await medianDuration((async()=>{(await t(l).process(r??"",n.opts)).css}));{const s=[];for(let e=0;e<l.length;e++){const i="postcssPlugin"in l[e]?l[e].postcssPlugin:"unknown plugin";if(o.includes(i))continue;const u=l.filter((s=>s!==l[e])),a=await medianDuration((async()=>{(await t(u).process(r??"",n.opts)).css})),d=p-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(c/a).toFixed(3)}kb/ms`,drop:d,name:i,"index in plugins list":e})}s.sort(((s,o)=>Number(o.drop)-Number(s.drop))),s.splice(0,0,{duration:`${p.toFixed(3)}ms`,"kb's per ms":`${(c/p).toFixed(3)}kb/ms`,drop:"--",name:"-- all plugins --","index in plugins list":"--"}),s.map((s=>("string"==typeof s.drop||(s.drop=`${s.drop.toFixed(3)}ms`),s))),console.log("Most impactful to remove, ordered by drop in duration when excluded:"),console.table(s.slice(0,11))}{const s=[];for(let e=0;e<l.length;e++){const i="postcssPlugin"in l[e]?l[e].postcssPlugin:"unknown plugin";if(o.includes(i))continue;const u=[l[e]],a=await medianDuration((async()=>{(await t(u).process(r??"",n.opts)).css})),d=p-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(c/a).toFixed(3)}kb/ms`,drop:d,name:i,"index in plugins list":e})}s.sort(((s,o)=>Number(s.drop)-Number(o.drop))),s.map((s=>(delete s.drop,s))),console.log("Most impactful to remove, ordered by increase in duration when running alone:"),console.table(s.slice(0,11))}}}};creator.postcss=!0;export{creator as default};
1+
const creator=s=>{const o=(null==s?void 0:s.ignore)??[];return{postcssPlugin:"postcss-slow-plugins",Once:async(s,{result:n,postcss:t})=>{var e,i;console.log("Analyzing with file:\n "+(null==(e=s.source)?void 0:e.input.from)+"\n");const l=(null==(i=s.source)?void 0:i.input.css)??"",r=[...n.processor.plugins.filter((s=>"postcssPlugin"in s&&"postcss-slow-plugins"!==s.postcssPlugin))],c=(await t(r).process(l??"",n.opts)).css.length/1024,medianDuration=async s=>{const o=[];for(let n=0;n<21;n++){const n=performance.now();await s(),o.push(performance.now()-n)}return o.sort(((s,o)=>s-o)),o[10]},p=await medianDuration((async()=>{(await t(r).process(l??"",n.opts)).css}));{const s=[];for(let e=0;e<r.length;e++){const i="postcssPlugin"in r[e]?r[e].postcssPlugin:"unknown plugin";if(o.includes(i))continue;const u=r.filter((s=>s!==r[e])),a=await medianDuration((async()=>{(await t(u).process(l??"",n.opts)).css})),d=p-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(c/a).toFixed(3)}kb/ms`,drop:d,name:i,"index in plugins list":e})}s.sort(((s,o)=>Number(o.drop)-Number(s.drop))),s.splice(0,0,{duration:`${p.toFixed(3)}ms`,"kb's per ms":`${(c/p).toFixed(3)}kb/ms`,drop:"--",name:"-- all plugins --","index in plugins list":"--"}),s.map((s=>("string"==typeof s.drop||(s.drop=`${s.drop.toFixed(3)}ms`),s))),console.log("Most impactful to remove, ordered by drop in duration when excluded:"),console.table(s.slice(0,11))}{const s=[];for(let e=0;e<r.length;e++){const i="postcssPlugin"in r[e]?r[e].postcssPlugin:"unknown plugin";if(o.includes(i))continue;const u=[...r.filter((s=>s===r[e]||"postcssPlugin"in s&&o.includes(s.postcssPlugin)))],a=await medianDuration((async()=>{(await t(u).process(l??"",n.opts)).css})),d=p-a;s.push({duration:`${a.toFixed(3)}ms`,"kb's per ms":`${(c/a).toFixed(3)}kb/ms`,drop:d,name:i,"index in plugins list":e})}s.sort(((s,o)=>Number(s.drop)-Number(o.drop))),s.map((s=>(delete s.drop,s))),console.log("Most impactful to remove, ordered by increase in duration when running alone:"),console.table(s.slice(0,11))}}}};creator.postcss=!0;export{creator as default};

plugins/postcss-slow-plugins/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@csstools/postcss-slow-plugins",
33
"description": "Identify slow plugins in your PostCSS config",
4-
"version": "1.0.0",
4+
"version": "1.0.1",
55
"contributors": [
66
{
77
"name": "Antonio Laguna",

plugins/postcss-slow-plugins/src/index.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const creator: PluginCreator<pluginOptions> = (opts?: pluginOptions) => {
1717
const inputCSS = root.source?.input.css ?? '';
1818

1919
const plugins = [
20-
...result.processor.plugins.filter((x) => 'postcssPlugin' in x && x.postcssPlugin !== 'postcss-slow-plugins'),
20+
...result.processor.plugins.filter((x) => ('postcssPlugin' in x) && x.postcssPlugin !== 'postcss-slow-plugins'),
2121
];
2222

2323
const outputCSS_KB = (await postcss(plugins).process(inputCSS ?? '', result.opts)).css.length / 1024;
@@ -47,7 +47,7 @@ const creator: PluginCreator<pluginOptions> = (opts?: pluginOptions) => {
4747
}> = [];
4848

4949
for (let i = 0; i < plugins.length; i++) {
50-
const name = 'postcssPlugin' in plugins[i] ? (plugins[i] as Plugin | Transformer).postcssPlugin : 'unknown plugin';
50+
const name = ('postcssPlugin' in plugins[i]) ? (plugins[i] as Plugin | Transformer).postcssPlugin : 'unknown plugin';
5151
if (ignore.includes(name)) {
5252
continue;
5353
}
@@ -102,12 +102,20 @@ const creator: PluginCreator<pluginOptions> = (opts?: pluginOptions) => {
102102
}> = [];
103103

104104
for (let i = 0; i < plugins.length; i++) {
105-
const name = 'postcssPlugin' in plugins[i] ? (plugins[i] as Plugin | Transformer).postcssPlugin : 'unknown plugin';
105+
const name = ('postcssPlugin' in plugins[i]) ? (plugins[i] as Plugin | Transformer).postcssPlugin : 'unknown plugin';
106106
if (ignore.includes(name)) {
107107
continue;
108108
}
109109

110-
const pluginsWithOnlyCurrent = [plugins[i]];
110+
const pluginsWithOnlyCurrent = [
111+
...plugins.filter((x) => {
112+
if (x === plugins[i]) {
113+
return true;
114+
}
115+
116+
return ('postcssPlugin' in x) && ignore.includes(x.postcssPlugin);
117+
}),
118+
];
111119

112120
const durationWithOnlyPlugin = await medianDuration(async () => {
113121
(await postcss(pluginsWithOnlyCurrent).process(inputCSS ?? '', result.opts)).css;

0 commit comments

Comments
 (0)