برنامه نویسی

6 تکنیک پیشرفته JavaScript برای ساختن رابط های جستجوی سریع در زمان واقعی | آموزش 2024

من به عنوان یک نویسنده پرفروش ، شما را دعوت می کنم تا کتابهای من را در آمازون کشف کنید. فراموش نکنید که مرا در متوسط ​​دنبال کنید و پشتیبانی خود را نشان دهید. ممنون حمایت شما به معنای جهان است!

رابط های جستجوی زمان واقعی در برنامه های وب مدرن ضروری شده اند. بیایید شش تکنیک قدرتمند JavaScript را که تجربیات جستجوی کارآمد و پاسخگو ایجاد می کنند ، کشف کنیم.

در حالی که کاربران به سرعت تایپ می کنند ، از تماس های بیش از حد API جلوگیری می کند. این تکنیک منتظر مکث در تایپ قبل از اجرای جستجو است و بار سرور را به میزان قابل توجهی کاهش می دهد. در اینجا یک اجرای وجود دارد:

function debounce(func, wait) {
    let timeout;
    return function executedFunction(...args) {
        const later = () => {
            clearTimeout(timeout);
            func(...args);
        };
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
    };
}

const searchInput = document.querySelector('#search');
const handleSearch = debounce((event) => {
    performSearch(event.target.value);
}, 300);

searchInput.addEventListener('input', handleSearch);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بهینه سازی پرس و جو با تمیز کردن و قالب بندی ورودی کاربر ، راندمان جستجو را تضمین می کند. این شامل از بین بردن فضای سفید اضافی ، دست زدن به شخصیت های خاص و تهیه پرس و جو برای تطبیق بهینه پایگاه داده است:

function optimizeSearchQuery(query) {
    return query
        .trim()
        .toLowerCase()
        .replace(/[^\w\s]/g, '')
        .replace(/\s+/g, ' ');

    const searchIndex = new Map();
    document.querySelectorAll('.searchable').forEach(element => {
        const text = element.textContent.toLowerCase();
        searchIndex.set(element, text);
    });
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نتایج ذخیره سازی با ذخیره نتایج جستجوی اخیر ، زمان پاسخ را بهبود می بخشد. این تکنیک از درخواست های سرور اضافی جلوگیری می کند و بازخورد فوری را برای جستجوهای مکرر فراهم می کند:

class SearchCache {
    constructor(maxSize = 100) {
        this.cache = new Map();
        this.maxSize = maxSize;
    }

    set(query, results) {
        if (this.cache.size >= this.maxSize) {
            const firstKey = this.cache.keys().next().value;
            this.cache.delete(firstKey);
        }
        this.cache.set(query, {
            results,
            timestamp: Date.now()
        });
    }

    get(query) {
        const cached = this.cache.get(query);
        return cached && Date.now() - cached.timestamp < 300000 ? cached.results : null;
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بارگیری پیشرونده با نمایش سریع نتایج اولیه در هنگام واکشی داده های اضافی ، تجربه کاربر را افزایش می دهد. این رویکرد حتی با مجموعه های نتیجه بزرگ ، پاسخگویی را حفظ می کند:

async function loadSearchResults(query, page = 1) {
    const perPage = 20;
    const results = await fetchResults(query, page, perPage);

    const container = document.querySelector('#results');
    results.forEach(result => {
        const element = createResultElement(result);
        container.appendChild(element);
    });

    if (results.length === perPage) {
        const observer = new IntersectionObserver((entries) => {
            if (entries[0].isIntersecting) {
                loadSearchResults(query, page + 1);
            }
        });
        observer.observe(container.lastElementChild);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تطبیق فازی به کاربران کمک می کند تا علی رغم تایپ های جزئی یا تغییرات املایی ، نتایج پیدا کنند. این پیاده سازی از الگوریتم فاصله Levenshtein استفاده می کند:

function calculateLevenshteinDistance(str1, str2) {
    const matrix = Array(str2.length + 1).fill().map(() => 
        Array(str1.length + 1).fill(0)
    );

    for (let i = 0; i <= str1.length; i++) {
        matrix[0][i] = i;
    }
    for (let j = 0; j <= str2.length; j++) {
        matrix[j][0] = j;
    }

    for (let j = 1; j <= str2.length; j++) {
        for (let i = 1; i <= str1.length; i++) {
            const substitutionCost = str1[i - 1] === str2[j - 1] ? 0 : 1;
            matrix[j][i] = Math.min(
                matrix[j][i - 1] + 1,
                matrix[j - 1][i] + 1,
                matrix[j - 1][i - 1] + substitutionCost
            );
        }
    }
    return matrix[str2.length][str1.length];
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

عملکرد تاریخچه جستجو نمایش داده های کاربر را به یاد می آورد و دسترسی سریع به جستجوهای قبلی را فراهم می کند:

class SearchHistory {
    constructor(maxItems = 10) {
        this.maxItems = maxItems;
        this.storageKey = 'searchHistory';
    }

    add(query) {
        let history = this.get();
        history = history.filter(item => item !== query);
        history.unshift(query);

        if (history.length > this.maxItems) {
            history.pop();
        }

        localStorage.setItem(this.storageKey, JSON.stringify(history));
    }

    get() {
        const stored = localStorage.getItem(this.storageKey);
        return stored ? JSON.parse(stored) : [];
    }

    clear() {
        localStorage.removeItem(this.storageKey);
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

فهمیدم که ترکیب این تکنیک ها رابط های جستجوی قدرتمندی ایجاد می کند. در اینجا مثالی وجود دارد که هر شش رویکرد را ادغام می کند:

class SearchInterface {
    constructor() {
        this.cache = new SearchCache();
        this.history = new SearchHistory();
        this.setupEventListeners();
    }

    setupEventListeners() {
        const searchInput = document.querySelector('#search');
        searchInput.addEventListener('input', debounce((e) => {
            this.handleSearch(e.target.value);
        }, 300));
    }

    async handleSearch(rawQuery) {
        const query = this.optimizeQuery(rawQuery);

        if (!query) return;

        const cached = this.cache.get(query);
        if (cached) {
            this.displayResults(cached);
            return;
        }

        const results = await this.fetchResults(query);
        this.cache.set(query, results);
        this.history.add(query);
        this.displayResults(results);
    }

    optimizeQuery(query) {
        return query
            .trim()
            .toLowerCase()
            .replace(/[^\w\s]/g, '')
            .replace(/\s+/g, ' ');
    }

    displayResults(results) {
        const container = document.querySelector('#results');
        container.innerHTML = '';

        results.forEach((result, index) => {
            if (index < 20) {
                container.appendChild(this.createResultElement(result));
            }
        });

        if (results.length > 20) {
            this.setupInfiniteScroll(results.slice(20));
        }
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

هنگام اجرای این تکنیک ها ، الزامات خاص برنامه خود را در نظر بگیرید. به عنوان مثال ، سایت های تجارت الکترونیکی ممکن است تطبیق و حافظه پنهان فازی را در اولویت قرار دهند ، در حالی که سیستم های جستجوی اسناد ممکن است بر بهینه سازی پرس و جو و بارگذاری مترقی متمرکز شوند.

این روشها به طور قابل توجهی عملکرد جستجو را بهبود می بخشند و باعث ایجاد رابط های پاسخگو و کاربر پسند می شوند. ترکیبی از بهینه سازی سمت مشتری و راندمان سمت سرور ، عملکرد بهینه را در موارد استفاده های مختلف و حجم داده ها تضمین می کند.

به یاد داشته باشید که بر اساس نیازهای خاص و الگوهای رفتاری کاربر ، زمان بندی ، اندازه حافظه نهان و بارگذاری را تنظیم کنید. نظارت منظم و تنظیم این پارامترها با رشد برنامه شما به حفظ عملکرد بهینه کمک می کند.


101 کتاب

101 کتاب یک شرکت انتشارات AI محور است که توسط نویسنده تأسیس شده است آراو جوشیبشر با استفاده از فناوری پیشرفته هوش مصنوعی ، ما هزینه های انتشار خود را فوق العاده کم نگه می داریم – برخی از کتاب ها به اندازه کم قیمت هستند 4 دلار– ایجاد دانش با کیفیت در دسترس همه.

کتاب ما را بررسی کنید کد تمیز Golang در آمازون موجود است.

برای به روزرسانی ها و اخبار هیجان انگیز با ما در ارتباط باشید. هنگام خرید کتاب ، جستجو کنید آراو جوشی برای یافتن بیشتر عناوین ما. برای لذت بردن از لینک ارائه شده استفاده کنید تخفیف های خاص!

خلاقیت های ما

حتما خلاقیت های ما را بررسی کنید:

سرمایه گذار مرکزی | سرمایه گذار اسپانیایی مرکزی | سرمایه گذار آلمانی مرکزی | زندگی هوشمند | دوره ها و پژواک | اسرار گیج کننده | هندوتوا | نخبه | مدارس JS


ما در متوسط ​​هستیم

بینش های فنی Koala | Epochs & Echoes World | سرمایه گذار رسانه مرکزی | رمز و رازهای گیج کننده متوسط | علوم و دوره های متوسط | هندوتوا مدرن

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا