小编Dav*_*rds的帖子

为什么预计算sin(x)*比在Javascript中使用Math.sin()慢?

我在JavaScript中发现了一个有趣的异常现象.其中心是我尝试通过预先计算sin(x)和cos(x)来加速三角变换计算,并简单地引用预先计算的值.

直觉上,人们会期望预计算比每次计算Math.sin()和Math.cos()函数更快.特别是如果你的应用程序设计只对trig函数的参数使用一组有限的值(在我的例子中,在[0°,360°]区间内的整数度数,这对我的目的来说已经足够了).

所以,我做了一点测试.在预先计算sin(x)和cos(x)的值,将它们存储在360元素数组中之后,我编写了一个简短的测试函数,通过简单的测试HTML页面中的按钮激活,来比较两者的速度.方法.一个循环简单地将值乘以预先计算的数组元素值,而另一个循环将值乘以Math.sin().

我的期望是预先计算的循环明显快于涉及对trig函数的函数调用的循环.令我惊讶的是,预先计算的循环速度较慢.

这是我写的测试函数:

function MyTest()
{
var ITERATION_COUNT = 1000000;

var angle = Math.floor(Math.random() * 360);

var test1 = 200 * sinArray[angle];

var test2 = 200 * cosArray[angle];

var ref = document.getElementById("Output1");

var outData = "Test 1 : " + test1.toString().trim() + "<br><br>";
outData += "Test 2 : "+test2.toString().trim() + "<br><br>";

var time1 = new Date();     //Time at the start of the test

for (var i=0; i<ITERATION_COUNT; i++)
{
    var angle = Math.floor(Math.random() * 360);
    var …
Run Code Online (Sandbox Code Playgroud)

javascript arrays performance trigonometry

6
推荐指数
1
解决办法
1028
查看次数

为什么将 ProgressEvent 对象传递给 JavaScript AJAX 错误事件处理程序?

这确实让我很困惑。

我有一段监听 AJAX 事件的代码,所有这些事件都按计划运行,但有一个让我觉得奇怪的怪癖。也就是说,如果我将错误事件侦听器附加到 AJAX XMLHttpRequest 对象,并且在该对象上触发错误事件,则错误事件处理程序会收到 ProgressEvent 对象,该对象不包含任何有用的错误信息。

我的直觉告诉我,应该发送到错误事件处理程序的是一个 ErrorEvent 对象。但这并没有发生。

考虑到这种奇怪的现象,我如何检测实际发生的 AJAX 错误?我还想问,从不提供错误信息的错误事件处理程序有什么意义?

如果存在某种将 ProgressEvent 对象传递给 AJAX 错误事件处理程序的基本原理,那么我也非常希望对此进行解释。

javascript ajax

5
推荐指数
1
解决办法
1万
查看次数

使用 VM 模块运行 Node.js 脚本:“ReferenceError: require is not a function”

我正在编写自己的自定义 node.js 服务器。它现在处理静态页面、AJAX GET、POST 和 OPTIONS 请求(后者用于 CORS),但我知道我为运行服务器端 GET 和 POST 脚本选择的方法不是最佳的 - 官方 node.js文档指出,启动大量子 node.js 进程是一个坏主意,因为它是一种资源匮乏的方法。它有效,但我知道可能有更好的方法来实现相同的结果。

所以,我来到了 VM 模块。我的第一个想法是这将解决机器与子进程混乱的问题,并使我的服务器更具可扩展性。

有一个小问题。我的服务器端脚本,对于诸如目录列表和将结果发送回浏览器之类的任务,从几个require语句开始以加载所需的模块。

最终编写了读取脚本文件的代码并将其传递给 vm.Script() 后,我现在遇到了一个错误:

“参考错误:要求不是一个函数”

我后来了解到,这样做的原因是 VM 为脚本启动了一个裸 V8 执行环境,而不是一个独立的 node.js 执行环境。为了让我的想法奏效,我需要 VM 为我提供一个单独的沙盒 node.js 执行环境。我如何实现这一目标?

我的初步研究告诉我,我需要提供虚拟执行环境与node.js的全局自身的单独副本,以便需要发挥预期的作用。我刚才提供的理解是否正确?如果是这样,我需要采取哪些步骤来执行此任务?

virtual-machine require node.js

0
推荐指数
1
解决办法
2782
查看次数