run

run

轻量级库实现Web Worker中安全执行用户代码

Run是一个微型JavaScript库,专门用于在Web Worker中安全执行用户提供的代码。该库主要用于数据转换,通过接收代码字符串和数据负载,在隔离环境中执行并返回结果。Run禁用了某些全局功能,确保代码无法访问DOM和主应用程序的域上下文,适合在低代码应用中安全运行用户代码片段。这个开源项目将应用于即将发布的仪表板SDK项目Slashd中。

RunWeb Worker代码执行JavaScript低代码Github开源项目

运行

Run 是一个小型库,可以在 Web Worker 中运行用户提供的代码。 其主要目的是通过代码片段实现数据转换,因此某些全局功能被禁用。

该库接收一段 JavaScript 代码(以字符串形式)和一个数据载荷,并返回其执行结果。

它尽可能安全地运行"不受信任"的代码,因为:

  • Web Worker 无法访问 DOM
  • Web Worker 无法访问主应用程序的域上下文
  • Web Worker 在单独的线程中运行,不会阻塞 UI
  • Web Worker 不应能进行网络操作(仍在调查中)

主要用例是在低代码应用程序中,用户可以运行代码片段(不一定由同一用户创建)来完成各种任务。

Run 将在我们即将推出的开源仪表板 SDK 项目 Slashd 中使用。

这里有一个小型沙盒应用 here 供您试用。

安装

使用 UnPkg CDN

<script src="https://unpkg.com/@slashd/run"></script>

使用 SkyPack CDN

<script type="module"> import SlashdRun from 'https://cdn.skypack.dev/@slashd/run' // 你的代码 </script>

使用包管理器:

npm install @slashd/run

然后,在浏览器中引入:

<script src="node_modules/@slashd/run/dist/slashd-run.min.js"></script>

或在使用打包工具的模块中通过 ES6 引入:

import SlashdRun from '@slashd/run'

如何使用

您可以创建一个或多个任务(独立的 worker):

import SlashdRun from '@slashd/run' const task = new SlashdRun()

exe 方法返回一个 promise,因此您可以使用 await

const myCode = `return Math.random() * param` const res = await task.exe(myCode, {param:20}) // res 可能是 12.345657676

您可以通过以下方式捕获代码错误:

const myCode = `return MathRandom * param` try{ const res = await task.exe(myCode, {param:20}) }catch(e){ console.log(e) } // ReferenceError: MathRandom is not defined

感谢 @rob-gordon,您可以使用异步代码:

const myCode = `return new Promise((resolve, reject) => { setTimeout(() => { resolve(Math.random()) }, 2000) })` const res = await task.exe(myCode, {param:20}) // res 可能是 12.345657676

或者,使用 restrict:false 选项:

const myCode = `return await fetch('https://jsonplaceholder.typicode.com/todos').then(res => res.json())` const res = await task.exe(myCode, {param:20}) // 200 [{...}, ...]

配置

您可以通过在设置中添加 deps 属性作为外部路径数组,指定在 worker 中加载外部库:

const task = new SlashdRun({deps:['https://unpkg.com/lodash', 'https://www.example.com/mylibrary.js']})

使用上述设置,可以在提供的代码中使用 lodash

const myCode = `_.difference(arr1, arr2);` const res = await task.exe(myCode, {arr1:[2, 1], arr2:[2, 3]}) // => [1]

默认情况下,该库尝试阻止 Web Worker 的某些功能,如网络函数。 如果您想禁用此行为并保留所有标准 Web Worker 功能,请添加 restrict 属性并将其设置为 false

const task = new SlashdRun({restrict:false})

使用此选项,用户提供的代码可以进行网络操作,如 fetch()

您还可以使用特定的 init 静态方法全局配置库。这样,所有任务都将使用相同的设置:

import { init } from '@slashd/run' init({deps:['https://unpkg.com/lodash'], restrict:false})

要终止 worker,您可以使用:

task.destroy()

使用 worker 池

如果您需要从预定义的可用 worker 池中获取任务(以限制 worker 的创建),可以使用这个静态方法代替 new SlashdRun 方式:

import { init, getFromPool } from '@slashd/run' init({maxWorkers:3}) // 必需! const task = getFromPool()

在这种情况下,库配置需要使用 init 方法完成。此外,maxWorkers 是必需的,且必须至少为 1 或更大。请注意,浏览器对可以运行的并发 worker 数量有硬性限制。根据我们的经验,3/4 是一个较好的安全最大数量。通常,一个 worker 就足够了。

要释放池及其 worker,请使用以下方法:

import { disposePool } from '@slashd/run' disposePool()

贡献

安装依赖:

npm i

启动监视器:

npm start

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

聊天机器人AI助手热门AI工具AI对话
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多