Veb-xizmatga katta mag'lubiyatni joylashtirish bo'yicha takliflar

Quyida mening qator:

var.child.Cars1 = { name:null,operation:0,selected : false} 

Now in above array,selected property represent check/uncheck status of checkbox and i am posting above array to web service(WCF) as string using json.stringify.

Yuqoridagi qator 2000 - 4000 yozuvlarni o'z ichiga oladi va hozir foydalanuvchi tasdiqlash/bekor qilish qutilarini belgilashingiz mumkin.

Endi yuqorida ko'rsatilgan ro'yxatda 4000 ta yozuv mavjud, unda 2000 ta yozuvlar tekshiriladi va 2000 ta yozuvlar bekor qilinmaydi va veb-xizmatimda faqat tekshirilayotgan yozuvlarni qayta ishlayapman. Tanlangan qiymati yozilgan yozuvlarni noto'g'ri deb olib qo'yaman.

Endi 4000ga qadar katta jsonli yozuvni yozib qo'ydim va shuning uchun veb-servis xizmatining oxirigacha xato qilaman:

  Error :  (413) Request Entity Too Large

Endi nima sababdan men tanlangan yozuvlarni filtrlash emasligim sababi, u mijozlar brauzerida ko'p miqdorda qo'shimcha xarajatlar kelib chiqishi va hatto brauzerni osib qo'yishi mumkin, chunki men uni server tomonida qilyapman.

Mening savolim shuki, men mijozlar tarafidan tanlangan fayllarni tanlagan holda filtrlashim kerak, keyin 2000 yozuvlarini faqatgina yozib qo'yaman yoki nima qilayotganimni to'g'ri yo'l.

Mening fikrimcha, bunday katta jsonli postni joylashtirish yana bir necha marotaba o'tkaziladi va tanlangan fayllar bilan tanlangan yozuvlarni filtrlash ham brauzerda ko'p miqdorda qo'shimcha xarajatlar keltiradi.

Shuning uchun men noto'g'ri yoki to'g'ri ishlayotganimga amin emasman.

Kimdir meni bu uchun iltimos qila oladimi?

7
@Evk: Agar u mijoz brauzerini yopib qo'ymasligini hisoblasam, unda bu kabi filtriga juda ko'p vaqt kerak bo'ladi. Agar yozuvlar 7000-8000 kabi bo'lsa, unda siz buni mijoz tarafidan afzal ko'rasiz?
qo'shib qo'ydi muallif Learning-Overthinker-Confused, manba
@pedrofb: hajmini qanday kamaytirish mumkin?
qo'shib qo'ydi muallif Learning-Overthinker-Confused, manba
@Evk: 2000 dan 7000 gacha bo'lgan ma'lumotlar tekshirilganda va 2000 dan 3000 tagacha yozuvlar 1 va 3000 - 7000 tagacha operatsiya xususiyati mavjud bo'lsa, nima qilish kerakligi 0
qo'shib qo'ydi muallif Learning-Overthinker-Confused, manba
@Evk: Foydalanuvchini 8000 ta maqola ro'yxati bilan taqdim etmoqdaman va filtr kabi funksiyalarni taqdim etdim va foydalanuvchining barcha elementlarni tanlayotgan/tanlab olishi mumkin bo'lgan barcha parametrlarni belgilash/bekor qilishni tanladim. U bilan filtri foydalanuvchi 8000 elementlardan elementlarni filtrlashi mumkin. keyin tugma yordamida tugmachalar?
qo'shib qo'ydi muallif Learning-Overthinker-Confused, manba
Men izoh berganimdek, faqat aniq bo'lmagan ma'lumotlarni yuboring: identifikatorlari yoki nomlari bo'lgan qator va faqat o'zgarishlar uchun
qo'shib qo'ydi muallif pedrofb, manba
Shuningdek, siz bir necha ajax so'rovlarini 0-1000, 1001-2000, va hokazolarni guruhlashingiz va serverda ularni keshlashingiz mumkin. Sizning jsoningiz qancha davom etadi? 10-12mbgacha sizda muammolar bo'lmaydi
qo'shib qo'ydi muallif pedrofb, manba
@Eshitish, ID qo'shishingiz mumkin (yoki ismning xususiyatidan foydalaning) va faqat ID raqami sifatida [2000,2001,2002]. Bu hajmi sezilarli darajada kamayadi. Shu bilan bir qatorda, asl 64 qatorida base64 kodlashingiz va uni qattiq o'lchamli qismlarga yuborishingiz mumkin. Lekin bu sizning apiingizni yanada murakkablashtiradi. Men sizga imkon beradigan darajada kattalashtirishni tavsiya etaman
qo'shib qo'ydi muallif pedrofb, manba
Keyinchalik, serverni barcha elementlar ularni ro'yxatga olinmagan holda tekshirib turishini xabardor qiling. Server mahsulotlarning to'liq ro'yxatini qanday qilib olishni biladi.
qo'shib qo'ydi muallif Evk, manba
Xo'sh, men hech qachon serverga 8000 ta element bilan qatorni joylashtirmasdim (lekin bunday vaziyatni tasavvur qila olmadim). Siz aytgan narsalar tasdiqlash qutisi holatini bildirgansiz. Foydalanuvchiga bir vaqtning o'zida 8000 ta elementni qo'lda tekshirish yoki bekor qilish mumkin emas deb o'ylamayman. Ehtimol, Mosyga unga 8000 ta maqola qo'yilgan ro'yxatni taqdim etsangiz (hech bo'lmaganda sahifani ochishingiz kerak) va u ba'zi narsalarni o'zgartiradi. Shunday qilib, - faqat serverga o'zgartirilgan narsalarni yozing, hamma narsalar emas.
qo'shib qo'ydi muallif Evk, manba
Mijozga buni filtrlash brauzerni yoqtirmasligi kerak, deb o'ylayman, ehtimol javascriptda filtrlashda noto'g'ri (samarasiz) narsa qilyapsiz. Yaxshiyamki, ikkita imkoniyatdan (mijozga filtr qo'yish yoki serverda foydasiz ma'lumotlarni jo'natish va filtr qo'yish) men doim mijozga filtr qo'yaman. Xuddi shunday to'g'ridir.
qo'shib qo'ydi muallif Evk, manba
Siz, albatta, "iflos" bayroqni saqlashingiz kerak va faqat o'zgarmaydiganlarni yuborishingiz kerak .... Agar foydalanuvchi 4000ta tasdiqlov varaqasini ko'rsatish mantiqiy ish kabi ko'rinmasa, foydalanuvchi haqiqatan ham 4000 ta ma'lumotga e'tibor berish kerak darhol? Tadqiqotlar shuni ko'rsatadiki, biz 7 ga yaqin narsani boshqaramiz.
qo'shib qo'ydi muallif Milney, manba
Buning muqobilligi, AJAX-dan har bir tasdiq qutisi qiymatini o'zgartirganda yuborish uchun ishlatiladi. Shundan so'ng siz bir vaqtning o'zida bitta o'zgarishni yuborasiz, chunki foydalanuvchi taxminan 4000 checkbox ni biron bir vaqt ichida tekshira olmaydi ...
qo'shib qo'ydi muallif Milney, manba

8 javoblar

Umuman olganda, agar siz bunday keng hajmdagi so'rovlar hajmiga o'xshash muammoga duch kelsangiz, bu bekor kilish o'rniga optimallash usullarini ko'rib chiqish uchun yaxshi imkoniyatdir. Ko'pchilik muammoni chetlab o'tish yo'llarini ko'rsatishga urinib ko'rdi, lekin uni engib o'tmaydigan usullarni tushunish uchun emas, balki dizaynni yanada engil bo'lishga ko'maklashdi.

Bu erda ba'zi imkoniyatlar mavjud:

Sizning so'rovingizni (pdf) pagingni ko'rib chiqdingizmi? Bu sizga mos kelmasligi kerak bo'lgan ma'lumotni mijozga moslashtirishi, shuning uchun so'rovlarni juda uzoq vaqt talab qilmasligi, veb-saytning ta'sirchanligini oshirish va mijoz va server xotirasidagi har qanday yuklarni kamaytirishga imkon beradi. Siz ma'lumotni foydalanuvchini yozib olishda oldindan yuklay olasiz va agar kerak bo'lsa, jarayon juda uzoq vaqt davom etsa, foydalanuvchilarga o'yin-kulgi/mulohazalar berishingiz mumkin.

Sizning xususiyatlaringiz nomini o'zgartirish qisqartirilishini va kamroq tavsiflovchi xususiyatni o'zgartirishni ko'rib chiqdingizmi? Misol uchun:

Joriy modelingiz:

{ name:null,operation:0,selected : false}

Soddalashtirilgan model:

{n: null, u: 0, s: noto'g'ri}

Bu kabi yondashuv JSONni o'qishni qiyinlashtiradi, lekin JSON faqat odamlar tomonidan o'qilishini nazarda tutmaydi, u ma'lumotlarni ketma-ket qilishni anglatadi; Lekin, bu sizning modelingiz hujjat bilan engib o'tish mumkin. Shunday qilib, ma'lumotlarning 30 foizga kamaytirilishi mumkin.

Men yechimga to'liq yondashuvni taqdim qila olmayman, chunki siz o'zingiz erishmoqchi bo'lgan narsalar haqida juda ko'p savollar berib, ma'lumotni kim iste'mol qila oladi va u erga qanday etishning eng yaxshi yo'li.

Bundan tashqari, men bir jarayonning bir vaqtning o'zida bir vaqtning o'zida 2000+ yozuvlar bilan ishlashi kerakligini so'rashni qat'iy deb hisoblayman. Men tanqid qilmoqchi emasman, lekin muvaffaqiyatga erishmoqchi bo'lgan narsalar ortida biznes jarayonini tanqidiy ko'rib chiqishingiz kerakligini aytmoqchiman, chunki repetitivlik bilan jiddiy muammolar bo'lishi mumkin, foydalanuvchining stressi va boshqalar. ilovaning oxirgi foydalanuvchisi uchun foydali va foydalidir. Misol tariqasida, oxirgi foydalanuvchining 2 soat davomida 4000 tasdiqlash qutisida qaramasligi uchun, vazifani kichikroq, kam zerikarli bloklarga ajratishingiz mumkin bo'lgan yo'llar bormi?

Bu siz izlayotgan javob bo'lmasligi mumkin, chunki u ko'plab qo'shimcha savollar ochadi, lekin umid qilamanki, siz oxirgi javobni shakllantirishga yordam beradigan savollarni shakllantirishga yordam beradi.

3
qo'shib qo'ydi
Ha, albatta definitely i will.Thank you :)
qo'shib qo'ydi muallif Learning-Overthinker-Confused, manba
Menga yordam berishga qaratilgan sa'y-harakatlaringiz uchun yuqoriga ko'tarildi. Juda juda yaxshi tushuntirish. Men sizning tushuntirishingizni juda qadrlayman.Sizga juda minnatdormiz va shunga o'xshash yordamni davom eting :)
qo'shib qo'ydi muallif Learning-Overthinker-Confused, manba
Salomat bo'ling. Vaqti-vaqti bilan biz narsalarni tezda bajarish uchun bosim ostida qolmoqdamiz va bir narsalarni sinchiklab tekshirmaslik qiyin, lekin ba'zi hollarda, ayniqsa, bunday vaziyatlarda orqaga qaytish muhimdir. Yaxshi echimlarni qisqartirishga yordam berishda sizga yordam kerak bo'lsa, so'rang.
qo'shib qo'ydi muallif Inari, manba

UI ish zarrachasiga ta'sir qilmasangiz (brauzerni qulflang) mijozlar ma'lumotlarini filtrlash afzaldir. Ko'p ma'lumotni yuborish siz nima qilayotganingiz va oxirgi foydalanuvchining tarmoq tezligiga bog'liq muammolarga olib kelishi mumkin. Aytish kerakki, ba'zan siz katta ma'lumotni joylashtirishingiz kerak. Bu 4000 yozuvlarning qanchalik katta ekanligiga ishonchim komil emas, lekin faqat matn bo'lsa, u juda katta bo'lmaydi.

Sizning muammoingiz WCF saytining 413 ta javob bilan javob qaytarishdan iborat bo'lganligi bois, bu sizga maksimal hajmdagi muammolarni keltirib chiqarmoqda. Yozuvlarga asosan, WCF hujjatlari , sukut bo'yicha qabul qilinishi mumkin bo'lgan maksimal ruxsat etilgan xabar hajmi 65.536 baytni tashkil qiladi. Shubhasiz, bu siz jo'natmoqchi bo'lgan narsalardan past.

WCF xizmatida yangilanish kerak. Quyidagi misol 10MB uchun, ammo ma'lumotlaringiz uchun mantiqan barcha narsani oshiradi.


  
    
      <!-- Measured in Bytes -->
          <!-- 10 MB-->
        
      
    
    

Agar siz 404.13 HTTP statusi kodini olishni boshlasangiz, sizning web.config sizning maksimal o'lchamlaringizga ruxsat berish uchun yangilang, lekin sizning o'lchamingiz uchun sizning ilovangiz uchun eng mantiqiy darajani belgilab qo'ying.


    <!-- Add this section for file size... -->
    
      
        <!-- Measured in Bytes -->
          <!-- 1 GB-->
      
    



    <!-- Measured in kilobytes -->
       <!-- 1 GB-->

3
qo'shib qo'ydi
Men faqat mijozlar uchun ReaderQuotasni o'rnatishim kerak va wcf oxirida yoki boshqa konfiguratsiyalar ham bu ishni bajarish uchun bor?
qo'shib qo'ydi muallif Learning-Overthinker-Confused, manba
WCF va mijoz tomonida joylashgan o'quvchi sozlamalarini to'g'rilash kerakmi?
qo'shib qo'ydi muallif Learning-Overthinker-Confused, manba
Ha, bu to'g'ri.
qo'shib qo'ydi muallif Ashley Lee, manba

Tez yangilanish mazmunan ruxsat etilgan serverlarni ko'paytirishi mumkin. Bu taxminan nimaga o'xshash ko'rinadi.


    
       
    



    
       
           
       
    

3
qo'shib qo'ydi
Ushbu veb-serverni ag'darish uchun
qo'shib qo'ydi muallif Milney, manba

MaxRequestLength ni konfiguratsiya rejimida o'rnatishingiz mumkin. Bu sozlamalar men uchun 750 mb ni yuklash uchun ishlaydi.


    


    
        
            
        
    

maxRequestLength maksimal qiymati 2097151 bo'lsa, ko'proq xatolik yuz berdi. Va MSDN yozadi;

Standart hajmi 4096 KB (4 MB).

1
qo'shib qo'ydi
  1. Json qiymatini fayl sifatida saqlash
  2. json faylini yuklang (yagona fayl nomini olishda)
  3. Json qiymati o'rniga filename orqali WCF usulingizni chaqiring
  4. usuliga kiritilgan fayldan ma'lumotlarni o'qish
1
qo'shib qo'ydi

Siz serverda ulanish qanchalik sekinlashishi mumkinligini bilmasangiz, mijozni filtrlashingiz kerak. Kerak bo'lmagan ma'lumotlarni yuborish avval filtrlashdan ko'ra sekinroq bo'lishi kerak.

Agar ma'lumotni filtrlash brauzerga osilgan bo'lsa, u holda ushbu muammo atrofida WebWorker .

1
qo'shib qo'ydi

Mijoz tomonida filtrlash ulkan yuk hosil qilmasligi kerak va natijada paydo bo'lgan json mag'lubiyatga hajmini so'rov cheklovlari doirasida saqlab turish mumkin.

underscore.js dan foydalanib, faqat tanlangan/tasdiqlangan elementlarga faqatgina kerakli operatsiyalarni filtrlash uchun osondir:

var filteredCars = _.where(cars, {selected: true});
//an assumption that operation is a unique car id
var operations = _.map(filteredCars, function(car){ return {id: car.operation};});

Iltimos, shunga o'xshash qator qatori va ba'zi bir statistika bilan filtrlash uchun ushbu kengaytirilgan JSFiddle ga qarang.

Biroq, bitta UI ekranida 4k katakchalarni taqdim etishda shubha qilsam, har qanday foydalanuvchi do'stona bo'larmidi?

1
qo'shib qo'ydi

GET usulidan foydalanayotgan bo'lsangiz, u ishlamayapti, chunki "Get metod sanasi" maksimal belgi chegarasi 2.083 belgidir. shuning uchun iltimos, Json ob'ektidan foydalanib, veb-xizmatida post uslubini ishlatishingiz mumkin.

1
qo'shib qo'ydi
Json ob'ektini mag'lubiyatga o'tish
qo'shib qo'ydi muallif Learning-Overthinker-Confused, manba
Veb-xizmatga qo'ng'iroq qilish - bu Post-chaqiruv
qo'shib qo'ydi muallif Learning-Overthinker-Confused, manba
Shunday qilib, siz Json ob'ektini Not string ni o'nglaysizmi?
qo'shib qo'ydi muallif Nayan Dhamsaniya, manba
var arraylist = []; var jsonList = JSON.stringify (arraylist); var ma'lumotlar = {ro'yxat: jsonList}; siz shu kabi ma'lumotlarni post usulidan foydalanishingiz mumkin.
qo'shib qo'ydi muallif Nayan Dhamsaniya, manba
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb