前端每周学习分享--第12期
1.VuePress
大家看过不少Vue.js及其子项目的文档,一定发现了它们风格完全一致,界面清爽,读起来很舒服,它们都使用了vuepress。
VuePress是尤大为了支持 Vue 及其子项目的文档需求而写的一个静态网站生成工具,广泛用于编写技术文档 ,可以部署在github上做个人博客。
原理:
在构建过程中,会创建应用程序的服务器渲染版本,通过访问每个路由,来渲染相应的 HTML。
其中, 每个 markdown 文件都使用 markdown-it 编译为 HTML,然后作为 Vue 组件的模板进行处理。这允许你直接在 markdown 文件中使用 Vue,在需要嵌入动态内容时,这种使用方式非常有用。
十分实用的特性:
- md文件可内嵌vue代码
- 可自定义主题
- 利用service worker做离线缓存
- 多语言支持
- 基于git的最近更新
官方文档: https://vuepress.docschina.org/guide/#%E8%BF%90%E8%A1%8C%E5%8E%9F%E7%90%86-how-it-works
快速搭建: https://segmentfault.com/a/1190000016333850#articleHeader1
2.WebWorker
web worker是运行在后台的jacvascript,利用类似线程的消息传递实现并行,独立于其他脚本,不会影响页面的性能。
web worker能够长时间运行,有理想的启动性能以及理想的内存消耗。
worker 创建后,它可以向它的创建者指定的事件监听函数传递消息,这样该worker生成的所有任务都会接收到这些消息。
webworker有专用线程dedicated worker(单窗口专用),sharedWorker(可多窗口共享),以及后来的service worker(目前浏览器支持程度还不高)。
2.1.dedicated worker
使用方法:
worker线程里监听onmessage,
页面线程里创建worker对象:const myworker = new Worker("worker.js")
发送消息:postMessage(msg)
接受消息:onmessage = function(e){const msg = e.data}
msg的数据格式自行定义。
终止worker:myworker.terminate()
例如下面的示例,worker会接收页面上输入的两个数字,计算出乘积后返回结果。
worker.js
onmessage = function(e) { console.log('Worker: Message received from main script'); let result = e.data[0] * e.data[1]; if (isNaN(result)) { postMessage('Please write two numbers'); } else { let workerResult = 'Result: ' + result; console.log('Worker: Posting message back to main script'); postMessage(workerResult); } }
index.html里
const first = document.querySelector('#number1'); const second = document.querySelector('#number2'); const result = document.querySelector('.result'); if (window.Worker) { const myWorker = new Worker("worker.js"); first.onchange = function() { myWorker.postMessage([first.value, second.value]); console.log('Message posted to worker'); } second.onchange = function() { myWorker.postMessage([first.value, second.value]); console.log('Message posted to worker'); } myWorker.onmessage =