brief: | ئێستا i18n.site پشتگیری لە گەڕانی تەواوی دەقی بێ سێرڤەر دەکات.

ئەم بابەتە جێبەجێکردنی تەکنەلۆژیای گەڕانی تەواوی دەقی پێشەوەی پاک دەناسێنێت، لەوانەش ئیندێکسی پێچەوانە کە لەلایەن IndexedDB دروستکراوە، گەڕانی پێشگرەکان، باشکردنی بەشی وشە و پشتگیری فرە زمان.

بە بەراورد لەگەڵ چارەسەرە هەبووەکان، گەڕانی پاکی پێشەوەی تەواوی دەقی i18n.site لە قەبارەدا بچووکە و خێرا و گونجاوە بۆ ماڵپەڕە بچووک و مامناوەندەکانی وەک بەڵگەنامە و بلۆگەکان، و لە ئۆفلاین بەردەستە.


گەڕانی تەواوی دەقی پێچەوانەکراوی پێشەوەی پاک

زنجیرە

دوای چەند هەفتەیەک لە پەرەپێدان، i18n.site (ئامرازێکی تەواو ئیستاتیکی markdown وەرگێڕانی فرە زمانی & بنیاتنانی ماڵپەڕ) ئێستا پشتگیری لە گەڕانی تەواو دەقی پێشەوە دەکات.

ئەم بابەتە جێبەجێکردنی تەکنیکی i18n.site گەڕانی تەواوی دەقی پێشەوە هاوبەش دەکات بۆ ئەزموونکردنی کاریگەری گەڕان i18n.site

کۆد سەرچاوە / :

پێداچوونەوەیەک بە چارەسەرەکانی گەڕانی تەواو دەقی بێ سێرڤەر

بۆ ماڵپەڕە بچووک و مامناوەندەکانی تەواو ئیستاتیک وەک بەڵگەنامە/بلۆگی کەسی، دروستکردنی پاشکۆی گەڕانی تەواوی دەقی خۆدروستکراو زۆر قورسە، و گەڕانی تەواو دەقی بێ خزمەتگوزاری هەڵبژاردەی باوترە.

چارەسەرەکانی گەڕانی دەقی تەواو بێ سێرڤەر دەکەونە دوو پۆلی فراوانەوە:

یەکەم، هاوشێوە algolia.com پێشکەشکارانی خزمەتگوزاری گەڕانی لایەنی سێیەم پێکهاتەکانی پێشەوە بۆ گەڕانی تەواو دەق دابین دەکەن.

ئەم جۆرە خزمەتگوزاریانە پێویستیان بە پارەدان هەیە بە پشتبەستن بە قەبارەی گەڕان، و زۆرجار بەهۆی کێشەکانی وەک پابەندبوون بە ماڵپەڕەکانەوە بۆ بەکارهێنەرانی چین بەردەست نین.

ناتوانرێت بە شێوەی ئۆفلاین بەکاربهێنرێت، ناتوانرێت لە ئینترانتدا بەکاربهێنرێت و سنووردارکردنی گەورەی هەیە. ئەم بابەتە باسی زۆر ناکات.

دووەمیان گەڕانی تەواوی دەقی پێشەوەی پاکە.

لە ئێستادا، گەڕانە باوەکانی پێشەوەی پاکی تەواو دەقی بریتین لە lunrjs و ElasticLunr.js (بە پشتبەستن بە lunrjs گەشەپێدانی لاوەکی).

lunrjs دوو ڕێگا هەیە بۆ دروستکردنی ئیندێکس و هەردووکیان کێشەی خۆیان هەیە.

  1. فایلە ئیندێکسییەکانی پێش دروستکراو

    لەبەر ئەوەی ئیندێکسەکە وشەکانی هەموو بەڵگەنامەکان لەخۆدەگرێت، قەبارەکەی گەورەیە. هەرکاتێک بەڵگەنامەیەک زیاد کرا یان دەستکاری کرا، دەبێت فایلێکی نوێی ئیندێکس بار بکرێت. کاتەکانی چاوەڕوانی بەکارهێنەر زیاد دەکات و باند ویتێکی زۆر بەکاردەهێنێت.

  2. بەڵگەنامەکان بار بکە و ئیندێکسەکان لەسەر فڕین دروست بکە

    دروستکردنی ئیندێکس ئەرکێکی چڕ و پڕە لە ڕووی حیساباتیەوە دووبارە دروستکردنەوەی ئیندێکسەکە هەر جارێک کە دەستت پێی دەگات دەبێتە هۆی دواکەوتنی ئاشکرا و ئەزموونی خراپی بەکارهێنەر.


جگە لە lunrjs ، هەندێک چارەسەری تری گەڕانی تەواو دەق هەیە، وەک :

fusejs ، لێکچوونی نێوان ڕیزەکان بۆ گەڕان حیساب بکە.

کارایی ئەم چارەسەرە زۆر خراپە و ناتوانرێت بۆ گەڕانی تەواوی دەق بەکاربهێنرێت (بڕوانە Fuse.js پرسیاری درێژ زیاتر لە 10 چرکەی دەوێت، چۆن باشتر بکرێت؟ ).

TinySearch goo good google

بەهۆی کەموکوڕی چارەسەرەکانی ئێستا، i18n.site چارەسەرێکی نوێی پاکی پێشەوەی گەڕانی تەواو دەقی پەرەپێدا، کە ئەم تایبەتمەندیانەی خوارەوەی هەیە :

  1. پشتگیری لە گەڕانی فرە زمانە و قەبارەی بچووکە قەبارەی ناوکی گەڕان دوای پاکەتکردنی gzip 6.9KB (بۆ بەراوردکردن، قەبارەی lunrjs 25KB ) .
  2. دروستکردنی ئیندێکسێکی پێچەوانە لەسەر بنەمای indexedb ، کە بیرگەی کەمتر دەگرێت و خێرا دەبێت.
  3. کاتێک بەڵگەنامەکان زیاد/دەستکاری دەکرێن، تەنها بەڵگەنامە زیادکراوەکان یان دەستکاریکراوەکان دووبارە ئیندێکس دەکرێنەوە، ئەمەش ڕێژەی حیساباتەکان کەمدەکاتەوە.
  4. پشتگیری لە گەڕانی پێشگرەکان دەکات و دەتوانێت ئەنجامی گەڕانەکان لە کاتی ڕاستەقینەدا پیشان بدات لەکاتێکدا بەکارهێنەر دەنووسێت.
  5. ئۆفلاین بەردەستە

لە خوارەوە 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()

لە:

بینای ئیندێکس

5 خشتەی هەڵگرتنی شتەکان لە IndexedDB :

لە ڕیزبەندی بەڵگەنامەی url و وەشانی ژمارە ver تێپەڕێنە، و بگەڕێ کە ئایا بەڵگەنامەکە لە خشتەی doc بوونی هەیە یان نا. ئەگەر بوونی نەبوو، ئیندێکسێکی پێچەوانە دروست بکە. لە هەمان کاتدا، ئیندێکسی پێچەوانە بۆ ئەو بەڵگەنامانە لاببە کە تێنەپەڕێنراون.

بەم شێوەیە دەتوانرێت ئیندێکسکردنی زیادە بەدەست بهێنرێت و بڕی حیسابکردنەکە کەم دەکرێتەوە.

لە کارلێکی پێشەوەدا، دەتوانرێت پەتی پێشکەوتنی بارکردن لە ئیندێکسەکەدا پیشان بدرێت بۆ ئەوەی بۆ یەکەمجار لە کاتی بارکردندا دواکەوتوو نەبێت سەیری "پەڕەی پێشکەوتن لەگەڵ ئەنیمەیشن، لەسەر بنەمای / progress + css جێبەجێکردنی پاک" بکە .

IndexedDB نووسینی هاوکاتی بەرز

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 هەموو بابەتەکان کاش دەکات، کاتێک بەکارهێنەر گەڕانێک ئەنجامدا، تەواوی ماڵپەڕەکە بە گەڕانەکەشەوە، بە ئۆفلاین بەردەست دەبێت.

باشترکردنی پیشاندانی بەڵگەنامەکانی MarkDown

چارەسەری گەڕانی پێشەوەی پاکی i18n.site بۆ MarkDown بەڵگەنامە باشتر کراوە.

لە کاتی پیشاندانی ئەنجامی گەڕان، ناوی بابەتەکە پیشان دەدرێت و بابەتەکە دەگەڕێتەوە کاتێک کلیک لەسەر دەکرێت.

پوختە بکەرەوە

گەڕانی تەواو دەقی پێچەوانە تەنها لە پێشەوە جێبەجێ دەکرێت، پێویست بە سێرڤەر ناکات. زۆر گونجاوە بۆ ماڵپەڕە بچووک و مامناوەندەکان وەک بەڵگەنامە و بلۆگی کەسی.

i18n.site گەڕانی پێشەوەی پاکی سەرچاوە کراوە کە خۆ پەرەی پێداوە، قەبارەی بچووک و وەڵامدانەوەی خێرا، کەموکوڕییەکانی گەڕانی پێشەوەی پاکی ئێستای تەواو دەقی چارەسەر دەکات و ئەزموونێکی باشتری بەکارهێنەر دابین دەکات.