brief: | ئێستا i18n.site پشتگیری لە گەڕانی تەواوی دەقی بێ سێرڤەر دەکات.
ئەم بابەتە جێبەجێکردنی تەکنەلۆژیای گەڕانی تەواوی دەقی پێشەوەی پاک دەناسێنێت، لەوانەش ئیندێکسی پێچەوانە کە لەلایەن IndexedDB دروستکراوە، گەڕانی پێشگرەکان، باشکردنی بەشی وشە و پشتگیری فرە زمان.
بە بەراورد لەگەڵ چارەسەرە هەبووەکان، گەڕانی پاکی پێشەوەی تەواوی دەقی i18n.site لە قەبارەدا بچووکە و خێرا و گونجاوە بۆ ماڵپەڕە بچووک و مامناوەندەکانی وەک بەڵگەنامە و بلۆگەکان، و لە ئۆفلاین بەردەستە.
دوای چەند هەفتەیەک لە پەرەپێدان، i18n.site (ئامرازێکی تەواو ئیستاتیکی markdown وەرگێڕانی فرە زمانی & بنیاتنانی ماڵپەڕ) ئێستا پشتگیری لە گەڕانی تەواو دەقی پێشەوە دەکات.
ئەم بابەتە جێبەجێکردنی تەکنیکی i18n.site
گەڕانی تەواوی دەقی پێشەوە هاوبەش دەکات بۆ ئەزموونکردنی کاریگەری گەڕان i18n.site
بۆ ماڵپەڕە بچووک و مامناوەندەکانی تەواو ئیستاتیک وەک بەڵگەنامە/بلۆگی کەسی، دروستکردنی پاشکۆی گەڕانی تەواوی دەقی خۆدروستکراو زۆر قورسە، و گەڕانی تەواو دەقی بێ خزمەتگوزاری هەڵبژاردەی باوترە.
چارەسەرەکانی گەڕانی دەقی تەواو بێ سێرڤەر دەکەونە دوو پۆلی فراوانەوە:
یەکەم، هاوشێوە algolia.com پێشکەشکارانی خزمەتگوزاری گەڕانی لایەنی سێیەم پێکهاتەکانی پێشەوە بۆ گەڕانی تەواو دەق دابین دەکەن.
ئەم جۆرە خزمەتگوزاریانە پێویستیان بە پارەدان هەیە بە پشتبەستن بە قەبارەی گەڕان، و زۆرجار بەهۆی کێشەکانی وەک پابەندبوون بە ماڵپەڕەکانەوە بۆ بەکارهێنەرانی چین بەردەست نین.
ناتوانرێت بە شێوەی ئۆفلاین بەکاربهێنرێت، ناتوانرێت لە ئینترانتدا بەکاربهێنرێت و سنووردارکردنی گەورەی هەیە. ئەم بابەتە باسی زۆر ناکات.
دووەمیان گەڕانی تەواوی دەقی پێشەوەی پاکە.
لە ئێستادا، گەڕانە باوەکانی پێشەوەی پاکی تەواو دەقی بریتین لە lunrjs و ElasticLunr.js (بە پشتبەستن بە lunrjs
گەشەپێدانی لاوەکی).
lunrjs
دوو ڕێگا هەیە بۆ دروستکردنی ئیندێکس و هەردووکیان کێشەی خۆیان هەیە.
فایلە ئیندێکسییەکانی پێش دروستکراو
لەبەر ئەوەی ئیندێکسەکە وشەکانی هەموو بەڵگەنامەکان لەخۆدەگرێت، قەبارەکەی گەورەیە. هەرکاتێک بەڵگەنامەیەک زیاد کرا یان دەستکاری کرا، دەبێت فایلێکی نوێی ئیندێکس بار بکرێت. کاتەکانی چاوەڕوانی بەکارهێنەر زیاد دەکات و باند ویتێکی زۆر بەکاردەهێنێت.
بەڵگەنامەکان بار بکە و ئیندێکسەکان لەسەر فڕین دروست بکە
دروستکردنی ئیندێکس ئەرکێکی چڕ و پڕە لە ڕووی حیساباتیەوە دووبارە دروستکردنەوەی ئیندێکسەکە هەر جارێک کە دەستت پێی دەگات دەبێتە هۆی دواکەوتنی ئاشکرا و ئەزموونی خراپی بەکارهێنەر.
جگە لە lunrjs
، هەندێک چارەسەری تری گەڕانی تەواو دەق هەیە، وەک :
fusejs ، لێکچوونی نێوان ڕیزەکان بۆ گەڕان حیساب بکە.
کارایی ئەم چارەسەرە زۆر خراپە و ناتوانرێت بۆ گەڕانی تەواوی دەق بەکاربهێنرێت (بڕوانە Fuse.js پرسیاری درێژ زیاتر لە 10 چرکەی دەوێت، چۆن باشتر بکرێت؟ ).
TinySearch goo
good
google
بەهۆی کەموکوڕی چارەسەرەکانی ئێستا، i18n.site
چارەسەرێکی نوێی پاکی پێشەوەی گەڕانی تەواو دەقی پەرەپێدا، کە ئەم تایبەتمەندیانەی خوارەوەی هەیە :
gzip
6.9KB
(بۆ بەراوردکردن، قەبارەی lunrjs
25KB
) .indexedb
، کە بیرگەی کەمتر دەگرێت و خێرا دەبێت.لە خوارەوە i18n.site
وردەکاری جێبەجێکردنی تەکنیکی بە وردی دەناسێنرێت.
بەشکردنی وشە بەشکردنی وشەی سروشتی وێبگەڕەکە بەکاردەهێنێت Intl.Segmenter
، و هەموو وێبگەڕە سەرەکییەکان پشتگیری ئەم ڕووکارە دەکەن.
کۆدی وشەی بەشی 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 style=";text-align:right;direction:rtl"><li style=";text-align:right;direction:rtl">
split('.')لەبەر ئەوەیە کە
Firefoxبەشکردنی وشەی وێبگەڕ بەشی
. ` ناکات.
5 خشتەی هەڵگرتنی شتەکان لە IndexedDB
:
word
وشە : id -doc
: id - بەڵگەنامە url - ژمارەی وەشانی بەڵگەنامەdocWord
: ڕیزبەندی بەڵگەنامە id - وشە idprefix
: ڕیزبەندی پێشگر - وشەی idrindex
: وۆرد id - بەڵگەنامە id : ڕیزبەندی ژمارە دێڕەکانلە ڕیزبەندی بەڵگەنامەی url
و وەشانی ژمارە ver
تێپەڕێنە، و بگەڕێ کە ئایا بەڵگەنامەکە لە خشتەی doc
بوونی هەیە یان نا. ئەگەر بوونی نەبوو، ئیندێکسێکی پێچەوانە دروست بکە. لە هەمان کاتدا، ئیندێکسی پێچەوانە بۆ ئەو بەڵگەنامانە لاببە کە تێنەپەڕێنراون.
بەم شێوەیە دەتوانرێت ئیندێکسکردنی زیادە بەدەست بهێنرێت و بڕی حیسابکردنەکە کەم دەکرێتەوە.
لە کارلێکی پێشەوەدا، دەتوانرێت پەتی پێشکەوتنی بارکردن لە ئیندێکسەکەدا پیشان بدرێت بۆ ئەوەی بۆ یەکەمجار لە کاتی بارکردندا دواکەوتوو نەبێت سەیری "پەڕەی پێشکەوتن لەگەڵ ئەنیمەیشن، لەسەر بنەمای / progress + css جێبەجێکردنی پاک" بکە .
idb لەسەر بنەمای کەپسولکردنی ناهاوسەنگی IndexedDB
خوێندنەوە و نووسینەکانی 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
وشەی سەرەکییان تێدایە دەگەڕێندرێنەوە.
ئەنجامەکانی گەڕان کە پیشان دەدرێن سەرەتا وردی پرسیارەکە دڵنیا دەکەنەوە، و ئەنجامەکانی دواتر بارکراو (کلیک لە دوگمەی بارکردنی زیاتر بکە) ڕێژەی بانگهێشتکردنەوە دڵنیا دەکەنەوە.
بۆ ئەوەی خێرایی وەڵامدانەوە باشتر بکرێت، گەڕانەکە مۆلیدەی yield
بەکاردەهێنێت بۆ جێبەجێکردنی بارکردنی لەسەر داواکاری، و limit
جارێک کە پرسیار لە ئەنجامێک دەکرێت دەگەڕێتەوە.
تێبینی بکە کە هەر جارێک کە دوای yield
دەگەڕێیتەوە، پێویستە مامەڵەیەکی پرسیار بکەیتەوە کە IndexedDB
بێت.
بۆ ئەوەی لە کاتی نووسینی بەکارهێنەردا ئەنجامی گەڕان پیشان بدرێت، بۆ نموونە کاتێک wor
دەخرێتە ژوورەوە، وشەکانی پێشگر بە wor
وەک words
و work
پیشان دەدرێن.
ناوکی گەڕان خشتەی 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
گەڕانی پێشەوەی پاکی سەرچاوە کراوە کە خۆ پەرەی پێداوە، قەبارەی بچووک و وەڵامدانەوەی خێرا، کەموکوڕییەکانی گەڕانی پێشەوەی پاکی ئێستای تەواو دەقی چارەسەر دەکات و ئەزموونێکی باشتری بەکارهێنەر دابین دەکات.