# Debounce yapisi ile cok sik yapilan requestleri birlestirmek ve tek bir seferde

Debouncing, çok kısa süreler içinde tekrar eden olayları (örneğin, bir kullanıcının bir düğmeye hızlıca birden fazla kez basması veya bir arama çubuğuna sürekli yazılması gibi) filtrelemek ve sadece belirli bir bekleme süresinin sonunda bir kez tepki vermek için kullanılır

* Bu teknik, gereksiz iş yükünü azaltarak uygulamanın performansını ve verimliliğini artırır.
* Performansı optimize etmek ve gereksiz işlemleri azaltmak için önemli bir tekniktir.

## Code

```typescript
export class Debouncer<T> {
	private requested = false
	private onInittedCallbacks: ((data: T) => void)[] = []

	constructor(
		private readonly initData: () => Promise<T>,
		private readonly debouncePeriod: number
	) {}

	request(onInitCallback?: (data: T) => void) {
		if (onInitCallback) this.onInittedCallbacks.push(onInitCallback)

		if (!this.requested) {
			this.requested = true

			setTimeout(async () => {
				this.requested = false

				await this.execute()
			}, this.debouncePeriod * 1000)
		}
	}

	private async execute() {
		const data = await this.initData()
		this.onInittedCallbacks.forEach(callback => callback(data))
		this.onInittedCallbacks = []
	}
}
```

## **Debounce Nasıl Çalışır?**

1. **Olay Tetiklendiğinde**: Bir olay (örneğin, bir tuşa basma veya bir API çağrısı) ilk kez tetiklendiğinde, debounce fonksiyonu bir bekleme süresi başlatır.
2. **Bekleme Süresi**: Bu süre içinde, aynı olay tekrar tetiklenirse, bekleme süresi sıfırlanır ve yeniden başlar.
3. **Süre Dolduğunda**: Bekleme süresi dolduğunda ve bu süre içinde başka bir tetikleme olmazsa, belirtilen işlem (örneğin, bir fonksiyon çağrısı) gerçekleştirilir.
4. **Tekrarlamalar Engellenir**: Bu süre içinde tekrar eden tüm olaylar görmezden gelinir, böylece yalnızca bir kez tepki verilmiş olur.

## **Kullanım Alanları**

Debouncing genellikle aşağıdaki gibi durumlarda kullanılır:

* **Arama Çubukları**: Kullanıcı arama terimlerini yazarken, her harf için ayrı bir API çağrısı yapmak yerine, kullanıcı yazmayı bitirdiğinde tek bir çağrı yapmak.
* **Buton Tıklamaları**: Kullanıcının yanlışlıkla bir düğmeye çok hızlı ard arda basmasını engellemek.
* **Pencere Boyutlandırma**: Bir pencerenin yeniden boyutlandırılması sırasında, boyut değişikliklerinin çok sık yapılmasını engellemek ve son boyut belirlendikten sonra bir kez tepki vermek.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.yemreak.com/arsiv/programming/debounce-yapisi-ile-cok-sik-yapilan-requestleri-birlestirmek-ve-tek-bir-seferde-yapmak.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
