范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

玩转Markdown数据的分离存储与组件的原生渲染

  玩转Markdown —— 数据的分离存储与组件的原生渲染
  前言
  最近笔者把之前写的文章(markdown)数据,全部同步到数据库里,来交给多端去实时渲染。在同步的过程中,却出现了一些问题。
  笔者这里举个例子,让大家有所感受: --- author: icebreaker music:   title: "喜欢寂寞"   artist: "苏打绿"   src: "${{env.CDN_URL}}/music/喜欢寂寞-苏打绿.m4a"   pic: "http://p1.music.126.net/NGBr80seZ96ILO2h8R390A==/18576248952955358.jpg?param=130y130" ---  # icebreaker喜欢的音乐  
  上列文本解析后,会在 浏览器 这个环境,使用 icebreaker-love-music 这个组件构建一个音频播放器,并把在 yaml 里面声明的数据,作为 props 传递给它,从而达成了在 markdown 中使用 vue,react,web component 组件的效果。
  而且通过这个思路,还演化出 MDX 这个格式,大大的增强了 JSX 与 Markdown 混合书写时的开发体验,增强了它的表现能力。
  怎么做到的呢?
  我们知道,原生 Markdown 功能很少,不会做任何花哨的事情,这导致它无法满足大量的场景。于是乎,大量的开发人员充分发挥了 主观能动性 ,定制了许多的Markdown编译器。
  以著名的 Typora 为例,它就集成了 flowchart.js, mermaid 这类的图表库。我们可以在md里快速的生成一些简单的图表,但是遇到复杂的 case 时,可操控性还是远远弱于代码的。(这种情况,通常会在编辑器外部,先把图表做好,再把图片导出,插入md里)
  甚至还出现了 nodeppt 这样,使用 markdown 来制作 ppt 的包。笔者曾经使用过一段时间,认为使用的场景,还是以部门内部的分享为主。受限于许多难记的语法和md自身的表现力,在遇到高自定义化的场景时,制作成本会远远超出powerpoint。
  markdown 数据的分离存储
  那么进入正题了,如何对 markdown 内不同的数据进行归类呢?
  我们知道,不进行预处理的话,直接存进数据库里,无非就是一堆字符串。这堆字符串里藏着的数据,去实时处理,就是对计算机算力的浪费。
  许多的 markdown 解析器,也都能够支持像 yaml,json,toml,csv 等数据格式,此时预先把它们存进数据库就很有必要了。
  怎么解析呢? 通常的做法就2字,标记 ,在编写时,把它们用特殊的flag标识起来,比较通用的做法有:
  --- {{code}} --- => yaml
  ---toml {{code}} --- => toml
  ---json {{code}} --- => json
  这种做法本质上,和代码染色类似:
  ```js(染色语言) {{code}} ```
  于是在标记出来之后,我们就可以非常容易的,对这堆字符串,进行 截取解析 再 分发给不同的解析引擎处理 了。现有的实现也很多,比如 gray-matter。
  但是这只解决了数据分离的问题,还有一个组件渲染的问题没有解决。
  组件的原生渲染
  在谈这个之前,先看看 md 是如何转成 html 的:
  以 markded,markdown-it,unified(remark) 为例
  它们无非是 把 md 先解析成 tokens/mdast, 例如:{   type: "root",   children: [     {       type: "heading",       depth: 2,       children: [         {type: "text", value: "Hello, "},         {           type: "emphasis",           children: [{type: "text", value: "World"}]         },         {type: "text", value: "!"}       ]     }   ]}
  然后再交给 html 的 renderer 去处理的,上述的例子可以很容易的看出它的结果。
  那么非转化成 html,而去转化为原生标签怎么做呢?解决方案也有很多。
  先说一下我实现的方案:
  即  这一段字符串原封不动的存入数据库中,
  然后在其他平台的场景,都去编写或者移植一个Markdown解析器,接着呢# 如伪代码所示 onParse: mdast   if: match(node.name , "icebreaker-love-music")      then: replace and return (node.attrs)
  这种做法本质就是条件渲染,相当于一个 if 分支。
  这个解决方案需要在不同的平台上,把 icebreaker-love-music 这个组件都实现一遍,并作为插件挂载在 Markdown解析器中。
  它的缺点也是很明显的:
  即使各自平台的生态下,已经存在了优秀的解决方案,但无法保证各自的实现以及插件的效果。
  工作量大,原生需要不同语言,实现相同的组件效果。
  死板,当发现获取的数据中有不明组件,就需要 fallback 处理,这种会造成和后台那些管理系统的 富文本/Markdown编辑器,产生高度的耦合,甚至会影响到版本的发布。
  另一种的畅想
  另外一种则是我的畅想了,我们能否把组件本身,进行编译,变成一种 IL(Intermediate Language)的存在,交给各个端,进行原生渲染呢?
  比如我们知道,web component 浏览器端原生支持
  vue 组件可以被 @vue/web-component-wrapper 转化为 web-component
  react 则有 react-web-component
  那么 web-component 有可能,能依托一个像 QuickJS 这样的 Javascript Engine,在原生环境进行实时的编译渲染吗?
  以上这些就是笔者的一些愚见,如有想法,欢迎大家讨论和指点。
  附录(ast的生成与转化)
  syntax-tree
  mdast-util-from-markdown
  mdast-util-to-hast

3399的vivos10pro自拍手机值得入手吗?首先大家蓝厂大家第一印象是什么?音质好?系统流畅?广告植入大户?如今随着vivo在国内各大综艺电视剧等广告植入亮相,令更多人关注到这个走国际路线的国货品牌。不是说它徜徉媚外,是指它三星GalaxyUnpackedEvent2021实时资讯可折叠手机有望成为焦点三星GalaxyUnpacked活动2021年8月实时资讯GalaxyZFold3GalaxyZFlip3和GalaxyWatch4将成为今晚三星年度硬件更新活动的焦点。三星Gal刘强东承诺干满5年买房,京东0001号快递员金宜财如今买房了吗?如今为生活奔波在外辛勤工作的人们,都想让自己和家里人过上好日子,安居乐业。安居乐业的前提条件就是拥有属于自己的一套房子,不让自己在大城市里四处漂泊,没有依靠。如果你有幸在京东工作,华为200万元年薪招天才,毕业于这几所高校华为高薪聘请应届毕业生的消息,近日又成为热议话题。据长江日报报道,今年华中科技大学有两名刚毕业的博士入选华为天才少年项目。据介绍,入选天才少年的毕业生,年薪底限为89。6万元,最高华为出售荣耀后,Magic3系列全面支持谷歌程序据Cnet网8月12日报道荣耀在被华为出售之后凭借其新旗舰Magic3系列重新成为众人瞩目的焦点。这是自华为将荣耀出售给一买家财团以来,该公司首次面向全球推出高端旗舰手机产品。与华小米mix4和iqoo8Pro的对比,谁赢了?iqoo8Pro和小米mix4最大的区别应该就是屏幕了,一个E5材质2K顶级屏幕,一个是1080P屏下摄像头全面屏。不过除了屏幕之外还是有些不同的,综合下面曝光的配置。MIX4采用小米MIX4防丢无卡联网服务详解,官方回应来了上篇文章,笔者谈到小米MIX4防丢机制带出来的功能猜测,这不官方的求证,笔者已经去执行了,不得不说妙啊!小米MIX4的无卡联网服务小米MIX4的无卡联网服务,是小米MIX4防丢失体真不愧是价格屠夫!别人卖48万,小米只卖9999元8月10日,小米MIX4正式发布,同时发布的还是小米平板5等等让人期待的好东西。不过,真正最让我觉得有意思的,还是那个大名叫CyberDog,小名叫铁蛋的,小米第一代仿生四足机器人手机圈8月看点不断今晚锁定三星Galaxy新品发布按照以往的产品节奏,8月份是三星手机发布旗舰产品的重大节点,今年也不意外,全球发布会将在今晚举行,也就是说三星重磅的Galaxy新品会在今晚正式登场。再根据官方近期的预热消息看,发疫后开放固定居家上班有陷阱?Google砍薪最高达25许多公司因应新冠肺炎防疫需要,采用居家办公,也有公司在即使防疫措施放宽后,让员工选择长期在家上班。不过,美国网络搜寻引擎龙头Google公司,却会对于选择居家工作的员工减薪,幅度最2021年Q2中国品牌在越南智能手机市场份额占比达到45CounterpointResearch近期公布的数据显示,随着越南本土手机品牌Vsmart宣布停产,中国品牌在2021年第二季度中占据了越南国内智能手机市场近50的份额。Coun
七步教会你电脑远程控制1。打开虚拟机右击此电脑点击属性,左下角找到远程桌面,打开启用远程桌面。2。右击打开网络和ineternet设置3。打开设置以后,点击以太网,选择更改适配器,双击网络,选择详细信息解决儿子不爱洗手的妙招米家自动洗手机套装零序儿子快三岁了,在家喜欢爬在地上,在外什么都爱摸摸,回家后连哄带骗才能让他洗手,头疼之余,想到了米家自动洗手机,小孩喜欢探索新奇的事物,像自动洗手机这类产品,不需要挤压,自动出泡静态路由基本原理及实际操作一路由定义从源主机到目标主机的转发过程工作原理路由器根据路由表转发数据二路由表路由表的定义路由器中维护路由条目的集合路由表作用路由器根据路由表做路径选择路由表的形成直连路由本地接口大宇恒温杯垫冬日里的桌面神器时间已经来到十月份,天气也逐渐转凉,人们的生活和工作状态都逐渐向冬天靠近,吃一顿热气腾腾的火锅,喝一杯暖和的咖啡,都会让身体更加舒服。随着大家对自己身体的关系程度和对生活品质的要求一款适合户外的便携智能蓝牙音箱DOSS超级蓝牙音箱国内市场上各种智能音箱让大家有点目不暇接,但大多数的智能音箱使用场景都是在室内。而DOSS超级蓝牙音箱作为全球首款支持户外AI交互的智能音箱,作为传统音箱的替代品,为用户提供了更好2020年中国人工智能物流发展研究报告核心摘要近年来,中国物流业在互联网经济的催动下发展较快,在成本不断攀升效率提升缓慢的背景下,物流业最迫切的需求即降本增效。人工智能技术及相关软硬件产品的加入能够在运输仓储配送客服等守护家中安全的小精灵,360智能摄像机小水滴AI版体验作为一名上班族,日常早出晚归。尤其是工作日的白天,家中经常是处于无人状态,这带来了很大的安全隐患。为了能够安安心心的上班,思来想后决定给家中装一个智能摄像机。很早之前就对360智能无线充电的最后一片拼图70迈车载无线充电手机支架零序好了,这是本RUA使用的米酒无线充电补全计划的最后一块拼图,当初入手米酒,主要看上的功能之一就是20W无线快充功能,自己入过米家20W无线充电器,也体验过10W无线充电移动电源艾瑞2020Q1在线教育市场规模680。6亿,同比增长3。9COVID19疫情催化了在线教育行业的加速发展,在宏观和中观层面形成对在线教育行业的整体利好,但对于微观企业主体而言,其也将加速在线教育企业的两极分化并导致行业的重新洗牌。艾瑞预计艾瑞直播分享课中国在线视频领域有哪些内容值得回顾和探索呢?2020年至今国内外宏观经济环境受疫情影响起伏跌宕,在线视频在年初亦经历了内容供应短缺,需求暴涨的供需矛盾。进入3月,国内疫情持续向好,复工复产稳步推进,而海外疫情则在欧美多国爆发2020年中国在线知识问答行业白皮书核心摘要泛知识内容行业发展概览迎合行业发展趋势,在线知识问答赛道借势而上中国居民文化教育相关的精神建设需求不断增加,在成为泛知识内容消费者之余更有意愿成为内容输出者,泛知识内容行业