最初问:Node.js 4.x分支与LTS(长期支持)和5.x分支(列为稳定)有什么区别?
但这与理解6.x和7.x以及将来8.x和9.x之间的差异同样重要
一般来说,我总是倾向于最新版本的功能和性能(因为我现在做了很多ES6/ES7).是否有关于"稳定"分支的生产准备情况的信息?
花在C之类的语言上的JavaScript开发人员经常会错过使用某些类型的内省的能力,比如记录行号,以及调用当前方法的方法.好吧,如果您使用的是V8(Chrome,Node.js),您可以使用以下内容.
此问题似乎只影响 Chrome/V8,在 Firefox 或其他浏览器中可能无法重现。总之,如果在其他任何地方使用新回调调用函数,则函数回调的执行时间会增加一个数量级或更多。
test(callback)任意多次调用都按预期工作,但是一旦调用test(differentCallback),test无论提供什么回调,函数的执行时间都会显着增加(即,另一个调用test(callback)也会受到影响)。
此示例已更新为使用参数,以免优化为空循环。回调参数a和b相加并添加到total记录的 中。
function test(callback) {
let start = performance.now(),
total = 0;
// add callback result to total
for (let i = 0; i < 1e6; i++)
total += callback(i, i + 1);
console.log(`took ${(performance.now() - start).toFixed(2)}ms | total: ${total}`);
}
let callback1 = (a, b) => a + b,
callback2 = (a, b) => a + b;
console.log('FIRST …Run Code Online (Sandbox Code Playgroud)我想使用for each ... inNode.js(v0.4.11).
我这样使用它:
var conf = {
index: {
path: {
first: "index.html",
pattern: "index/{num}.html"
},
template: "index.tpl",
limit: 8
},
feed: {
path: "feed.xml",
template: "atom.tpl",
limit: 8
}
}
for each (var index in conf) {
console.log(index.path);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
for each (var index in conf) {
^^^^
node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
SyntaxError: Unexpected identifier
at Module._compile (module.js:397:25)
at Object..js (module.js:408:10)
at Module.load (module.js:334:31)
at Function._load …Run Code Online (Sandbox Code Playgroud) 我现在对JavaScript引擎感到困惑.我知道V8是一个大问题,因为它将JavaScript编译为本机代码.
然后我开始阅读Mozilla SpiderMonkey,据我所知,它是用C语言编写的,可以编译JavaScript.那么这与V8有什么不同呢?如果这是真的,为什么Firefox不这样做呢?
最后,Rhino是否真的将JavaScript编译为Java字节代码,以便您获得Java的所有速度优势?如果没有,为什么人们在桌面上编写脚本时不能运行V8?
自Dreamhost几周前升级服务器以来,我的网站已被破坏.我一直在撕扯我的头发试图修复它并取得了一些进展,但我坚持希望最后的问题.
我在Ruby 1.8.7上使用Rails 3.1.1,并从PhusionPassenger获得一个'Ruby(Rack)应用程序无法启动错误'.它声明它'找不到JavaScript运行时.有关可用运行时的列表,请参阅https://github.com/sstephenson/execjs.(ExecJS :: RuntimeUnavailable)".在Dreamhost的维基上搜索这个已经建议安装'therubyracer'宝石的解决方案.
所以我使用建议的gem更新了我的gemfile,如下所示:
gem'therubyracer','〜> 0.9.9'
编辑:我也尝试添加到文件:
gem'therubyracer',: platforms =>:ruby
但它并没有什么不同.
然后捆绑安装在我的Macbook(运行OS X 10.5.8)上,没有任何障碍.但是,当我运行'cap deploy'来放置Dreamhost时,这会失败; 当我尝试安装therubyracer依赖的libv8时,我看到一个错误.
任何人都知道如何正确安装或任何其他工作解决方案?
可根据要求提供任何其他信息.
终端的完整错误反馈:
- 执行"cd /home/futureproof/abunchofletters.co.uk/releases/20111118003703&& bundle install --gemfile /home/futureproof/abunchofletters.co.uk/releases/20111118003703/Gemfile --path /home/futureproof/.gems/捆绑 - 部署 - 安静 - 没有开发测试"服务器:["abunchofletters.co.uk"] [abunchofletters.co.uk]执行命令**[out :: abunchofletters.co.uk]不幸的是,一个致命的错误已经发生了.请通过https://github.com/carlhuda/bundler/issues向Bundler问题跟踪器报告此错误, 以便我们对其进行修复.谢谢!**[out :: abunchofletters.co.uk] /usr/lib/ruby/1.8/rubygems/installer.rb:483:in
build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError) ** [out :: abunchofletters.co.uk] ** [out :: abunchofletters.co.uk] /usr/bin/ruby1.8 extconf.rb ** [out :: abunchofletters.co.uk] *** extconf.rb failed *** ** [out :: abunchofletters.co.uk] Could not …
编辑:因为chrome已经更新了浏览器 - 这个问题是多余的,因为他们修复了内部错误,这意味着不再出现此问题.
我有一个固定在画布中心的圆圈动画.
圆越大,运动越不稳定.但不仅如此,对我来说至少在Chrome到Firefox方面要差得多.
数学在这个函数中完成:
function update(deltaTime){
var centerX = canvas.width/2;
var centerY = canvas.height/2;
i.currentAngle = (i.currentAngle || 0) + (deltaTime/1000 * i.rotationSpeed);
if(i.currentAngle>2*Math.PI){
i.currentAngle-=2*Math.PI;
}
i.x = centerX + (i.radius*i.factor) * Math.cos(i.currentAngle);
i.y = centerY + (i.radius*i.factor) * Math.sin(i.currentAngle);
}
Run Code Online (Sandbox Code Playgroud)
这是工作示例中的代码:
Chrome输出:

Firefox输出:

Firefox似乎最接近我的目标,但Chrome只是古怪.
为什么我会得到这样不同的结果?我应该提到我已经问了几个人他们看到了什么,每个人都看到了不同的不准确性.
也许不是因为调用很慢,而是查找; 我不确定,但这是一个例子:
var foo = {};
foo.fn = function() {};
var bar = {};
bar.fn = function() {};
console.time('t');
for (var i = 0; i < 100000000; i++) {
foo.fn();
}
console.timeEnd('t');
Run Code Online (Sandbox Code Playgroud)
在win8.1上测试过
现在这里是有趣的部分,如果我bar.fn改为bar.somethingelse:
最近v8出了什么问题?是什么导致这个?
我正在练习从Java执行javascript.Rhino在桌面上运行得非常好,但是必须回到Android上的(缓慢)解释模式(由于dalvik无法执行Rhino JIT编译的Java字节码).
Android有内置的V8 javascript引擎,通过JNI内部访问,应该提供比Rhino更好的性能; 但是,我能找到访问它的唯一方法是间接通过WebView.
不幸的是,WebView需要一个Context,并且与NPE一起使用空上下文崩溃,所以我甚至无法实例化一个虚拟WebView来执行代码并返回结果.我的练习的本质并不能让我为WebView提供一个Context,所以我希望也许有些东西我会忽略.
其中有几个V8Thread并行运行,所以我的布局中添加一个WebView并隐藏它并不是真的可行(据我所知),因为我不相信单个WebView可以在多个线程中执行函数.
private class V8Thread extends Thread
{
private WebView webView;
private String source;
private double pi;
private int i, j;
public V8Thread(int i, int j)
{
pi = 0.0;
this.i = i;
this.j = j;
source = "";
try {
InputStreamReader isReader = new InputStreamReader(assetManager.open("pi.js"));
int blah = isReader.read();
while (blah != -1)
{
source += (char)blah;
blah = isReader.read();
}
webView = new WebView(null);
webView.loadData(source, "text/html", "utf-8");
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(this, "V8Thread");
} catch (IOException …Run Code Online (Sandbox Code Playgroud) 我问这个问题是因为我和我的同事对编码风格有争议,因为他更喜欢箭头功能声明:
const sum = (a, b) => a + b;
Run Code Online (Sandbox Code Playgroud)
而且我更喜欢旧式的独立功能声明:
function sum(a, b) {
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
我的观点是旧式代码更具可读性,您可以更清楚地区分函数和变量声明.他的观点是带箭头功能的代码运行得更快.
当您使用旧式独立函数声明而不是箭头函数时,您是否了解实际性能惩罚(在第8版中)?这种处罚真的存在吗?
javascript ×10
v8 ×10
node.js ×5
spidermonkey ×2
android ×1
chromium ×1
dreamhost ×1
foreach ×1
lts ×1
math ×1
performance ×1
rhino ×1
version ×1