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

玩转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

荷兰ASML公司的最大股东是谁?说出来你可能不信荷兰的ASML公司,作为在光刻机领域当中的霸主,其背后最大的股东由原来的三星英特尔以及台积电,到现在则由资本国际集团控股,资本国际集团是最大股东,第二股东则是贝莱德集团。说到光刻机浙江建投,格力电器,九安医疗,湖南发展,福瑞股份,南极电商首航高科是氢能源概念。云内动力是汽车零部件概念。北新路桥是建筑装饰概念。华润双鹤是化学制药概念。浙江建投建筑装饰概念。延安必康是化学制药概念。湖南发展是绿色电力概念。老白干酒是白酒广东出台网络交易平台产品质量信息展示管控标准日前,广东发布实施网络交易平台产品质量信息展示管控规范团体标准(以下简称规范)。该标准以解决网络交易平台销售的产品普遍存在厂名厂址产品标准商标生产许可和强制性认证质量标志等基础性产青海省科技厅推进青海省科技管理信息系统公共服务平台四期建设为进一步提升省级科技计划管理信息系统支撑科技计划管理的效率和水平,不断优化完善信息系统管理流程,增强省级科技计划管理信息系统各项管理功能,青海省科技厅在广泛征求项目管理部门申报单位国内NO。1全球Top4!OPPO一季度成绩为何这么秀?打铁还需自身硬近日,IDC公布了一季度中国手机市场报告,2022年第一季度,中国智能手机市场出货量约7,420万台,同比下降14。1。其中,我们可以看到OPPO在第一季度出货量排名国内市场首位,苹果12性价比如何?现在值得入手吗?首先AppleiPhone12的优点屏幕显示清晰艳丽。观感好,这应该是女生都喜欢的手机了吧,尤其是拍照效果夜景曝光着色都很棒,双摄像头,后摄像头1200万像素,夜拍清晰,比起11,10个鲜为人知的iPhone功能会让你大吃一惊目录使未知来电者静音自由移动文本光标设置BackTap快捷方式播放背景声音在照片或相机中选择文本看别人使用他们的iPhone几分钟,你会很快发现他们做的很多事情与你完全不同。您可能小米MIUI调整重大调整只有开发版和正式版,切换无需清除数据不少用户选择小米手机是因为MIUI的体验,但MIUI12这一代的体验可谓拉胯,而且还分成了稳定版开发版,还有内测和公测,刚接触的朋友可能会一头雾水。其中开发版公测内测主要是能及时体OPPO这款手机告诉你什么叫性价比OPPOK10采用6。59英寸LCD屏幕(下巴有点宽,不过还可以接受)配有冰魄蓝,暗夜黑两种颜色高度约164。3毫米,宽度约75。8毫米,厚度约8。73毫米重量约205克(这个重量iPhone7Plus跟mi6你们还在用?2022年了,翻箱底找出来的iPhone7Plus跟小米6够用吗?这两台发布也已经将近6年了,那么到今天它们到底还够不够用,还能撑多久,来看看性能iPhone7Plus上搭载了A1手机为什么需要点胶?点胶是工业生产过程中的一到工序,即使用白胶,UV胶,红胶等胶水使产品粘合,起到加固密封的一些作用。那么这么做的目的主要是给电子板和一些重要的电子元件器起到防湿防潮和导热功能以至于更
外国手机比国产手机强在哪?凭什么卖得那么贵近几年手机行业发展的尤为迅速,外国手机风光依旧,国产手机相继崛起。手机市场的这块饼越来越大,每个品牌都想多分一块。但不知道大家有没有注意到,现如今的国产机的配置与外国机不相上下,甚汽车新闻早报9。229月22日汽车新闻早报,星期三,农历八月十六工信部研究制定支持新能源汽车加快发展的政策措施,提高锂钴镍等关键资源保障能力理想汽车由于疫情导致毫米波雷达专用芯片严重减产,将影响整车的100个问题之003关于办手机卡赚钱是真的吗?100个问题之003关于办手机卡赚钱是真的吗?问题之003网上很多关于兼职的骗局,有小伙伴问,办手机卡赚钱是真的吗?现在掌握移动终端者得天下,前段时间谷歌今年或向苹果支付150亿美特产APP开发,让特产购买更方便各地的特色产品都有其独特的风味,如广东的烧腊四川的特色火锅武汉的热干面等都是当地的特产,许多人在旅游过程中所购买的特产吃完以后希望复购,或在网络上看到别人吃也想品尝的一下,但实地购中兴通讯陈宗琮PON千行百业应用正在展露价值以PON技术为核心的光接入网,过去十年来推动我国成为全球领先的FTTx覆盖大国,打造了数字经济的重要基础设施。随着5G火热,光接入市场沉寂了一段时间,今年再度走向台前,吸引着业界的2021年新基建背景下中国工业互联网与工业智能研究报告行业综述我国经济社会发展处于新旧动能转换的关键时期,工业互联网作为新一代信息通信技术与工业经济及系统全方位深度融合的全新工业生态关键基础设施和新型应用模式,改变了企业研发生产管理和2021旗舰手机怎么选?外行人看热闹,内行人指定选这四款随着iPhone13系列的发布,手机圈竞争进入到了白热化,下半年上市的旗舰机将会非常非常少,于是现在摆在一部分人面前一个问题,手握大几千元应该换哪一款旗舰机?外行人看热闹,内行人会联通本周市场动态苹果预售乡村振兴宽带服务吉林联通业绩运营商财经网讯近期,运营商财经网报道了中国联通一周市场动态,主要涉及了异地服务苹果13预售乡村振兴宽带服务吉林联通5G渗透率业绩回暖等。附主要文章异地不受限千里共婵娟中国联通率先升交通部计划2025年高速公路快速充电覆盖率达809月17日,在2021年世界新能源汽车大会上,交通运输部副部长王志清表示,到2025年中国公交的新能源车比率要达到72,中国高速公路的快速充电覆盖率要达到80。交通运输部表示将继续一般性风景照片太多,但水天一色的照片你有吗?拿出来晒一晒?美丽的小城有条清澈见底的赣江江边新建的滨江公园成了我日常运动和拍摄的地方黄昏时用手机p30P手持拍摄还是有点糊,但整体还是不错,分享给大家,领略家乡的水天一色抚仙湖下面分享的这组图马云在55岁时选择退休,是不是不看好未来的阿里巴巴?当马云看到人民日报主编说,中国没有马云时代,只有时代的马云,他就知道他的时代已经结束,要让位给别的人,他再不选择退休,他将会退不了。马云太知道中国特殊的国情,知道人民日报总编话里的