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Ç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 budgetFikir 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
İ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 122Edge 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.
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
- 1Serverindəki ən ağır üç əməliyyatı siyahıya al (hash-ləmə, şəkil emalı, böyük JSON, render).
- 2Hər birini real runtime-da ölç və platformanın limiti ilə müqayisə et.
- 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