以EJS为基础的高效静态网站搜索引擎

tobegold574 Lv5

起因

在使用 hexo 作为博客框架,采用 redefine 作为布局框架的时候我感觉在一些地方非常不方便,尤其是每次写完新 post 就要推送一大坨变更,因为每篇 post 之间的耦合性太强,在渲染的时候每篇博客的很多细节都要改,这样就导致一个问题,每篇 post 没有专属于自己的推送记录,就无法通过这个过程为每次更新的内容做标注,如果想要找到之前的内容大概和什么有关,只有 tag category 和 post 的名字可以用于分辨,很显然这并不足够,我不想给每篇 post 写一堆很细的 tag,所以,我决定为此开发一个静态网站可用的专属搜索引擎。

实现方案

暂定的方案是用 EJS 在解析 md 的内容时,加一些额外的语法分析,将某些特殊的标记识别出来,生成一个额外的 html 文件,这个 html 文件将会是一个辅助记录,用户只需要在写 post 的时候为他们较为细粒度的关键词添加这样的标记,就会被自动捕捉,加入到这样一个关键词图谱,然后用户可以在这里查看自己添加过的关键词,或者,通过一个伪搜索引擎(本质上只爬取该图谱上的内容),搜索用户想要的东西(曾经标注过的)。

EJS配置参数(以对象形式作为参数提供给api)

  • cache:缓存ejs函数编译结果,但代价是内存,我估计要用
  • filename:指定模板路径
  • root:指定模板所在目录(上一个参数为相对路径)
  • views:模板文件中用到的其他模板文件的路径
  • context:直接传递数据
  • compileDebug:debug instrumentation
  • client:指定为客户端可执行的js函数
  • debug:额外调试信息
  • strict:严格模式
  • with:js的较宽松的对象作用域,默认开启
  • rmWhitespace:去除所有不必要空格
  • escape:通过直接转义为html防止xss攻击(js注入)
  • outputFunctionName:为默认的匿名函数调用指定名称
  • async;异步,感觉一般用不着,除非有比较复杂的动画逻辑

EJS分隔符

这个<%是最基础的,不输出js函数到html,<%=这个 常用 会输出到html,默认都是转义的(不专义的是<%-,终止符是%>,两个位置的分隔符都可以通过加_吃空格,或者加-吃换行(这个仅终止分隔符可用)。

2025.1.7

我理解了hexo的设计哲学,还有我需要做的事情,我不打算对这个框架进行定制,我打算对hexo-renderer-marked添加额外的特殊标记功能,这意味着从更基础的层面推陈出新。

  • Title: 以EJS为基础的高效静态网站搜索引擎
  • Author: tobegold574
  • Created at : 2025-01-06 11:07:16
  • Updated at : 2025-01-07 14:50:21
  • Link: https://tobegold574.me/2025/01/06/以EJS为基础的高效静态网站搜索引擎/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments