浅析postMessage
前言在前端开发中,有时候我们需要在两个页面间进行数据交换。如果两个页面属于同一个源,我们有很多办法可以实现这一目标。但是,当两个页面属于不同的源时,办法就很有限了。本文将介绍其中的一种方法,即使用postMessage在不同源的两个页面间进行数据交换,当然该方法也适用于同源的页面间。
很多接口(interface)都提供了postMessage方法,比如Window,MessagPort,Worker,Client,ServiceWorker,BroadcastChannel等。首先要做的事情是分清楚不同postMessage的作用和应用场景,本文将结合在不同源的两个页面间进行数据交换的场景,介绍Window: postMessage()和MessagePort: postMessage()方法。
Window: postMessage()window.postMessage()方法可以安全地在不同源的window对象间进行通信。当然这有两个前提,
消息发送方需要拿到接收方的window对象,
消息接收方需要监听message事件
有两种方式可以满足前提1,分别是调用window. ...
在家庭网络中隔离智能家居设备
智能家居已经走进了千家万户,越来越多的家居产品具备了联网功能。如果想要将这些智能家居产品接入家庭网络,就需要给他们提供家庭wifi的账号和密码。
但是给智能家具产品提供家庭wifi的账号密码,可能会存在以下3个问题:
各大平台基本上会把wifi账号密码保存在云端,如果发生数据泄露事件,别人就可以随便连接你的家庭wifi
部分智能家具产品存在扫描局域网拓扑的行为,将它们连入家庭网络可能会泄露隐私
如果某个智能家具产品存在安全漏洞,就可能会被黑客控制,通过SSRF等方式攻击家庭网络
因此,比较好的做法是将智能家具产品放在一个隔离的网络环境中,像华硕/梅林的系统天然提供了访客网络功能,连接访客网络的设备可以访问互联网,但是会被限制访问家庭网络,从而提升家庭网络的安全性。
使用这种方式可以解决前面说的问题2和问题3,但是会带来一个新问题,如果将访问内部网络设置成关闭,不止这个访客网络中的设备无法访问家庭网络,家庭网络中的设备也无法访问这个访客网络。在有些场景下,我们需要从家庭网络中访问某个接入访客网络的设备就会遇到问题。好在社区里有人为这个问题开发了一个插件YazFi。通过这个 ...
3-highs
随着互联网成为基础设施,人们的生活也越来越离不开互联网。由于互联网用户数量众多,一个系统如何能支撑更多的用户同时访问,如何能提升系统的响应速度,如何预防和控制故障的发生成为了大型互联网软件设计的三个关键点。而这三个关键点分别就是高并发、高性能和高可用。
高并发、高性能和高可用三个设计点中其实有不少相辅相成、相通之处,比如一个系统如果要做到高并发,势必会有一些可以水平扩展的设计,而水平扩展之后系统的性能会得到提升,也可以认为对系统做了冗余设计,提升了系统的可用性。
flowchart
subgraph common
多副本 --> 负载均衡
多副本 --> 主从
多副本 --> 读写分离
end
subgraph 高并发
扩
扩 --> 垂直扩展 --> 提升机器性能
扩 --> 水平扩展 --> 多副本
end
subgraph 高性能
加速 --> 提升计算性能
加速 --> 多副本
提升计算性能 --> 计算速度
提升计算性能 --> IO速度
计算速度 --> 硬件 --> 提升机器性能
计算速 ...
Puppeteer
Puppeteer是一个用Node.js编写的基于Chrome Devtools Protocol的自动化工具。它的作用有:
网页截图或者生成PDF
抓取单页应用(SPA)并生成预渲染内容(即SSR,服务器端渲染)
UI自动化测试,自动提交表单、模拟键盘输入等
创建一个测试Javascript和Chrome最新特性的环境
录制网站加载时间线,帮助诊断性能问题
测试Chrome扩展
安装12345npm i puppeteer# or using yarnyarn add puppeteer# or using pnpmpnpm i puppeteer
第一次安装puppeteer的时候,它会自动下载一个测试专用Chrome和一个chrome-headless-shell二进制文件(从Puppeteer v21.6.0版本开始提供),Chrome的下载位置可以在配置中进行修改。
API层级
Puppeteer使用Chrome Devtools Protocol和浏览器通信
一个浏览器实例中可以包含多个浏览器上下文,比如隐身窗口是一个独立的上下文
一个浏览器上下文可以包含多个页面
...
ComfyUI
ComfyUI是一个强大的模块化stable diffusion图形化界面和后端服务,提供了通过workflow的方式设计stable diffusion工作流。相比WebUI,ComfyUI提供了灵活的方式自定义工作流,支持工作流复用,或者修改、替换甚至是开发其中的节点来满足不同的需求。ComfyUI能够处理更复杂、更大规模的任务,同时内部对性能做了优化,生成更快,占用显存更小。
概念
潜在空间: 机器学习中用于表示数据被压缩或编码成较低维度的特征空间
CLIP(Contrastive Language Image Pre-training,对比语言图像预训练):是一个常用的Text Encoder模型,将文本embedding成特征向量
MODEL:具备对图片进行降噪能力的模型,一般有2种格式:
safetensors:仅包含模型的参数,加载安全性好,速度快
ckpt:除了模型参数外,还包含训练过程中的优化器状态,相当于训练快照,可以用于恢复训练,但是体积较大且存在安全风险
VAE(Variational Auto Encoder,变分自编码器):将图片编码成潜在空间以及将潜在 ...
RPA
RPA全称Robotic Process Automation,中文名机器人流程自动化,使用机器模拟人类的操作,执行各种重复、流程化的任务。
发展历史
第一阶段:辅助人类完成特定的任务,比如Excel中的宏,整个过程需要人工干预
第二阶段:可以独立地完成业务流程中的部分工作,但是需要人工的控制和管理
第三阶段:使用一些基础的感知能力,自动化地完成一些复杂的操作,比如写邮件、开发票等
第四阶段:利用人工智能技术,包括机器学习和自然语言处理等算法实现理解业务、自主决策甚至优化任务执行步骤等
应用领域
客服自动化:通过结合AI和RPA可以实现自动回复用户咨询、快速处理订单等操作
财务流程自动化:结合OCR技术可以实现自动识别提取发票、自动生成报表等操作
人才招聘自动化:实现高效整理人才简历、智能邀约、面试助手等功能
头部厂商
国外
UiPath:BS架构,提供直观易用的界面,并且拥有广泛的用户社区
BluePrism:CS架构,面向企业提供安全、可控、智能的自动化平台
AutomationAnywhere:CS架构,主要面向开发者并提供脚本功能
国内
金智维:内置大量的rpa函数 ...
Appium
Appium是一个专注于跨平台UI自动化的工具,支持使用多语言编写控制端。
组成block-beta
columns 3
space
block:core
columns 2
c["Appium core"]:2
drivers
plugins
end
space
block:client
columns 2
client1["clients"]:2
Node.js
Java
Python
Ruby
C#
end
space
block:platform
columns 2
p["platform"]:2
WebDriver:2
browser
mobile
desktop
end
client -- "WebDriver" --> core
core -- "WebDriver" --> platform
classDef head fill:#696,stroke:#333;
classDef webd ...
我被锁住了
啦啦啦,啦啦啦,我是个卖锁的小行家~
呀!一不小心,我的锁掉河里了o(╥﹏╥)o
这时候,从河里浮上来一位河神,他捞起一把悲观锁,问我:“这是你掉的锁吗?”
我看了一眼,说:“不是。”
河神再次从河里捞起一把非公平锁,问我:“这是你的锁吗?”
我摇摇头说:“不是。”
河神又一次从河里捞起一把排它锁,问我:“这是你的锁吗?”
我看了一眼锁,然后转头对河神说:“你之前也是程序员吗?”
为什么要有锁当数据/资源只有一份,而为了提高性能,有多个线程或者client同时操作该数据/资源的时候,会出现结果不正确或者不一致的情况。比如,小明有500块钱,同时给小张和小李各转300块时,可能会出现下图中的情况:
sequenceDiagram
participant 小明
Note left of 小明: 余额500元
participant 小张
小明->>小张: 转账300元
Note right of 小张: 余额+300元
小明->>小李: 转账300元
Note right of 小李: 余额 ...