brief: | i18n.site ሕጂ ሰርቨር ዘይብሉ ምሉእ ጽሑፍ ምድላይ ይድግፍ።

እዚ ጽሑፍ እዚ፡ ብኢንዴክስድዲቢ ዝተሃንጸ ዝተገልበጠ ኢንዴክስ፡ ምድላይ ቅድመ-ጥብቆ፡ ምምሕያሽ ምክፍፋል ቃላትን ደገፍ ብዙሕ ቋንቋታትን ሓዊሱ፡ ኣተገባብራ ጽሩይ ቅድመ-መወዳእታ ምሉእ-ጽሑፍ ምድላይ ቴክኖሎጂ የላልየና።

ምስቶም ዘለዉ መፍትሒታት ክነጻጸር እንከሎ፡ i18n.site ጽሩይ ናይ ቅድሚት ምሉእ ጽሑፍ ምድላይ ብዓቐንን ቅልጡፍን፡ ንኣናእሽቱን ማእከሎትን መርበባት ሓበሬታ ከም ሰነዳትን ብሎግን ዝምችእ ኮይኑ፡ ካብ መስመር ወጻኢ ድማ ይርከብ።


ጽሩይ ናይ ቅድሚት-መወዳእታ ዝተገልበጠ ምሉእ ጽሑፍ ምድላይ

ቕደም ስዓብ

ድሕሪ ናይ ሓያሎ ሰሙናት ምዕባለ i18n.site (ጽሩይ ስቴቲክ markdown multilingualtranslation & ዌብሳይት ህንጸት መሳርሒ) ሕጂ ንጽሩይ ናይ ቅድሚት ምሉእ ጽሑፍ ምድላይ ይድግፍ።

እዚ ጽሑፍ ቴክኒካዊ ኣተገባብራ i18n.site ጽሩይ ቅድመ-መወዳእታ ምሉእ-ጽሑፍ ምድላይ Visit i18n.site

ኮድ / ምንጪ :

ሓፈሻዊ ትሕዝቶ ናይ ሰርቨር ዘይብሉ ምሉእ ጽሑፍ ምድላይ መፍትሒታት

ንኣናእሽቱን ማእከሎትን ጽሩይ ስታትቲክ መርበባት ሓበሬታ ከም ሰነዳት/ውልቃዊ ብሎግ፡ ባዕልኻ ዝሃነጾ ምሉእ ጽሑፍ ምድላይ ድሕረ ባይታ ምህናጽ ኣዝዩ ከቢድ እዩ፡ ካብ ኣገልግሎት ነጻ ዝኾነ ምሉእ ጽሑፍ ምድላይ ድማ እቲ ዝያዳ ልሙድ ምርጫ እዩ።

ሰርቨር ኣልቦ ምሉእ ጽሑፍ ምድላይ መፍትሒታት ኣብ ክልተ ሰፋሕቲ ምድባት ይምደቡ፤

ቀዳማይ፡ ተመሳሳሊ algolia.com ናይ ሳልሳይ ወገን ኣገልግሎት ምድላይ ንሙሉእ ጽሑፍ ምድላይ ዝኸውን ናይ ቅድሚት ኣካላት ይህቡ።

ከምዚኦም ዝበሉ ኣገልግሎታት ኣብ መጠን ምድላይ ዝተመርኮሰ ክፍሊት ዝሓትት ኮይኑ፡ መብዛሕትኡ ግዜ ድማ ብሰንኪ ከም ምኽባር መርበብ ሓበሬታ ዝኣመሰሉ ጉዳያት ኣብ መሬት ቻይና ንዝርከቡ ተጠቀምቲ ኣይርከቡን።

ካብ መስመር ወጻኢ ክጥቀመሉ ኣይክእልን፣ ኣብ ኢንትራኔት ክጥቀመሉ ኣይክእልን፣ ዓቢ ድሩትነት ኣለዎ። እዛ ዓንቀጽ እዚኣ ብዙሕ ኣይትዛረብን እያ።

እቲ ካልኣይ ድማ ጽሩይ ናይ ቅድሚት ምሉእ ጽሑፍ ምድላይ እዩ።

ኣብዚ እዋን እዚ፡ ልሙድ ጽሩይ ቅድመ-መወዳእታ ምሉእ-ጽሑፍ ምድላይ lunrjsElasticLunr.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 Bar with Animation, Based on a Single progress + Pure css Implementation" ትግርኛ / ቻይንኛ ርአ።

IndexedDB ልዑል ተደጋጋሚ ጽሑፍ

እቲ ፕሮጀክት idb asynchronous encapsulation ናይ 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 ቁልፊ ቃላት ዝሓዘ ውጽኢት ክምለስ እዩ።

እቲ ዝረአ ውጽኢት ምድላይ መጀመርታ ልክዕነት ናይቲ ሕቶ የረጋግጽ፣ ድሕሪኡ ዝጽዓን ውጽኢት ድማ (እቲ load more ዝብል ቁልፊ ጠውቕ) ነቲ ናይ ምዝካር ደረጃ የረጋግጽ።

ኣብ ጠለብ ጽዕነት

ፍጥነት ምላሽ ንምምሕያሽ፡ እቲ ምድላይ ነቲ yield ጀነሬተር ተጠቒሙ ኣብ ትሕቲ ጠለብ ምጽዓን የተግብር፡ ውጽኢት limit ዝሕተተሉ እዋን ድማ ይምለስ።

ኣስተውዕል ኣብ ነፍሲ ወከፍ ድሕሪ yield እንደገና ኣብ እትደልየሉ እዋን IndexedDB ዝኾነ ናይ ሕቶ ትራንዛክሽን ዳግማይ ክትከፍቶ ኣለካ።

ቅድመ-ጥብቆ ኣብ ሓቀኛ ግዜ ምድላይ

ተጠቃሚ ኣብ ዝጽሕፈሉ እዋን ውጽኢት ምድላይ ንምርኣይ ንኣብነት wor ምስ ኣተወ፡ ከም wordswork ዝኣመሰሉ ብ 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 's ጽሩይ ናይ ቅድሚት ምድላይ መፍትሒ ን MarkDown ሰነዳት ዝተመቻቸወ እዩ።

ውጽኢት ምድላይ ኣብ እተርእየሉ እዋን፡ ስም እቲ ምዕራፍ ይርአ፡ ምስ ጠወቕካ ድማ እቲ ምዕራፍ ኪንቀሳቐስ እዩ።

ኣጠቓልል

ዝተገልበጠ ምሉእ ጽሑፍ ምድላይ ጽሩይ ኣብ ቅድሚት ጫፍ ዝተተግበረ፣ ሰርቨር ኣየድልን። ንኣናእሽቱን ማእከሎትን መርበብ ሓበሬታታት ከም ሰነዳትን ውልቃዊ ብሎግን ኣዝዩ ዝምችእ እዩ።

i18n.site ክፉት ምንጪ ባዕሉ ዝማዕበለ ጽሩይ ቅድመ-መወዳእታ ምድላይ፡ ብዓቐን ንእሽቶን ቅልጡፍ ምላሽን፡ ጉድለታት ናይቲ ሕጂ ዘሎ ጽሩይ ቅድመ-መወዳእታ ምሉእ ጽሑፍ ምድላይ ይፈትሕን ዝሓሸ ተመኩሮ ተጠቃሚ ይህብን።