Security News
The Risks of Misguided Research in Supply Chain Security
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
perfume.js
Advanced tools
JavaScript library for measuring Short and Long Script, First Contentful Paint (FCP), Time to Interactive (TTI), Component First Paint (CFM), annotating them to the DevTools timeline and reporting the results to Google Analytics.
Perfume is a JavaScript library for measuring Short and Long Script, First (Contentful) Paint (FP/FCP), Time to Interactive (TTI), Component First Paint (CFM), annotating them to the DevTools timeline and reporting the results to Google Analytics.
When a user navigates to a web page, they're typically looking for visual feedback to reassure them that everything is going to work as expected.
Is it happening? Is it useful? Is it usable? Is it delightful? To understand when a page delivers this feedback to its users, we've defined several new metrics:
Luckily, with the addition of a few new browser APIs, measuring these metrics on real devices is finally possible without a lot of hacks or workarounds that can make performance worse.
Perfume leverage these new APIs for measuring performance that matters! ⚡️
npm (https://www.npmjs.com/package/perfume.js):
npm install perfume.js --save-dev
You can import the generated bundle to use the whole library generated by this starter:
import Perfume from 'perfume.js';
Additionally, you can import the transpiled modules from dist/es
in case you have a modular library:
import Perfume from 'node_modules/perfume.js/dist/es/perfume';
Universal Module Definition:
import Perfume from 'node_modules/perfume.js/perfume.umd.js';
This metric mark the point, immediately after navigation, when the browser renders pixels to the screen. This is important to the user because it answers the question: is it happening?
FCP marks the point when the browser renders the first bit of content from the DOM, which may be text, an image, SVG, or even a element.
const perfume = new Perfume({
firstContentfulPaint: true
});
// ⚡️ Perfume.js: First Contentful Paint 2029.00 ms
The metric marks the point at which your application is both visually rendered and capable of reliably responding to user input. An application could be unable to respond to user input for a couple of reasons:
const perfume = new Perfume({
timeToInteractive: true
});
// ⚡️ Perfume.js: Time to interactive 2452.07 ms
Performance.mark (User Timing API) is used to create an application-defined peformance entry in the browser's performance entry buffer.
perfume.start('fibonacci');
fibonacci(400);
perfume.end('fibonacci');
// ⚡️ Perfume.js: fibonacci 0.14 ms
This metric mark the point, immediately after creating a new component, when the browser renders pixels to the screen.
perfume.start('togglePopover');
$(element).popover('toggle');
perfume.endPaint('togglePopover');
// ⚡️ Perfume.js: togglePopover 10.54 ms
Save the duration and print it out exactly the way you want it.
const perfume = new Perfume({
logPrefix: "🍻 Beerjs:"
});
perfume.start('fibonacci');
fibonacci(400);
const duration = this.perfume.end('fibonacci');
perfume.log('Custom logging', duration);
// 🍻 Beerjs: Custom logging 0.14 ms
To enable Perfume to send your measures to Google Analytics User timing, set the option enable:true
and a custom user timing variable timingVar:"name"
.
const perfume = new Perfume({
googleAnalytics: {
enable: true,
timingVar: "userId"
}
});
Default options provided to Perfume.js constructor.
const options = {
firstPaint: false,
firstContentfulPaint: false,
googleAnalytics: {
enable: false,
timingVar: "name",
},
logging: true,
logPrefix: "⚡️ Perfume.js:",
timeToInteractive: false
};
npm t
: Run test suitenpm start
: Run npm run build
in watch modenpm run test:watch
: Run test suite in interactive watch modenpm run test:prod
: Run linting and generate coveragenpm run build
: Generate bundles and typingsnpm run lint
: Lints codenpm run commit
: Commit using conventional commit style (husky will tell you to use it if you haven't :wink:)Made with ☕️ by @zizzamia and I want to thank some friends and projects for the work they did:
Code and documentation copyright 2018 Leonardo Zizzamia. Code released under the MIT license. Docs released under Creative Commons.
FAQs
Web performance library for measuring all User-centric performance metrics, including the latest Web Vitals.
The npm package perfume.js receives a total of 11,396 weekly downloads. As such, perfume.js popularity was classified as popular.
We found that perfume.js demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
Research
Security News
Socket researchers found several malicious npm packages typosquatting Chalk and Chokidar, targeting Node.js developers with kill switches and data theft.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.