通常我们执行 JS 代码时,都会用execjs这个库。它的好处是能执行很多类型的 JS 代码,但缺点也相当明显——就是慢!
那该怎么办呢?今天有位大佬建议我试试py_mini_racer库,速度杠杠的。
直接安装即可:
【更新提示】
原来的py-mini-racer由 Sqreen 创建,在停止更新数年后,于 2024 年 3 月由开发者 bpcreech 接手,并迁移至新仓库bpcreech/PyMiniRacer。```bash
# 旧的(已弃用,不建议再使用)pip install py_mini_racer# 新的(活跃维护中)pip install mini-racerPython 中的导入路径保持不变:
frompy_mini_racerimportMiniRacer我们找一段 JS 代码对比一下,就能看出差别了。execjs执行代码就不贴了,网上都是
运行结果:
每次执行大概都是0.0几秒,很慢,在高并发场景的下 这个问题非常致命。
再使用这个库py_mini_racer试一试:
importtimeimportexecjs from py_mini_racerimportMiniRacer js_path=os.path.join("signature.js")ctx=MiniRacer()with open(js_path,"r",encoding="utf-8")as f: jsCode=f.read()ctx.eval(jsCode)if__name__=='__main__':foriinrange(100): start_time=time.time()url="xxxxxxxxxxt/feed?channel_id=3189398957&max_xxxxxx"signature=ctx.call("getSignature", url)print("加密结果:", signature)print("花费时间:", time.time()- start_time)运行结果:
第一次的时候会初始化,花费0.0几秒,它会把代码缓存到内存中,之后每次执行的速度相当的快,只是花费0.00几秒简直堪比纯算法,执行速度比execjs快了近10倍。
所以以后再用担心JS代码执行速度慢了!!!