RƏSƏDXANA

Həftə 8 · 15/23

CPU büdcəsi: edge-də hər millisaniyə

7 dəqiqəlik oxu

Liftdə on saniyən var. Qırx dəqiqəlik təqdimat ora sığmır — və səni yarıda kəsmirlər, sadəcə qapı açılır və sən çıxırsan.

Edge platformalarında sorğu başına CPU büdcəsi var (məsələn 10ms). Büdcəni aşan iş yavaşlamır, dayandırılır. Ona görə ağır işi ölçüb başqa yerə köçürürsən.

// budget: 10 ms per request
await bcrypt.compare(password, hash);   // measured: 410 ms  -> killed
Bir sətir, qırx dəfə artıq. Kod düzgündür — sadəcə bu platforma üçün deyil.

Çox deyilən söz: Server güclüdür. İş ağır olsa da, sadəcə bir az gec cavab verər.

Edge və serverless platformalarda CPU vaxtı sərt büdcədir: onu aşan sorğu yavaşlamır, dayandırılır. AI bunu bilmir və Node-da işləyən adi kitabxananı gətirir. Sən ağır əməliyyatı real runtime-da ölçürsən, sonra onu ya daha ucuz alqoritmə, ya platformanın native API-sinə (Web Crypto), ya WASM-a, ya da brauzerə və ya növbəyə köçürürsən.

Sənin kulvarında

Sorğu başına 10ms

Edge platformasında büdcə sorğu başına CPU vaxtıdır və şəbəkə gözləməsi ona sayılmır. Server-side render, parol hash-i və böyük JSON parse — üçü də bu büdcəni yeyir.

// measure the heaviest call, then compare with the platform's limit
const t0 = performance.now();
await hashPassword(pw);
console.log(performance.now() - t0, "ms");   // 410 ms against a 10 ms budget

Fikir eynidir, rəqəmlər və alətlər fərqli. Seçimin brauzerində yadda qalır və bütün dərslərə tətbiq olunur.

Real runtime-da ölç

Noutbukdakı Node rəqəmləri edge-dəkindən fərqlidir. Cloudflare Workers-da təhlükəsizlik üçün saat təmiz hesablama zamanı irəliləmir, ona görə lokal ölç, sonra panelin CPU vaxtı metriki ilə təsdiqlə.

Sən bunu istə

const t0 = performance.now();
for (let i = 0; i < 20; i++) await hashPassword("x");
console.log((performance.now() - t0) / 20, "ms per call");

Native kitabxanadan güclüdür

Web Crypto brauzerdə və edge-də native işləyir və saf JS kitabxanasından qat-qat sürətlidir. Kriptoqrafiya üçün əvvəl ona bax.

Sən bunu istə

const key = await crypto.subtle.importKey(
  "raw", new TextEncoder().encode(password), "PBKDF2", false, ["deriveBits"]);
const bits = await crypto.subtle.deriveBits(
  { name: "PBKDF2", hash: "SHA-256", salt, iterations: 600_000 }, key, 256);

İşi sorğunun yolundan çıxar

Limitə sığmayan iş dayandırılır. Onu brauzerə (yavaş açar törəməsi), növbəyə (şəkil emalı) və ya cron-a (təmizlik) köçür.

Diff oxuyanda soruş: Yeni kitabxana gələndə soruş: bu, hədəf runtime-da işləyirmi və ən ağır əməliyyatı neçə millisaniyədir?

Terminlər

CPU time / wall time
CPU vaxtı — kodun həqiqətən işlədiyi vaxt. Wall time — ümumi vaxt, gözləmə daxil. Edge limiti adətən birincini ölçür.
Web Crypto API
Brauzerdə və edge-də olan native kriptoqrafiya (crypto.subtle). JS-də yazılmış kitabxanadan qat-qat sürətlidir.
WebAssembly (WASM)
JS-dən sürətli işləyən kompilyasiya olunmuş kod. Ağır hesablamanı edge-ə sığdırmağın bir yolu — amma ölçülmədən seçilməməlidir.
offloading
Ağır işi sorğunun yolundan çıxarmaq: brauzerə, növbəyə, cron-a və ya ayrıca servisə.
cold start
Uzun fasilədən sonra ilk sorğunun əlavə başlama vaxtı. Böyük bundle onu uzadır.
micro-benchmark
Bir əməliyyatın dəfələrlə təkrarlanıb orta vaxtının ölçülməsi. Təxmin yox, rəqəm.

İndi sən yoxla

1Canlıda nə baş verir?

// Cloudflare Worker, free plan (10 ms CPU per request)
import bcrypt from "bcryptjs";
const ok = await bcrypt.compare(password, user.hash); // cost 12

2Edge CPU limiti hansı vaxtı ölçür?

Hazır prompt

İngiliscədir, çünki terminlər ingiliscədir. Tərcümə etsən də terminləri saxla.

prompt
Before choosing a library for <task>, check it against the platform.

- Platform: <e.g. Cloudflare Workers, free plan, 10 ms CPU per request>.
- Write a micro-benchmark for the heaviest operation and report CPU time
  per call (not wall time), on the real runtime if possible.
- If it doesn't fit, list the options in order: a cheaper algorithm,
  a native platform API (Web Crypto, streams), WASM, moving the work
  to the client, a queue or a scheduled job. For each, say what it costs
  in security or user experience.

Never choose a Node-only library for an edge runtime without saying so.

Öz kodunda

  1. 1Serverindəki ən ağır üç əməliyyatı siyahıya al (hash-ləmə, şəkil emalı, böyük JSON, render).
  2. 2Hər birini real runtime-da ölç və platformanın limiti ilə müqayisə et.
  3. 3Limitə yaxın və ya ondan yuxarı olan birini prompt-dakı seçimlərdən biri ilə köçür, sonra yenidən ölç.

Bunu görəndə bitib: Ən ağır əməliyyatın ölçülmüş CPU vaxtı limitdən aşağıdır və rəqəm layihədə yazılıb.

Daha dərinə

Oxumaq üçün