PDA

View Full Version : سرچ با سرعت خوب روی dropdownlist با تعداد 30 هزار رکورد



resident
چهارشنبه 17 آبان 1396, 22:30 عصر
سلام.
بهترین روش برای پر کردن dropdown با تعداد رکورد بالا مثلا 30.000 رکورد چی هست؟ میخوام روی dropdown بشه سرچ کرد. هم روی بروزر pc هم روی بروزر موبایل.

الان از chosen jquery استفاده می کنم. مشکلش روی تعداد رکورد بالا روی سرچ هست که کنده.

کسی پیشنهادی داره؟

Moien Tajik
پنج شنبه 18 آبان 1396, 13:37 عصر
میتونید از select2 (https://select2.org/getting-started/installation) استفاده کنید سرعت قابل قبولی داره.
اما مسئله اینکه آیا لود کردن 30000 تا رکورد و دریافت اون ها از دیتابیس و پر کردن Dropdown با اینهمه رکورد کار درستیه و حتما نیاز هست که برنامتون به این شکل باشه ؟

بیشتر مشکل سرعت برای همچین چیزی برای پر کردن اطلاعات در ابتدا هست ; با یه تست ساده میتونید مطمئن بشید :



<!DOCTYPE html>
<html lang="en">


<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.4/css/select2.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.4/js/select2.min.js"></script>
</head>


<body>
<select id="select"></select>


<script>
for (var i = 0; i <= 30000; i++) {
$('#select').append($('<option>', {
text: 'Option ' + i
}));
}

$(function () {
$("#select").select2();
});
</script>
</body>


</html>



بنظرم راه های بهتری رو میتونید امتحان کنید مثل اینکه Dropdown رو در ابتدا مثلا با 50 رکورد پر کنید و با سرچ کردن کاربر ( keydown ) ، به سمت سرور بصورت ajax ای request بزنید و نتیجش رو دریافت کنید و Dropdown رو باهاش پر کنید.

resident
پنج شنبه 18 آبان 1396, 17:51 عصر
بنظرم راه های بهتری رو میتونید امتحان کنید مثل اینکه Dropdown رو در ابتدا مثلا با 50 رکورد پر کنید و با سرچ کردن کاربر ( keydown ) ، به سمت سرور بصورت ajax ای request بزنید و نتیجش رو دریافت کنید و Dropdown رو باهاش پر کنید.

به نظر شما این روش که با تایپ کاربر بره ajax ای بخونه، چقدر ممکنه تفاوت داشته باشه به لحاظ سرعت؟ اینطوری تعداد request ها به دیتابیس زیاد نمیشه؟ مشکل ساز نمیشه؟

ali_md110
پنج شنبه 18 آبان 1396, 18:34 عصر
کندو از Paging و virtualization توی اکثر کنترلهاش استفاده میکنه
شاید بتونه کمکتون بکنه
http://demos.telerik.com/kendo-ui/dropdownlist/virtualization

resident
پنج شنبه 18 آبان 1396, 19:36 عصر
آیا select2 قابلیت سرچ روی موبایل هم داره؟
من روی موبایل چک کردم، به صورت تصویر زیر نمایش داده میشه و نمیشه روش سرچ کرد.

خونده بودم قابلیت سرچ روی موبایل رو داره. پس چرا اینطوریه؟

147015

Moien Tajik
پنج شنبه 18 آبان 1396, 20:59 عصر
آیا select2 قابلیت سرچ روی موبایل هم داره؟
ورژن 3.5 به بالا بله داره اما ورژن 4 هنوز Mobile Support نداره.

resident
جمعه 19 آبان 1396, 22:41 عصر
ورژن 3.5 به بالا بله داره اما ورژن 4 هنوز Mobile Support نداره.

من با ورژن 3.5.4 و 4.0.3 تست کردم، موبایل رو ساپورت نمی کنن. نمیدونم من باید کاری انجام بدم یا نه.

من فقط select2.js و select2.css رو به به برنامه اضافه کردم.
رفرنس هاشم به برنامم اضافه کردم.


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

debugger
سه شنبه 23 آبان 1396, 10:13 صبح
البته 30 هزار تا رکورد برای sql server چیزی نیست ولی مشکل زمانی پیش میاد که صد نفر همزمان این کارو انجام بدن . جستجو را به شکل ajax بنویسید و حتما از stored procedure استفاده کنید و بحث index گذاری روی جدول هم به درستی انجام بشه . من جای شما بودن جستجو های تکراری را cache می کردم .

resident
سه شنبه 23 آبان 1396, 16:34 عصر
البته 30 هزار تا رکورد برای sql server چیزی نیست ولی مشکل زمانی پیش میاد که صد نفر همزمان این کارو انجام بدن . جستجو را به شکل ajax بنویسید و حتما از stored procedure استفاده کنید و بحث index گذاری روی جدول هم به درستی انجام بشه . من جای شما بودن جستجو های تکراری را cache می کردم .

ممنون از شما. به نظرتون ajax ای سرچ کردن هم با تاخیر انجام نمیشه؟

چطوری جستجوهای تکراری رو کش کنم؟

resident
پنج شنبه 25 آبان 1396, 16:40 عصر
البته 30 هزار تا رکورد برای sql server چیزی نیست ولی مشکل زمانی پیش میاد که صد نفر همزمان این کارو انجام بدن . جستجو را به شکل ajax بنویسید و حتما از stored procedure استفاده کنید و بحث index گذاری روی جدول هم به درستی انجام بشه . من جای شما بودن جستجو های تکراری را cache می کردم .

زمان اجرای کوئری روی SQL ، صفر ثانیه است.

وقتی روی dropdown کلیک می کنم، چهار ثانیه می کشه که لیست رو باز کنه.

به نظر من مشکل از SQL نیست. چون اطلاعات میاد روی browser قرار می گیره و به احتمال زیاد وقتی میخواد سرچ کنه از اطلاعات روی browser سرچ می کنه.

من فکر می کنم مشکل جای دیگه است.