brief: | i18n.site දැන් serverless full-text search සඳහා සහය දක්වයි.
IndexedDB විසින් ගොඩනගා ඇති ප්රතිලෝම දර්ශකය, උපසර්ග සෙවීම, වචන ඛණ්ඩනය ප්රශස්තකරණය සහ බහු-භාෂා සහාය ඇතුළුව පිරිසිදු ඉදිරිපස සම්පූර්ණ පෙළ සෙවුම් තාක්ෂණය ක්රියාත්මක කිරීම මෙම ලිපියෙන් හඳුන්වා දෙයි.
පවතින විසඳුම් සමඟ සසඳන විට, i18n.site හි පිරිසිදු ඉදිරිපස සම්පූර්ණ පෙළ සෙවීම ප්රමාණයෙන් කුඩා සහ වේගවත්, ලේඛන සහ බ්ලොග් වැනි කුඩා සහ මධ්යම ප්රමාණයේ වෙබ් අඩවි සඳහා සුදුසු වන අතර නොබැඳිව ලබා ගත හැකිය.
සති කිහිපයක & පසු markdown i18n.site
මෙම ලිපිය i18n.site
pure front-end full-text search හි තාක්ෂණික ක්රියාත්මක කිරීම බෙදාහදා ගනීවි i18n.site
ලේඛන/පුද්ගලික බ්ලොග් වැනි කුඩා සහ මධ්යම ප්රමාණයේ තනිකරම ස්ථිතික වෙබ් අඩවි සඳහා, ස්වයං-සාදන ලද සම්පූර්ණ-පෙළ සෙවුම් පසුබිමක් ගොඩ නැගීම බර වැඩියි, සහ සේවා-නිදහස් සම්පූර්ණ-පෙළ සෙවීම වඩාත් පොදු තේරීම වේ.
සර්වර් රහිත සම්පූර්ණ පෙළ සෙවුම් විසඳුම් පුළුල් කාණ්ඩ දෙකකට වැටේ:
පළමුව, algolia.com තුන්වන පාර්ශ්ව සෙවුම් සේවා සපයන්නන් සම්පූර්ණ පෙළ සෙවීම සඳහා ඉදිරිපස කොටස් සපයයි.
එවැනි සේවාවන්ට සෙවුම් පරිමාව මත පදනම්ව ගෙවීමක් අවශ්ය වන අතර, වෙබ් අඩවියට අනුකූල වීම වැනි ගැටළු හේතුවෙන් චීනයේ ප්රධාන භූමියේ සිටින පරිශීලකයින්ට ඒවා බොහෝ විට ලබා ගත නොහැක.
එය නොබැඳි ලෙස භාවිතා කළ නොහැක, අන්තර් ජාලයේ භාවිතා කළ නොහැක, සහ විශාල සීමාවන් ඇත. මෙම ලිපිය බොහෝ දේ සාකච්ඡා නොකරයි.
දෙවැන්න නම් pure front-end full-text search වේ.
වර්තමානයේ, පොදු පිරිසිදු ඉදිරිපස සම්පූර්ණ-පෙළ සෙවුම් lunrjs සහ ElasticLunr.js ( lunrjs
ද්විතියික සංවර්ධනය මත පදනම්ව) ඇතුළත් වේ.
lunrjs
දර්ශක ගොඩනැගීමට ක්රම දෙකක් ඇති අතර, දෙකටම තමන්ගේම ගැටළු ඇත.
පෙර-සාදන ලද දර්ශක ගොනු
දර්ශකයේ සියලුම ලේඛන වලින් වචන අඩංගු වන නිසා, එය ප්රමාණයෙන් විශාල වේ. ලේඛනයක් එකතු කරන විට හෝ වෙනස් කරන විට, නව දර්ශක ගොනුවක් පූරණය කළ යුතුය. එය පරිශීලකයාගේ පොරොත්තු කාලය වැඩි කරන අතර විශාල කලාප පළලක් පරිභෝජනය කරයි.
ලේඛන පූරණය කර පියාසර කරන විට දර්ශක සාදන්න
දර්ශකයක් ගොඩ නැගීම යනු ඔබ එයට ප්රවේශ වන සෑම අවස්ථාවකම එය නැවත ගොඩ නැගීම පැහැදිලි ප්රමාදයන් සහ දුර්වල පරිශීලක අත්දැකීමක් ඇති කරයි.
lunrjs
ට අමතරව, වෙනත් සම්පූර්ණ පෙළ සෙවුම් විසඳුම් ඇත, එවැනි :
fusejs , සෙවීමට නූල් අතර සමානකම් ගණනය කරන්න.
මෙම විසඳුමේ කාර්ය සාධනය අතිශයින් දුර්වල වන අතර සම්පූර්ණ පෙළ සෙවීම සඳහා භාවිතා කළ නොහැක (බලන්න Fuse.js දිගු විමසුමට තත්පර 10 කට වඩා වැඩි කාලයක් ගතවේ, එය ප්රශස්ත කරන්නේ කෙසේද? ).
TinySearch , සෙවීමට බ්ලූම් ෆිල්ටරය භාවිතා කරන්න, උපසර්ග සෙවීම සඳහා භාවිතා කළ නොහැක (උදාහරණයක් ලෙස, goo
, සෙවුම් good
, google
ඇතුළු කරන්න ) සහ සමාන ස්වයංක්රීය සම්පූර්ණ කිරීමේ බලපෑමක් ලබා ගත නොහැක.
පවතින විසඳුම්වල අඩුපාඩු නිසා, i18n.site
පහත ලක්ෂණ සහිත නව පිරිසිදු ඉදිරිපස සම්පූර්ණ පෙළ සෙවුම් විසඳුමක් නිපදවා ඇත :
gzip
ඇසුරුම් කිරීමෙන් පසු සෙවුම් කර්නලයේ ප්රමාණය 6.9KB
වේ (සංසන්දනය කිරීම සඳහා, lunrjs
හි ප්රමාණය 25KB
වේ)indexedb
මත පදනම්ව ප්රතිලෝම දර්ශකයක් සාදන්න.පහත, තාක්ෂණික ක්රියාත්මක කිරීමේ විස්තර i18n.site
විස්තරාත්මකව හඳුන්වා දෙනු ඇත.
Word segmentation බ්රවුසරයේ ස්වදේශීය වචන ඛණ්ඩනය Intl.Segmenter
භාවිතා කරයි, සහ සියලුම ප්රධාන ධාරාවේ බ්රව්සර් මෙම අතුරු මුහුණතට සහය දක්වයි.
segmentation coffeescript
කේතය යන වචනය පහත පරිදි වේ
SEG = new Intl.Segmenter 0, granularity: "word"
seg = (txt) =>
r = []
for {segment} from SEG.segment(txt)
for i from segment.split('.')
i = i.trim()
if i and !'| `'.includes(i) and !/\p{P}/u.test(i)
r.push i
r
export default seg
export segqy = (q) =>
seg q.toLocaleLowerCase()
තුළ:
/\p{P}/
යනු විරාම ලකුණු වලට ගැලපෙන නිත්ය ප්රකාශනයකි: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _
{ | } . .</p><ul><li>
split('.')යනු
Firefoxබ්රවුසර වචන ඛණ්ඩනය
. ` ඛණ්ඩය නොවන බැවිනි.
වස්තු ගබඩා වගු 5 ක් IndexedDB
හි නිර්මාණය කරන ලදී :
word
: id -doc
: id - ලේඛනය url - ලේඛන අනුවාද අංකයdocWord
: ලේඛන මාලාව id - වචනය idprefix
: - අරාව idrindex
: Word id - Document id : පේළි අංක මාලාවලේඛන url
සහ අනුවාද අංක ver
අරාව තුළට ගොස්, ලේඛනය doc
වගුවේ තිබේදැයි සොයන්න. එය නොපවතියි නම්, ප්රතිලෝම දර්ශකයක් සාදන්න. ඒ සමගම, සම්මත නොකළ ලේඛන සඳහා ප්රතිලෝම දර්ශකය ඉවත් කරන්න.
මේ ආකාරයෙන්, වර්ධක සුචිගත කිරීම ලබා ගත හැකි අතර ගණනය කිරීමේ ප්රමාණය අඩු වේ.
ඉදිරිපස-අන්ත අන්තර්ක්රියා / , පළමු වරට පූරණය වන විට ප්රමාදය වළක්වා ගැනීමට දර්ශකයේ පූරණ ප්රගති තීරුව පෙන්විය හැක " තනි එකක් මත පදනම් වූ සජීවිකරණ තීරුව progress + පිරිසිදු css ක්රියාත්මක කිරීම" බලන්න.
IndexedDB හි අසමමුහුර්ත සංග්රහය මත පදනම්ව ව්යාපෘතිය idb ඇත.
IndexedDB කියවීම සහ ලිවීම අසමමිතික වේ. දර්ශකයක් නිර්මාණය කිරීමේදී, දර්ශකය සෑදීම සඳහා ලේඛන සමගාමීව පටවනු ලැබේ.
තරඟකාරී ලිවීම නිසා ඇති වන අර්ධ දත්ත අහිමි වීම වළක්වා ගැනීම සඳහා, ඔබට පහත coffeescript
කේතය වෙත යොමු විය හැකි අතර තරඟකාරී ලිවීම් වලට බාධා කිරීමට කියවීම සහ ලිවීම අතර ing
හැඹිලියක් එක් කළ හැක.
pusher = =>
ing = new Map()
(table, id, val)=>
id_set = ing.get(id)
if id_set
id_set.add val
return
id_set = new Set([val])
ing.set id, id_set
pre = await table.get(id)
li = pre?.li or []
loop
to_add = [...id_set]
li.push(...to_add)
await table.put({id,li})
for i from to_add
id_set.delete i
if not id_set.size
ing.delete id
break
return
rindexPush = pusher()
prefixPush = pusher()
සෙවුම පළමුව පරිශීලකයා විසින් ඇතුළත් කරන ලද මූල පද කොටස් කරයි.
ප්රතිඵලය ලබා දීමේදී වචන N
ඇති බව උපකල්පනය කරන්න, එවිට ප්රතිඵල N-1
, N-2
,..., 1
අඩංගු ප්රතිඵල ලබා දෙනු ඇත.
ප්රථමයෙන් දර්ශනය වන සෙවුම් ප්රතිඵල විමසුමේ නිරවද්යතාවය සහතික කරන අතර පසුව පූරණය කරන ලද ප්රතිඵල (load more බොත්තම ක්ලික් කරන්න) නැවත කැඳවීමේ අනුපාතය සහතික කරයි.
ප්රතිචාර වේගය වැඩි දියුණු කිරීම සඳහා, ඉල්ලුම මත පැටවීම ක්රියාත්මක කිරීමට සෙවීම yield
උත්පාදක යන්ත්රය භාවිතා කරන අතර ප්රතිඵලයක් විමසන limit
අවස්ථාවකම ආපසු ලබා දේ.
ඔබ yield
පසුව නැවත සොයන සෑම අවස්ථාවකම IndexedDB
ක විමසුම් ගනුදෙනුවක් නැවත විවෘත කිරීමට අවශ්ය බව සලකන්න.
පරිශීලකයා ටයිප් කරන අතරතුර සෙවුම් ප්රතිඵල පෙන්වීම සඳහා, උදාහරණයක් ලෙස, wor
ඇතුළත් කළ විට, words
සහ work
වැනි wor
සමඟ උපසර්ග සහිත වචන පෙන්වනු ලැබේ.
සෙවුම් කර්නලය එය සමඟ උපසර්ග කර ඇති සියලුම වචන සොයා ගැනීමට සහ අනුපිළිවෙලින් සෙවීමට වචන ඛණ්ඩයෙන් පසු අවසාන වචනය සඳහා prefix
වගුව භාවිතා කරයි.
පරිශීලක ආදාන ප්රේරක සෙවීම්වල සංඛ්යාතය අඩු කිරීමට සහ ගණනය කිරීමේ ප්රමාණය අඩු කිරීමට පෙර-අන්ත අන්තර්ක්රියාවේදී (පහත සඳහන් පරිදි ක්රියාත්මක කර ඇත) ප්රති-ෂේක් ශ්රිතය debounce
ද භාවිතා වේ.
export default (wait, func) => {
var timeout;
return function(...args) {
clearTimeout(timeout);
timeout = setTimeout(func.bind(this, ...args), wait);
};
}
දර්ශක වගුව මුල් පිටපත ගබඩා නොකරයි, වචන පමණක්, ගබඩා කිරීමේ ප්රමාණය අඩු කරයි.
සෙවුම් ප්රතිඵල උද්දීපනය කිරීම සඳහා මුල් පෙළ නැවත පූරණය කිරීම අවශ්ය වන අතර, service worker
ගැලපීම නැවත නැවත ජාල ඉල්ලීම් වළක්වා ගත හැක.
ඒ අතරම, service worker
සියලුම ලිපි හැඹිලි කරන බැවින්, පරිශීලකයා සෙවුමක් කළ පසු, සෙවුම ඇතුළුව මුළු වෙබ් අඩවියම නොබැඳිව පවතී.
i18n.site
හි පිරිසිදු ඉදිරිපස සෙවුම් විසඳුම ලේඛන MarkDown
සඳහා ප්රශස්ත කර ඇත.
සෙවුම් ප්රතිඵල පෙන්වන විට, පරිච්ඡේදයේ නම දර්ශනය වන අතර ක්ලික් කළ විට පරිච්ඡේදය සංචාලනය වේ.
ප්රතිලෝම සම්පූර්ණ පෙළ සෙවීම සම්පූර්ණයෙන්ම ඉදිරිපස අන්තයේ ක්රියාත්මක වේ, සේවාදායකයක් අවශ්ය නොවේ. ලේඛන සහ පුද්ගලික බ්ලොග් වැනි කුඩා හා මධ්යම ප්රමාණයේ වෙබ් අඩවි සඳහා එය ඉතා සුදුසුය.
i18n.site
විවෘත මූලාශ්ර ස්වයං-සංවර්ධිත pure front-end search, කුඩා ප්රමාණයෙන් සහ වේගවත් ප්රතිචාරයක්, දැනට පවතින pure front-end full-text search හි අඩුපාඩු නිරාකරණය කර වඩා හොඳ පරිශීලක අත්දැකීමක් සපයයි.