sveltick v1.7.1
ā”ļø Sveltick
Welcome to Sveltick! This is a super lightweight š¦ and fun performance&traffic-tracking library for your Svelte apps.
ā v5 Svelte support
š¦ Latest Version 1.7.1
- Adding tracking of Web traffic - šļø pageViews, š§āš¤āš§ uniqueUsers, š£ļø visitedRoutes and š trafficSources
- Also possible to get each of them only
- For the best experience we need to use
onMount
but alsoafterUpdate
and use this code in oursrc/+layout.svelte
for tracking traffic. - Fixing documentation
š„ Installation
Install Sveltick via npm:
npm install sveltick
Install Sveltick via yarn:
yarn add sveltick
š„ Quick Start
Import Sveltick into your Svelte app and start tracking your app's performance!
š Track everything you need and configure what metrics you want to see
import { onMount } from 'svelte';
import { runPerformanceTracker } from 'sveltick';
onMount(() => {
// Run the performance tracker with custom options
runPerformanceTracker({
trackMetrics: true, // Track all metrics
showAlerts: true, // Enable alerts
enableGamification: true, // Enable gamification
thresholds: {
fcp: 1800, // Custom threshold for FCP
lcp: 2300, // Custom threshold for LCP
tti: 2800, // Custom threshold for TTI
cls: 0.15, // Custom threshold for CLS
fid: 100, // Custom threshold for FID
inp: 200, // Custom threshold for INP
ttfb: 800, // Custom threshold for TTFB
componentRenderTime: 400 // Custom threshold for component render time
}
});
});
š Note:
The thresholds
object is optional, and each metric has a default value. If you don't provide a custom threshold for a particular metric, the following default values will be used:
- First Contentful Paint (FCP): 2000ms
- Largest Contentful Paint (LCP): 2500ms
- Time to Interactive (TTI): 3000ms
- Cumulative Layout Shift (CLS): 0.1
- First Input Delay (FID): 100ms (User must interact with the page to track this metric)
- Interaction to Next Paint (INP): 200ms (User must interact with the page to track this metric)
- Time to First Byte (TTFB): 800ms
- Component Render Time: 500ms
Tracking ā”ļø First Contentful Paint
, šTime to Interactive
, šLargest Contentful Paint
& š Cumulative Layout Shift
, š±ļø First Input Delay
, šļø Interaction to Next Paint
, š” Time to First Byte
<script>
import { onMount } from 'svelte';
import { trackFirstContentfulPaint, trackTimeToInteractive, trackLargestContentfulPaint, trackCumulativeLayoutShift, trackFirstInputDelay, trackInteractionToNextPaint, trackTimeToFirstByte } from 'sveltick';
onMount(async () => {
const ftp = await trackFirstContentfulPaint()
const tti = await trackTimeToInteractive()
const lcp = await trackLargestContentfulPaint();
const cls = await trackCumulativeLayoutShift();
const fid = await trackFirstInputDelay();
const inp = await trackInteractionToNextPaint();
const ttfb = await trackTimeToFirstByte();
console.log(ftp, tti, lcp, cls, fid, inp, ttfb)
});
</script>
š§ Tracking Component
Render Times
import { onMount } from 'svelte';
import { trackComponentRender } from 'sveltick';
onMount(() => {
const now = performance.now(); // Measure render time
const { name, renderTime } = trackComponentRender('YourComponent', now); // Get the name and render time
console.log(name, renderTime);
});
š Performance Report
You can access all performance metrics (including components one) at any point using:
import { onMount } from 'svelte';
import { trackComponentRender, getPerformanceMetrics } from 'sveltick';
onMount(async () => {
const now = performance.now(); // Measure render time
trackComponentRender('YourComponent', now); // Get the name and render time
const metrics = await getPerformanceMetrics();
console.log(metrics)
});
ā ļø Checking for all performance with custom threshold alerts
import { onMount } from 'svelte';
import { getPerformanceMetrics, checkPerformanceAlerts } from 'sveltick';
onMount(async () => {
const metrics = await getPerformanceMetrics();
console.log('Updated Performance Metrics:', metrics);
// Check for any performance alerts with custom thresholds
checkPerformanceAlerts({
fcp: 1800, // Custom threshold for FCP
lcp: 2300, // Custom threshold for LCP
tti: 2800, // Custom threshold for TTI
cls: 0.15, // Custom threshold for CLS
fid: 100, // Custom threshold for FID
inp: 200, // Custom threshold for INP
ttfb: 800, // Custom threshold for TTFB
componentRenderTime: 400 // Custom threshold for component render time
});
});
šÆ Checking the score of your web based by the performance
import { onMount } from 'svelte';
import { runGamification } from 'sveltick';
onMount(() => {
// Run the gamification logic
runGamification();
});
Checking all traffic metrics
For the best experience we need to use onMount
but also afterUpdate
and use this code in our src/+layout.svelte
.
import { onMount, afterUpdate } from 'svelte';
import { trackAllActivities } from 'sveltick';
// Track all activities on component mount and update
let trackedData = {};
// This function will track and log activities when the component is mounted
onMount(() => {
trackedData = trackAllActivities();
console.log('Tracked Data on Mount:', trackedData);
});
// This function will track and log activities every time the component is updated
afterUpdate(() => {
trackedData = trackAllActivities();
console.log('Tracked Data after Update:', trackedData);
});
Track Page Views
import { onMount, afterUpdate } from 'svelte';
import { trackAllActivities, getPageViews } from 'sveltick';
let pageViews = 0;
let trackedData = {};
// This function will track and log activities when the component is mounted
onMount(() => {
trackedData = trackAllActivities();
pageViews = getPageViews();
console.log(pageViews)
});
// This function will track and log activities every time the component is updated
afterUpdate(() => {
trackedData = trackAllActivities();
pageViews = getPageViews();
console.log(pageViews)
});
Track Unique Users
import { onMount, afterUpdate } from 'svelte';
import { trackAllActivities, getUniqueVisitors } from 'sveltick';
let uniqueVisitors = 0;
let trackedData = {};
// This function will track and log activities when the component is mounted
onMount(() => {
trackedData = trackAllActivities();
uniqueVisitors = getUniqueVisitors();
console.log(uniqueVisitors)
});
// This function will track and log activities every time the component is updated
afterUpdate(() => {
trackedData = trackAllActivities();
uniqueVisitors = getUniqueVisitors();
console.log(uniqueVisitors)
});
Track Route Visited
import { onMount, afterUpdate } from 'svelte';
import { trackAllActivities, getRouteViews } from 'sveltick';
let routeViews = [];
let trackedData = {};
// This function will track and log activities when the component is mounted
onMount(() => {
trackedData = trackAllActivities();
routeViews = getRouteViews();
console.log(routeViews)
});
// This function will track and log activities every time the component is updated
afterUpdate(() => {
trackedData = trackAllActivities();
routeViews = getRouteViews();
console.log(routeViews)
});
Track Traffic Sources
- We have for now 4 sources from user comes and we differ it out -
Direct
,Facebook
,Google
andOthers
import { onMount, afterUpdate } from 'svelte';
import { trackAllActivities, getTrafficSources} from 'sveltick';
let trafficSources = {};
let trackedData = {};
// This function will track and log activities when the component is mounted
onMount(() => {
trackedData = trackAllActivities();
trafficSources = getTrafficSources();
console.log(trafficSources)
});
// This function will track and log activities every time the component is updated
afterUpdate(() => {
trackedData = trackAllActivities();
trafficSources = getTrafficSources();
console.log(trafficSources)
});
š Metrics to check:
Performance
- First Contentful Paint ā”ļø
- Time to Interactive š
- Component Render Time š§
- Largest Contentful Paint š
- Cumulative Layout Shift š
- First Input Delay š±ļø (Click-based)
- Interaction to Next Paint šļø (Click-based)
- Time to First Byte š”
š¦ Traffic
- Page Views šļø
- Unique Users š§āš¤āš§
- Visited Routes š£ļø
- Traffic Sources š
š±ļø First Input Delay (FID) & šļø Interaction to Next Paint (INP)
š Note:
- FID and INP metrics are triggered by user interactions like clicks. These metrics depend on actual user interaction events.
- If no interaction occurs within 5 seconds, the FID and INP values will be set to null and won't impact the performance alerts or gamification score.
ā³ Coming up in next releases:
- Any events in page as page views, clicks per view etc...
- Plugin system - users can integrate other performance functions from other providers like Web Vitals or Lighthouse
- Integration with analytics platforms, like Google Analytics, Sentry or DataDog - data can be send to these providers
- Dashboard perfomance-tracker (docs website + dashboard)
- Visual showcase of the metrics (graphs)(probably on the dashboard web dont know yet)
Output example screenshot:
For now it is just this simple console info about the project (of course you could implement it into something bigger!). But in the upcoming days I will create a dashboard performance-tracking webapp for this library, where you could use Sveltick
from anywhere around the globe! So stay tuned guys!
š License
MIT Ā©ļø Adam Stadnik
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago