uz
Feedback
Jasur - IT Blog

Jasur - IT Blog

Kanalga Telegramโ€™da oโ€˜tish

- @jasurkhaitov Bilganlarim va foydali bo'lishi mumkin bo'lgan ma'lumotlarini ulashib boraman. - github.com/jasurkhaitov - jasurkhaitov.uz

Ko'proq ko'rsatish
96
Obunachilar
Ma'lumot yo'q24 soatlar
-17 kunlar
-330 kunlar
Postlar arxiv
๐Ÿ—‚ Electron.js yordamida Gemini API (2.5 flash) bilan ishlaydigan AI overlay yasab ko'rdim. Umuman olganda natija yomon emas,
+4
๐Ÿ—‚ Electron.js yordamida Gemini API (2.5 flash) bilan ishlaydigan AI overlay yasab ko'rdim. Umuman olganda natija yomon emas, โ€œshare entire screenโ€ rejimida overlay koโ€˜rinmaydi.
setContentProtection(true)
Bu kodni asosiy vazifasi Windows'ning SetWindowDisplayAffinity API'sini chaqiradi va oynani har qanday capture pipeline'dan chiqarib tashlaydi. Cursor harakatlarini yashirish uchun keyboard shortcutโ€™dan foydalandim. github.com/jasurkhaitov/ai-overlay P.s. Bekorchilkdan buyam bir eksperiment @jasurkh_dev

๐Ÿ—‚ Electron.js yordamida Gemini API (2.5 flash) bilan ishlaydigan AI overlay yasab ko'rdim. Umuman olganda natija yomon emas,
+1
๐Ÿ—‚ Electron.js yordamida Gemini API (2.5 flash) bilan ishlaydigan AI overlay yasab ko'rdim. Umuman olganda natija yomon emas, โ€œshare entire screenโ€ rejimida overlay koโ€˜rinmaydi.
setContentProtection(true)
Bu kodni asosiy vazifasi Windows'ning SetWindowDisplayAffinity API'sini chaqiradi va oynani har qanday capture pipeline'dan chiqarib tashlaydi. Cursor harakatlarini yashirish uchun keyboard shortcutโ€™dan foydalanildi github.com/jasurkhaitov/ai-overlay ๐Ÿ’  @jasurkh_dev

๐Ÿ—‚ Assignment vs Mutation ~ const # Eslatma * primitive - qiymatning oโ€˜zi saqlanadi * reference - qiymat emas, xotiradagi man
๐Ÿ—‚ Assignment vs Mutation ~ const
# Eslatma * primitive - qiymatning oโ€˜zi saqlanadi * reference - qiymat emas, xotiradagi manzil (reference) saqlanadi
JavaScriptโ€™da qiymatni oโ€˜zgartirishning ikki xil yoโ€˜li bor * assignment - o'zgaruvchiga qayta qiymat berish * mutation - mavjud object / array ichidagi qiymatni oโ€˜zgartirish mutation faqatgina reference ma'lumot turlari uchun ishlaydi
let user = { name: "js" };

user.name = "ts";   // mutation

user = { name: "ts" };   // assignment
# 1. const / mutation in reference const - immutable degani emas, faqat assignment'ni taqiqlaydi, mutationni emas.
const user = { name: "js" };

user.name = "ts"; 
user = { name: "ts" }; // TypeError
# 2. React'da state rendering React render qilishi uchun state'larni oldingi va hozirgi holatlarini taqqoslaydi, agar o'zgarish bo'lsa render qiladi, o'zgarish bo'lmasa render qilmaydi Primitive state'larni taqqoslashda value'lar tenglashtiriladi, Non-primitive state'larda reference tenglashtiriladi. State'ni o'zgartirish uchun mutation qilish o'rniga assignment ishlatilinadi Mutation'ga misol:
const [user, setUser] = useState({ name: "Ali", age: 20 });

function updateAge() {
  user.age = 21;
  setUser(user);
}
* object mutate boโ€˜ldi * reference oโ€˜zgarmaydi * UI update boโ€˜lmaydi Assignment'ga misol:
function updateAge() {
  setUser({
    ...user,
    age: 21
  });
}
* yangi object yaratildi * reference oโ€˜zgardi * React re-render qiladi Buni tekshirish uchun object stateโ€™ga qiymati bir xil boโ€˜lgan yangi object berib ko'ramiz, natijada component yana render boโ€˜ladi * joshwcomeau.com/javascript/the-const-deception #javascript #react #mutation โœ…๏ธ @jasurkh_dev

๐Ÿ—‚ JavaScript Autoboxing JavaScriptโ€™da primitive qiymatlar (number, string, boolean) method va property'larga ega emas. Lekin .toLowerCase() yoki .length kabi method va propertyโ€™larni chaqirsak, ular ishlaydi. Buning asosiy sababi - autoboxing Primitive qiymat ustida method yoki property chaqirilganda, JavaScript uni vaqtincha objectโ€™ga oโ€˜rab beradi, bunday object'lar wrapper object'lar deyiladi. null va undefined'dan tashqari, har bir primitive wrapper object'ga ega: * string - String() * number - Number() * boolean - Boolean() * bigint - BigInt() * symbol - Symbol() String qiymat uchun method chaqirib ko'raylik:
const myString = "Hello World";

console.log(myString.toUpperCase());
JavaScript ichida bu taxminan shunday ishlaydi:
const myString = "Hello World";

let temp = new String(myString);
temp.toUpperCase();
temp = null; // vaqtinchalik object olib tashlanadi
~~~~~~~~~~ Savol: Primitive qiymatlarga property qoโ€˜shsa boโ€˜ladimi? Property primitiveโ€™ning oโ€˜ziga emas, wrapper objectโ€™ga qoโ€˜shiladi. Lekin bu object vaqtinchalik boโ€˜lgani uchun, vazifasini bajargach o'chib ketadi.
const number = 5;
number.type = 'odd';

console.log(number.type); // undefined
Bu tahminan shunaqa ishlaydi:
const number = 5;

let temp = new Number(number);
temp.type = 'odd';
temp = null;

temp = new Number(number);
console.log(temp.type); // undefined 
* mantrax.io/javascript-autoboxing * dapelican.dev/js-object-wrappers #javascript #autoboxing @JasXDev

Repost from Ulugbek Samigjonov
How to get the most out of 2026 - Delete social media (Instagram, TikTok, etc.). It gave you NOTHING this year. - Choose ONE skill: drawing, marketing, coding - doesn't matter. - Learn every single day: books, articles, courses, mentors. - Apply what you learn: draw, market for your uncle, build a website. - Do it daily. No breaks. No excuses. Discipline wins. - Enjoy the results. Simple. Not easy. Print this. Read it daily.

๐Ÿ—‚ Remote Code Execution in React Server Component React orqali serverdan โ€œshellโ€gacha yetib borishga olib kelishi mumkin boโ€˜lgan xato React2Shell deb ataladi # Serialization / Deserialization * Serialization - React treeโ€™ni Flight payload'ga o'tkazish * Deserialization - Flight payload'ni yana React tree'ga o'tkazish # Reactโ€™da komponentlarning ikki turi bor: * Client Component * Server Component React Server Component (RSC) - bu React component boโ€˜lib, faqat serverda ishlaydi. Browser'ga hech qanaqa JS kod yuborilmaydi, hammasi server'da run bo'lib, render natijasi browser'ga jo'natilinadi. # Server oโ€˜zidagi Component'ni JavaScript kodini run qiladi va render natijasini ( React tree'ni ) Flight payload formatda serialize qilib clientga yuboradi
React Flight payload - bu React Server Components render natijasini clientga yuborish uchun serialize qilingan maxsus maโ€™lumot strukturasi
Browser serverdan kelgan Flight payloadโ€™ni deserialize qilib, uni React tree sifatida tiklaydi va UIโ€™ni render qiladi. ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Umumiy olganda Remote Code Execution'ga sabab bo'ladigan muammo deserializationโ€™da, React2Shell holatida deserialization faqatgina client tarafda emas server tarafda ham ishlatilinadi. Deserialization bosqichida server'ga kelgan Flight payloadโ€™ni yetarli validatsiyasiz React modeliga (React Tree) aylantiradi, natijada tarkibida zarari JavaScript kod bo'lsa, kod birdaniga run bo'ladi.
const flight_payload = {
    '0': '$1',
    '1': {
        'status':'resolved_model',
        'reason':0,
        '_response':'$4',
        'value':'{"then":"$3:map","0":{"then":"$B3"},"length":1}',
        'then':'$2:then'
    },
    '2': '$@3',
    '3': [],
    '4': {
        '_prefix':'console.log(7*7+1)//',
        '_formData':{
            'get':'$3:constructor:constructor'
        },
        '_chunks':'$2:_response:_chunks',
    }
}
Code: blog.logrocket.com/react2shell-exploit Payload ichidagi 0, 1, 2, 3 va 4 string'lar model/chunk reference'lar hisoblanadi. $1 - 0 ID'li model/obyektga toโ€˜gโ€˜ridanโ€‘toโ€˜gโ€˜ri reference beradi. $@3 - 3 ID'li model/obyektni Promise (async) sifatida reference qiladi, yaโ€™ni keyinroq resolve qilinadi. "status": "resolved_model" - React uni element treeโ€™dagi komponent qismi sifatida koโ€˜rishi kerakligi haqida signal beradi "then": "$2:then" - Model thenable ekanini bildiradi va resolve jarayonida 2 IDโ€™li referenceโ€™dagi then metodi ishlatiladi. "value" - Modelning serialize qilingan ichki qiymati, React uni deserialize qilib ichki struktura sifatida qayta tiklaydi. "_response": "$4" - Ushbu modelga tegishli response chunk 4 ID orqali bogโ€˜langanini bildiradi. "_formData.get" - React deserialization vaqtida foydalanadigan FormData accessor referenceโ€™i, bu joy notoโ€˜gโ€˜ri ishlatilsa ichki APIโ€™larga yoโ€˜l ochib beradi # Hozirda bu bug fix qilinganini aytishyapti * nextjs.org/blog/CVE-2025-66478 Ko'proq o'qish uchun: * github.com/AdityaBhatt3010/React2Shell-CVE-2025-55182-The-Deserialization-Bug-That-Broke-the-Web * ox.security/blog/react2shell-going-granular-a-deep-deep-deep-technical-analysis-of-cve-2025-55182 * vercel.com/blog/our-million-dollar-hacker-challenge-for-react2shell #react #nextjs @JasXDev

Console'ga nima chiqadi ?
Anonymous voting

photo content

๐Ÿ‘จโ€๐Ÿ’ป "1" + 1 = "11" | Type Coercion Type Coercion - bu JavaScriptda eng koโ€˜p tanqidga uchraydigan kamchiliklaridan biri. Typ
๐Ÿ‘จโ€๐Ÿ’ป "1" + 1 = "11" | Type Coercion
Type Coercion - bu JavaScriptda eng koโ€˜p tanqidga uchraydigan kamchiliklaridan biri.
Type Coercion - bu JavaScript avtomatik ravishda bir turdagi qiymatni boshqasiga oโ€˜zgartiradigan holat String Coercion - Masalan:
console.log('5' + 2);     // '52'
console.log('5' + true);  // '5true'
Number Coercion - Masalan:
console.log('5' - 2);     // 3
console.log('5' * 2);     // 10
console.log('10' / '2');  // 5
Bu natijalarga sabab - JavaScriptโ€™da type checking yoโ€˜qligi va type coercion (tur oโ€˜zgarishi)'dir. + operatori 2 maqsadda ishlatiladi: string'larni birlashtirish (concatenation) yoki matematik amallarni bajarish uchun. Agar + operatori ishlatilayotgan joyda faqat raqamlar (number) boโ€˜lsa, JavaScript buni matematik amal deb tushunadi va oddiy qoโ€˜shish bajariladi. Ammo agar operandlardan biri string boโ€˜lsa, JavaScript buni matematik emas, matn birlashtirish (concatenation) deb tushunadi. Bu holatda, ikkala operand ham string'ga aylantirilib, ketma-ket birlashtiriladi. -, / va * operatorlari faqat matematik amallar uchun ishlatiladi. Bu operatorlar bilan ishlaganda, operandlar son (number) boโ€˜lishi kerak. Shuning uchun JavaScript bu operandlarni avtomatik ravishda number turiga type coercion orqali oโ€˜zgartiradi. Masalan:
"10" / "2"  โ†’  10 / 2  โ†’  5
Hozirda bunaqa narsalarni o'rganish shart emas, koโ€˜pchilik TypeScriptโ€™dan foydalanadi, strict type checking orqali bunday xatolarning oldini oladi. ๐Ÿ”— geeksforgeeks.org/javascript/what-is-type-coercion-in-javascript ๐Ÿ”— developer.mozilla.org/en-US/docs/Glossary/Type_coercion #javascript #typeCoercion โœ… @JasXDev

Console'ga nima chiqadi ?
Anonymous voting

photo content

๐Ÿ—‚ Hot Module Replacement (HMR) Hot Module Replacement (HMR) โ€” sahifani toโ€˜liq yangilamasdan turib, faqat oโ€˜zgartirilgan kod
๐Ÿ—‚ Hot Module Replacement (HMR) Hot Module Replacement (HMR) โ€” sahifani toโ€˜liq yangilamasdan turib, faqat oโ€˜zgartirilgan kod qismini yuklab beradi. Masalan, CSS faylida kichik oโ€˜zgarish kiritilganda, brauzer faqat shu oโ€˜zgarishni koโ€˜rsatadi, sahifaning qolgan qismi yangilanmaydi. HMR faqat ishlab chiqish (kod yozish, development) jarayonida ishlaydi. U deyarli har bir build vositalari (bundler'lar)'da mavjud. Vite, Webpack, etc... * HMR qanday ishlaydi ? Qachonki dastur run (ex. React / Vite, npm run dev) qilingan vaqtda, server ishga tushadi. Development server (vite, webpack) loyihadagi fayllarni doimiy kuzatib turadi. Fayl (masalan, CSS yoki JS) oโ€˜zgarsa - server buni darhol sezadi. Serverda WebSocket server ochilgan boโ€˜ladi.
WebSocket โ€” bu server va mijoz oโ€˜rtasida real vaqtli, ikki tomonlama aloqa oโ€˜rnatishga imkon beradigan texnologiya.
Oโ€˜zgarish boโ€˜lsa, server WebSocket orqali brauzerga o'zgargan file haqida signal yuboradi. Brauzer WebSocket orqali serverga ulangan boโ€˜ladi (ws://localhost:5173). Signal kelgach, brauzer faqat oโ€˜zgargan faylni qayta yuklaydi. Sahifa toโ€˜liq yangilanmaydi, holat (state) saqlanadi. Umumiy jarayon:
Fayl oโ€˜zgarsa โ†’ Server sezadi โ†’ WebSocket orqali xabar โ†’ Brauzer modulni yangilaydi โ†’ Sahifa yangilanmaydi (reload bo'lmaydi).
Tekshirib ko'rish uchun vite.config.ts file da hmr ni o'chirib qo'yamiz
import { defineConfig } from 'vite'

export default defineConfig({
  server: {
    hmr: false, // HMR toโ€˜liq oโ€˜chiriladi
  },
})
Natijada o'zgarishlar avtomatik yuklanmaydi, yoki sahifa to'liq load bo'ladi. ๐Ÿ‘ฉโ€๐Ÿ’ป webpack.js.org/concepts/hot-module-replacement #react #vite #hmr โœ… @JasXDev

โš™๏ธ Angular Modules vs Standalone Components Angular'da komponentlar ikkita asosiy usul bilan ishlatiladi: * Module'lar orqali
โš™๏ธ Angular Modules vs Standalone Components Angular'da komponentlar ikkita asosiy usul bilan ishlatiladi: * Module'lar orqali * Standalone component'lar orqali Angular Modules (Modullar) Modul - bu bir nechta komponent yoki servise'larni bir joyga jamlaydigan konteyner.
@NgModule({
  declarations: [MyComponent],
  exports: [MyComponent]
})
export class MyModule {}
* Har bir komponent avval modulga declarations orqali qoโ€˜shiladi. * Qo'shilgan component'dan boshqa joyda foydalanish uchun imports orqali chaqiriladi.
Agar komponent declarations'ga qoโ€˜shilgan boโ€˜lsa, uni faqat oโ€˜sha modul ichida ishlatish mumkin. Uni boshqa modul'da ishlatish uchun, export qilingan boโ€˜lishi va modul import qilingan boโ€˜lishi kerak.
Standalone Components ( Mustaqil komponentlar ) Standalone component'lar Angular 14 versiyada qo'shilgan bo'lib, standalone komponent oโ€˜zini oโ€˜zi boshqaroladi - unga modul kerak emas. Istagan boshqa komponentni React komponent'lariga oโ€˜xshab toโ€˜gโ€˜ridan-toโ€˜gโ€˜ri imports qilib ishlatsa boโ€˜ladi.
@Component({
  standalone: true,
  selector: 'app-hello',
  template: '<p>Hello!</p>',
  imports: [CommonModule]
})
export class HelloComponent {}
React:
import Card from './Card'
Angular:
imports: [CardComponent]
React component'lar ham standalone component hisoblanadi
Qulay tarafi: Tezroq ishlaydi, kod kamroq, soddaroq Kamchiligi: Katta loyihalarda boshqaruv biroz murakkab boโ€˜lishi mumkin ๐Ÿ”— medium.com/@ausaf.cs/angular-modules-vs-standalone-components-a-detailed-comparison-7b28c803cdd2 ๐Ÿ”— lynkz.com.au/blog/2024-angular-standalone-vs-modules #angular #standalone #module โœ… @JasXDev

๐Ÿ—‚ Cache Busting in React / Vite React projectda frontendโ€™ga yangi feature (xususiyat) qoโ€˜shdim va saytni deploy qildim. Leki
๐Ÿ—‚ Cache Busting in React / Vite React projectda frontendโ€™ga yangi feature (xususiyat) qoโ€˜shdim va saytni deploy qildim. Lekin ayrim brauzerlarda eski versiya chiqib qolmoqda. Bu holat caching muammosi bilan bogโ€˜liq
Frontend loyihalar (masalan, React) yangilanganda, foydalanuvchilarning brauzeri koโ€˜pincha eski fayllarni keshlangan (cache) holatda saqlab qoladi.
Brauzer har doim har bir faylni qayta yuklab olish oโ€˜rniga, uni bir marta yuklab olgach, keyingi marta site'ga kirilganda aynan oโ€˜sha faylni cacheโ€™dan olib foydalanadi. Muammo shundaki, loyiha build qilinganda fayllar yangilansa ham, ularning nomi (main.js kabi) oโ€˜zgarmasligi mumkin. Natijada foydalanuvchi sayt'ga kirganda, brauzer fayl nomi bir xil boโ€˜lgani uchun uni eski versiyadan โ€“ yaโ€™ni cacheโ€™dan olib ishlatadi. Shuning uchun yangi oโ€˜zgarishlar koโ€˜rinmaydi. "Cache Busting" โ€” bu yangi fayllarni avtomatik ravishda yangi nom bilan yaratish usuli. Har safar build qilinganda fayl nomiga hash qoโ€˜shiladi, hash bu raqam va harflar'dan tashkil topgan birikma. Project har build qilinganda, o'zgarish kiritilgan file'da hash o'zgaradi Masalan:
main.js โ†’ main.a3f5s3.js
Shunda brauzer bu faylni yangi fayl deb biladi va cache oโ€˜rniga yangisini yuklaydi. React (Vite) loyihada, vite.config.ts fayl'dagi build'ga rollupOptions qo'shish orqali Cache Busting qilish mumkin:
export default defineConfig({
  build: {
    outDir: 'dist',
    assetsDir: 'assets',
    rollupOptions: {
      output: {
        entryFileNames: 'assets/[name].[hash].js',
        chunkFileNames: 'assets/[name].[hash].js',
        assetFileNames: 'assets/[name].[hash].[ext]',
      },
    },
  },
})
Bu konfiguratsiya har bir faylni hash bilan nomlaydi, shunda brauzer eskisini emas, yangisini yuklaydi. ๐Ÿ”— keycdn.com/support/what-is-cache-busting ๐Ÿ”— maxtsh.medium.com/the-ultimate-guide-to-cache-busting-for-react-production-applications-d583e4248f02 #reactjs #vite #cache #busting โœ… @JasXDev

โš™๏ธ Kichik Experiment React component'ni Angular project'da ishlatib ko'rdim. React kutubxonani o'rnatib olamiz npm install re
โš™๏ธ Kichik Experiment
React component'ni Angular project'da ishlatib ko'rdim.
React kutubxonani o'rnatib olamiz
npm install react react-dom
* package.json
{
     .....
     "react": "^19.1.0",
     "react-dom": "^19.1.0",
     .....
}
TypeScript bilan ishlash uchun kerakli @type kutubxonalarni ham oโ€˜rnatamiz
npm install --save-dev @types/react @types/react-dom
* tsconfig.json
{
  "compilerOptions": {
    "jsx": "react"
  }
}
React component yaratamiz (e.g. src/react/HelloReact.tsx)
import React from 'react';

const HelloReact = () => {
  return <div>Hello from React!</div>;
};

export default HelloReact;
Yaratilgan React component'ni DOM'ga joylashtirish (render qilish) uchun ReactWrapper funksiya yozamiz.
import React from 'react';
import ReactDOM from 'react-dom/client';
import HelloReact from './HelloReact';

export function renderReactComponent(container: HTMLElement) {
  const root = ReactDOM.createRoot(container);
  root.render(<HelloReact />);
}
Bu funksiyada ReactDOM.createRoot() orqali React komponentini render qilamiz. React oโ€˜zining virtual DOM mexanizmi yordamida HelloReact komponentini HTML elementga aylantiradi.
@Component({
  selector: 'app-react-wrapper',
  template: `<div id="react-root"></div>`,
  standalone: true,
})

export class ReactWrapperComponent implements AfterViewInit {
  constructor(private elRef: ElementRef) {}

  ngAfterViewInit() {
    const container = this.elRef.nativeElement.querySelector('#react-root');
    renderReactComponent(container);
  }
}
ReactWrapperComponent vazifasi, Render qiling React component'ni Angular componentda ochilgan <div id="react-root"></div>'ga joylash. AfterViewInit โ€” bu Angular lifecycle metodi hisoblanadi. Uning vazifasi - ngAfterViewInit funksiyasi ichidagi kodlarni komponentning barcha view elementlari toโ€˜liq render qilingandan keyin ishga tushirishdir. AfterViewInit - angular.dev/api/core/AfterViewInit Hosil bo'lgan Angular component'ni istalgan joy'da foydalana olamiz
<app-react-wrapper></app-react-wrapper>
๐Ÿ”— medium.com/@zacky_14189/embedding-react-components-in-angular-the-easy-way-60f796b68aef #react #angular ๐Ÿ’  @JasXDev

๐Ÿ”‹ Lazy loading Lazy loading - bu veb-sahifaning maโ€™lum qismlarini foydalanuvchi yoki brauzerga kerak bo'lmaguncha yuklamasda
๐Ÿ”‹ Lazy loading
Lazy loading - bu veb-sahifaning maโ€™lum qismlarini foydalanuvchi yoki brauzerga kerak bo'lmaguncha yuklamasdan kutib turish (render qilish jarayonini to'xtatib turish)
Hammasini birdaniga yuklash (eager loading) oโ€˜rniga, brauzer baโ€™zi resurslarni faqat foydalanuvchiga kerak sahifa bilan oโ€˜zaro aloqaga kirishgandan keyin soโ€˜raydi. Agar Lazy loading toโ€˜gโ€˜ri amalga oshirilsa, sahifaning yuklanish tezligini oshirishga yordam beradi. Bu turdagi yuklash 'dangasa' (lazy) deb ataladi, chunki u brauzerni ishini kechiktirishga undaydi. Masalan, blog postda sahifaning yuqori qismida rasm, pastki qismida diagramma bor deb faraz qilaylik. Blog postini oโ€˜qiyotgan foydalanuvchi bir necha daqiqa davomida matnning pastki qismiga yetib bormasligi mumkin, shuning uchun brauzer foydalanuvchi oโ€˜sha boโ€˜limga oโ€˜tmaguncha diagrammani yuklashni kutadi. Shunday qilib, sahifa dastlab tezroq yuklanadi, chunki brauzer ikkita rasm oโ€˜rniga bitta rasm yuklamoqda. Veb-sahifa yuklanganda, foydalanuvchi koโ€˜rayotgan qismi 'yuqori qism' (above the fold) deb ataladi, foydalanuvchi hali koโ€˜rmayotgan qismi esa 'quyi qism' (below the fold) deb ataladi.
"above the fold" va "below the fold" gazeta maketlaridan kelib chiqqan. Gazetalar, odatda, gorizontal boโ€˜yicha ikkiga buklangan, oldingi yarmi esa buklangan joydan yuqorida joylashgan boโ€˜ladi.
* Rasmlar uchun lazy loading amalga oshirish Lazy loading-ni amalga oshirishning bir usuli โ€” bu img tegida loading atributidan foydalanish. Quyidagi misolda koโ€˜rsatilganidek, loading="lazy" qoโ€˜shish brauzerga foydalanuvchi rasmga yaqinlashguncha uni yuklamaslikni buyuradi
<img src="example.com/image" loading="lazy">
* Eager loading nima ? Eager loading โ€” bu barcha veb-sahifa resurslarini bir vaqtning oโ€˜zida yuklash jarayoni. Murakkab va kodi koโ€˜p boโ€˜lgan veb-ilovalar, masalan, onlayn oโ€˜yinlar, koโ€˜pincha eager loading'dan foydalanishni afzal koโ€˜radi.
<img src="example.com/image" loading="eager">
loading="eager" atributidan foydalanildi, bu esa rasmni darhol yuklashni ta'minlaydigan standart hisoblanadi. Bu, darhol ko'rilishi kerak bo'lgan muhim rasmlar uchun ishlatilinadi. image tag'da default holatda loading attribute qiymati eager bo'ladi ๐Ÿ”— cloudflare.com/learning/performance/what-is-lazy-loading โš™๏ธ React Lazy Loading React'da component dinamik tarzda yuklanish uchun, React.lazy funksiyasi ishlatilinadi Odatda, Lazy loading React ilovalarida ko'p ishlatilmaydi, chunki React ko'pincha bitta sahifali ilovalar (SPA) yaratish uchun ishlatiladi. React odatda butun ilovani bitta faylga birlashtiradi (bundle qiladi). Misol: Lazy Loading Component
import React, { Suspense } from "react";

const LazyComponent = React.lazy(() => import("./LazyComponent"));

function App() {
  return (
    <div>
      <h1>Welcome to My App</h1>
      <Suspense fallback={<div>Loading...</div>}>
        <LazyComponent />
      </Suspense>
    </div>
  );
}

export default App;
React.lazy faqat LazyComponent render qilinganda dinamik ravishda import qiladi. Suspense fallback komponent yuklanayotgan paytda zaxira UI taqdim etadi (loader). ๐Ÿ“น youtu.be/KcbPpVeDqKA?si=2_eFmDXsVeC3--AR โš™๏ธ Angular Lazy Loading Default holatda, NgModul'lar tezda yuklanadi. Bu shuni anglatadiki, ilova yuklanganda, barcha NgModul'lar darhol yuklanadi, ular hozirgi vaqtda zarur yoki yo'qligiga qaramay. Lazy loading dastlabki paket (bundle) o'lchamlarini kichikroq saqlashga yordam beradi, bu esa yuklash vaqtlarini qisqartirishga yordam beradi. Angular modullarini lazy loading qilish uchun AppRoutingModule routing konfiguratsiyasida component o'rniga loadChildren'dan foydalaniladi
const routes: Routes = [
  {
    path: 'items',
    loadChildren: () => import('./items.module').then(m => m.ItemsModule)
  }
];
๐Ÿ”— v17.angular.io/guide/lazy-loading-ngmodules ๐Ÿ“น youtu.be/NFJbXP6Ci98?si=tutzScmyavxQbYim #lazyLoading #react #angular โœ… @JasXDev

๐Ÿ—‚ Linked List in Javascript (2- qism) Yuqorida taโ€™kidlanganidek, ListNode ikkita elementni oโ€˜z ichiga oladi: maโ€™lumotlar va
๐Ÿ—‚ Linked List in Javascript (2- qism) Yuqorida taโ€™kidlanganidek, ListNode ikkita elementni oโ€˜z ichiga oladi: maโ€™lumotlar va keyingi node'ning manzili. * Node Class & Constructor LinkedList class yaratishdan oldin, ListNode yaratishimiz kerak. LinkedList'ni tashkil etuvchi node'larni yaratish uchun class Node ishlatiladi. Har bir node data xossasiga va next xossaga ega boโ€˜ladi. data xususiyati node'da saqlanadigan maโ€™lumotlarni saqlaydi. next xususiyat LinkedList'ning keyingi node'ga ishora qiladi. JavaScriptda ListNode'ni quyidagicha amalga oshirishimiz mumkin:
class Node {
    constructor(data) {
        this.data = data
        this.next = null                
    }
}
this.data = data - Node class'ga uzatilgan maโ€™lumotlar joriy obyektning data xususiyatiga saqlanadi. this.next = null node'ning next xossasiga null'ga oโ€˜rnatadi. * Linked List Class & Constructor Endi Node Class'ga ega boโ€˜lganimiz sababli, biz LinkedList class'ni yaratishimiz mumkin. LinkedList Class head va tail xususiyatlariga ega. Head - LinkedList'dagi birinchi node'ga ishora qiladi. Tail - LinkedList'dagi oxirgi node'ga ishora qiladi. Agar LinkedList bo'sh bo'lsa ya'ni bironta node mavjud bo'lmasa head va tail qiymati null'ga teng bo'ladi
class LinkedList {
   constructor() {
    this.head = null;
    this.tail = null;
  }
}
* Yangi node qo'shish add() method LinkedList'ning oxiriga yangi node qo'shadi. Agar List'ning birinchi elementi (head) null qiymatga ega bo'lsa, yangi node head'ga biriktiriladi. Agar head qiymatga ega bo'lsa, yangi node tail'ga biriktiriladi. Ushbu usulning time complexity'si O (1) ga teng, chunki u yangi node'ni qoโ€˜shish uchun LinkedList orqali loop oโ€˜tishi shart emas.
add(data) {
  const node = new Node(data);

  if (this.head === null) {
    this.head = node;
  } else {
    this.tail.next = node;
  }

  this.tail = node;
* Linked List Loop PrintAll usuli head node'dan boshlanadi va har bir node orqali tail node'ga yetguncha takrorlanadi.
  printAll() {
    let current = this.head;

    while (current !== null) {
      console.log(current.data);
      current = current.next;
    }
  }
Endi biz buni yangi LinkedList yaratish va unga baโ€™zi node'larni qoโ€˜shish orqali sinab koโ€˜rishimiz mumkin.
const list = new LinkedList();

list.add(1);
list.add(2);
list.add(3);
list.add(4);

list.printAll();
* Ma'lum bir index'dagi node'ni olish get usuli node'ning maโ€™lumotlarini koโ€˜rsatilgan indeks'da qaytaradi. U indeks qiymatini qabul qiladi va koโ€˜rsatilgan indeksdagi node'ga yetib borguncha LinkedList orqali takrorlanadi. Keyin oโ€˜sha node'ning maโ€™lumotlarini qaytaradi. Ushbu usulning time complexity'si O(n) ga teng, chunki u koโ€˜rsatilgan indeksdagi node'ni topish uchun LinkedList orqali oโ€˜tishi kerak. Massivlar buning uchun yaxshiroq variant, chunki ular istalgan vaqt kirish imkoniyatiga ega. Massivdagi elementga murojaat qilishning time complexity'gi O(1) ga teng.
 get(index) {
    let current = this.head;
    let i = 0;

    while (i < index) {
      current = current.next;
      i++;
    }

    return current.data;
  }
๐Ÿ‘จโ€๐Ÿ’ป https://github.com/bradtraversy/traversy-js-challenges/blob/main/07-stacks-queues-linked-lists/10-linked-list-implementation/readme.md ๐Ÿ“น https://youtu.be/ZBdE8DElQQU?si=S2P__kh9HkIO61MT ๐Ÿ”— https://www.freecodecamp.org/news/implementing-a-linked-list-in-javascript/ #algorithm #linkedList #js โœ… @JasXDev