Skip to content

Instantly share code, notes, and snippets.

Avatar
👋

Samar Panda samarpanda

👋
View GitHub Profile
View 0-rate-limiters.md

Scaling your API with rate limiters

The following are examples of the four types rate limiters discussed in the accompanying blog post. In the examples below I've used pseudocode-like Ruby, so if you're unfamiliar with Ruby you should be able to easily translate this approach to other languages. Complete examples in Ruby are also provided later in this gist.

In most cases you'll want all these examples to be classes, but I've used simple functions here to keep the code samples brief.

Request rate limiter

This uses a basic token bucket algorithm and relies on the fact that Redis scripts execute atomically. No other operations can run between fetching the count and writing the new count.

View parallel-fetch.js
const parallelFetch = async (urls) => {
var data = await Promise.all(
urls.map((fetchParams) => {
const { url, options = {} } = fetchParams;
return fetch(url, options).then((response) => response.json());
})
);
return data;
}
@samarpanda
samarpanda / Largest-Contentful-Paint.md
Last active Apr 24, 2021
Largest contentful Paint
View Largest-Contentful-Paint.md

Largest contentful paint (LCP)

I wonder if i can see all the lcp elements instead of getting the eventual lcp element from the performance panel. Below script higlights all lcp elements available on the page. After running the script in console / source - snippet it highlight by a dotten blue line for all lcp elements. This uses browser's PerformanceObserver API to get all lcp elements.

By @samarpanda

/**
 * PerformanceObserver
 */
@samarpanda
samarpanda / express-etag-fix.md
Last active Apr 10, 2021
Express - ETag fix for multiple servers
View express-etag-fix.md

Express Etag fix (Multiple servers)

Etag uses information from file system stat. Including the modified time similar to nginx & apache. This can't calculate the hash of the contents. Doing so that would require reading the file from the file system twice for every single request scope.

Files usually have slightly different modification timestamp between multiple servers. Similarly apache/nginx would do the same.

Simple way to calculate ETag for the static files:

View NY-WebPerf-25th-Feb.md

New York WebPerf 25th Feb

Talk by @samarpanda

CLS

try {
  var cumulativeLayoutShiftScore = 0;
  const observer = new PerformanceObserver(list => {
@samarpanda
samarpanda / first-input-delay.md
Last active Jun 26, 2020
First input delay (FID)
View first-input-delay.md

First input delay(FID)

This is an interactive metric. Collected once user tries to interact with the page.

Using web-vitals npm package

import {getFID} from 'web-vitals';
getFID(console.log);
@samarpanda
samarpanda / docker.md
Created May 26, 2020
Docker cheatsheet
View docker.md
View Talk-about-performance.md

Talk about performance

  • LCP, FID, CLS, Other Perf timing API
  • Improving loading experience includes - link rel preload, Priority Hints, Native lazy loading using simple html image attributes etc
  • Various performance APIs - UserTiming, LongTask, ElementTiming, ResourceTiming, ServerTiming, PaintTiming etc.
  • Tips & Tricks around ChromeDevtools to profile, detect, address issues & repeat i.e overrides, log point, performance profiling.
  • Demistify values around webpagetest
  • Font optimization techniques
  • Explaing browser rendering pipeline
  • Progressive Web Apps - ServiceWorker as a reverse proxy