million

million 使创建用户界面像React一样简单,但为最终用户提供更快的性能和更小的包大小。通过使用编译器预先计算用户界面,Million 减少了传统 Virtual DOM 的开销。

虽然像Preact这样的替代库通过有效的代码设计减少了包大小,但 Million 通过利用编译在改进包大小和渲染速度方面取得了巨大的飞跃,更进一步。

安装

在您的项目目录中,运行以下命令:

npm install million

如果你只想玩 Million ,你可以使用 Skypack 导入

<script type="module">import { m, render } from 'https://cdn.skypack.dev/million';// your code here
</script>

使用

在计算机上的某处创建一个空白 HTML 文件,其名称如下:mega-millions.html. 如果您想在浏览器中进行编辑,请分叉此 Stackblitz。

使用文本编辑器,用以下内容填充文件:

<html><head></head><body><script type="module">import { render } from 'https://cdn.skypack.dev/million';render(document.body, 'You won $$$!');</script></body>
</html>

结果为:

You won $$$!

在网络浏览器中打开您的文件,如果您看到You won $$$!,您已经准备好隆隆声了!

现在你已经准备好玩了,让我们看几个实际的例子,作为教你百万基础知识的基础。在本练习结束时,您应该已经具备了开始自己构建东西的能力。

  • 建立一个计数器
  • 构建搜索输入
建立一个计数器

让我们从一个简单的“计数器”示例开始,演示渲染和虚拟节点构建这两个核心功能的基础知识。

<script>在标签中插入以下内容:

import { _, m, render } from 'https://cdn.skypack.dev/million';let seconds = 0;setInterval(() => {render(document.body, m('p', _, [`Time elapsed: ${seconds}`]));seconds++;
}, 1000);

现在,您可以通过一点 JavaScript 看到,我们创建了一个交互式“计数器”。

让我们简要介绍一下正在发生的事情:

render()函数有一个在许多虚拟 DOM 库中使用的标准接口。第一个参数是将用作父 DOM 引用的 DOM 节点,第二个参数是要渲染的虚拟 DOM

m()函数将为元素实例化一个“虚拟 DOM”节点。

基本上,m()函数是你如何构建你想要的UI的样子,render()函数是你想把它放在屏幕上的时候。

构建搜索输入

现在我们已经了解了一些基本功能,让我们看看如何构建具有更复杂功能的搜索输入。

import {_,m,render,startTransition,style,kebab,Flags,
} from 'https://cdn.skypack.dev/million';
import { compareTwoStrings } from 'https://cdn.skypack.dev/string-similarity';const entries = ['Apple', 'Banana', 'Grape', 'Orange', 'Strawberry'];const update = (highlightedEntries) => {const vnode = m('div', _, [m('input', { onInput: ({ target }) => search(target.value) }, []),m('ul', _, highlightedEntries, Flags.ELEMENT_KEYED_CHILDREN),]);startTransition(() => {render(document.body, vnode);});
};const search = (query = '') => {update(entries.map((entry) => {// Compare two strings returns a float based off of similarity// Ex: 0.8 means high similarity, 0.2 means low similarityconst shouldShow =compareTwoStrings(entry.toLowerCase(), query.trim().toLowerCase()) >0.25;return m('li',{key: `${entry}-${shouldShow}`,style: shouldShow? style(kebab({ textDecoration: 'underline', fontWeight: 'bold' })): undefined,},[entry],);}),);
};search();

默认情况下,将列出所有“条目”(Apple、Banana、Grape、Orange、Strawberry),但您可以通过在文本输入中键入来突出显示它们。在您键入时,条目列表将更改以反映您正在搜索的内容。

Github每日精选(第61期):虚拟 DOM 走向未来 million相关推荐

  1. Github每日精选(第57期):用于绘制手绘图的虚拟白板excalidraw

    excalidraw 在做ppt的时候,如果我们的图或者是表,用手绘的形式来完成的话,我们的ppt看起来就比较高档了,一个体现了我们的认真做ppt的态度,一个是体现了我们审美的高度. excalidr ...

  2. Github每日精选(第79期):虚拟数据生成库faker

    faker Faker是一个Python包,可以为你生成假数据.无论您是需要引导您的数据库.创建美观的 XML 文档.填写您的持久性以对其进行压力测试,还是对从生产服务中获取的数据进行匿名化,Fake ...

  3. Github每日精选(第56期):支持多语言的文字识别EasyOCR

    EasyOCR EasyOCR一款好用的OCR,支持80多种语言和所有流行的书写脚本,包括拉丁语.汉语.阿拉伯语.德瓦纳加里语.西里尔语等. OCR (Optical Character Recogn ...

  4. Github每日精选(第24期):python的浏览器MechanicalSoup

    MechanicalSoup 可能你看到MechanicalSoup,就会想起BeautifulSoup,是的,这两个的功能用起来差不多,只是MechanicalSoup做的更多一点. Mechani ...

  5. Github每日精选(第48期):SQLite下的知识库memos

    memos memos 是一个开源的.自托管的知识库,可与 SQLite db 文件一起使用. 使用SQLite db还是很有必要的,因为有的时候我们需要把我们的日志进行转移,直接把数据库拷走就可以了 ...

  6. Github每日精选(第77期):Go (Golang) 编写的 HTTP Web 框架gin

    Gin Gin 是一个用 Go (Golang) 编写的 Web 框架.由于httprouter,它具有类似 martini 的 API,性能提高了 40 倍.如果您需要性能和良好的生产力,您一定会喜 ...

  7. Github每日精选(第75期):colly 爬取网站所有的数据

    colly colly 是一个优雅的 Golang 爬虫框架. colly 提供了一个干净的接口来编写任何类型的爬虫/scraper/spider. 使用 Colly,您可以轻松地从网站中提取结构化数 ...

  8. Github每日精选(第33期):Screenshot-to-code训练 AI 将设计模型转换为 HTML 和 CSS

    Screenshot-to-code Screenshot-to-code 深度学习将改变前端开发.它将增加原型设计速度并降低构建软件的门槛. github上的地址在这里. 当 Tony Beltra ...

  9. Github每日精选(第65期):手机自动化测试工具maestro

    Maestro 现在手机ui的测试工具已经很多了,为什么还要多一款Maestro 呢?我们来看看Maestro 的介绍. Maestro 是为您的移动应用程序自动化 UI 测试的最简单方法. gith ...

最新文章

  1. 自然语言处理NLP、自然语言理解NLU、自然语言生成NLG、任务家族
  2. 即时通讯有标准 IM的四种即时通讯协议简介
  3. Java-Map从入门到性能分析3【LinkedHashMap(性能耗时对比、模拟LRU缓存)、TreeMap(排序、性能对比)】
  4. 关于 SAP Spartacus 电商云 UI feature level 的测试步骤
  5. Java Enterprise软件与应有的软件
  6. 【渝粤教育】 国家开放大学2020年春季 1373特殊教育概论 参考试题
  7. GVDS:面向广域高性能计算环境的虚拟数据空间
  8. redis 所有模糊key 查询_写完这篇Redis由浅入深剖析快自闭了!
  9. Webots安装,及urdf转webots,通过3d模型获取Proto_indexedFaceset数据,MoveIt机械臂路径规划
  10. eclipse报错: Unhandled event loop exception No more handles
  11. 电脑主板跳线_电脑主板跳线连接图
  12. 从零开始搭建“表情包小程序”
  13. neovim安装dein.vim
  14. 每周分享第 26 期
  15. 线性代数笔记2:基本子空间的正交性及性质
  16. 解决uni.request时uni.showtoast无效问题
  17. 达达-京东到家完成新一轮5亿美金融资,沃尔玛、京东分别增持
  18. python中的数值类型有哪些,Python中数值类型有哪些
  19. 《抽样技术》第4章 等概率整群抽样和多阶段抽样
  20. 陈平 教授的演讲(经济学家)

热门文章

  1. Allegro创建板框的方法介绍
  2. 瑞泰口腔黄远亮院长应邀出席第十二次全国口腔种植学术大会
  3. 业务员与客户沟通的礼仪
  4. 搬砖:void (*signal(int sinno,void(*func)(int)))(int) 函数指针
  5. “无实物尝百味”通过控制微电流刺激产生味觉—1.硬件设计篇
  6. VirtualBox网络连接方式学习笔记
  7. PhotoShopCS6报错error:16解决办法
  8. wps office 2005:不得不用的14绝技
  9. 常用插件:分享12款超级好用的 Chrome 插件
  10. Mencoder安装编译手册