小编Jac*_*fin的帖子

`await`比Chrome应该更慢

在测试性能时await,我发现了一个令人困惑的谜团.我在控制台中分别运行了以下每个代码段,以过滤掉吸虫,并获取相关数据的平均时间.

(function(console){
    "use strict";
    console.time();
    var O = [1];
    for (var i=0; i !== 107000; ++i) {
        const O_0 = O[0];
        O[0] = O_0;
    }
    console.timeEnd();
})(console);
Run Code Online (Sandbox Code Playgroud)

导致: default: 5.322021484375ms

接下来,我尝试添加使它变得async虚假

(async function(console){
    "use strict";
    console.time();
    var O = [1];
    for (var i=0; i !== 107000; ++i) {
        const O_0 = O[0];
        O[0] = O_0;
    }
    console.timeEnd();
})(console);
Run Code Online (Sandbox Code Playgroud)

太好了!Chrome知道它的东西.开销很低:default: 8.712890625ms

接下来,我尝试添加await.

(async function(console){
    "use strict";
    console.time();
    var O = [1];
    for (var i=0; …
Run Code Online (Sandbox Code Playgroud)

javascript console performance google-chrome async-await

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

逆波兰表示法中的变长运算符(后缀)

背景:在传统的 Reverse Polish Notation 中,所有的操作符都必须有固定的长度,这使得 RPN 可以很容易地被代码评估和操作,因为每个标记、表达式和子表达式都是“自包含”的,以至于人们可以盲目地将yin替换x?y?*y?1?+to get x?y?1?+?*,这是另一个有效的表达式,它完全符合您的要求。这是一个带有命名变量支持的简单 RPN 计算器的交互式演示。请注意,演示试图展示算法的要点;它们与生产代码无关或不代表生产代码。

var rpn = prompt("Please enter RPN string, where each token is " +
  "separated by a space", "x 1 x + * 2 /").trim().split(/\s+/);

var stack = [], variables = [], values = [];
for (let i = 0, len = rpn.length|0; i < len; i=i+1|0) {
    if (/^\d*(\.\d*)?$/.test(rpn[i]) && rpn[i] !== "") {
        stack.push( rpn[i] );
    } else if (/^[a-z]$/i.test(rpn[i])) …
Run Code Online (Sandbox Code Playgroud)

algorithm rpn variadic-functions variable-length postfix-notation

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

Chrome 中未触发 IndexedDB onversionchange 事件

我正在 Firefox 和 Chrome 中使用 html5 规范的 IndexedDB API。

有些东西没有按预期工作,我想在这里分享它,因为我不知道这是我的错还是浏览器错误。

根据API ,当您打开与本地数据库的连接并且使用的版本号大于数据库版本号时,会触发一个名为onversionchange的事件。我的问题是这个事件在 Firefox 中被触发,但在 Chrome 中却没有。

一些尝试多种模式的示例代码:

var db;
var DB_VERSION = 5;
var openRequest = indexedDB.open("test_db", DB_VERSION);
openRequest.onsuccess = function(event) {
    db = openRequest.result;
};
openRequest.onversionchange = function(event) {
    console.log("This is the place where I can change db structure");
};
openRequest.onupgradeneeded = function(event) {
    console.log("This is the place where I can change db structure");
};
Run Code Online (Sandbox Code Playgroud)

即使我更改版本号,onversionchage 事件也不会被触发。

更新 正如ebidel所回答的那样,Chrome 实现不遵循当前规范,因此,为了拥有跨浏览器客户端代码,我们需要处理两种情况:onversionchange事件和database.version手动比较。 …

html google-chrome indexeddb

4
推荐指数
1
解决办法
1149
查看次数

如何明确要求最终用户不要删除本地存储数据?

我正在使用angularJS开发应用程序。我的应用程序要求将数据保存在本地。因此,我正在使用HTML5本地存储。

HTML5本地存储的问题在于,当用户清除浏览数据时,所有数据都将丢失,我们需要避免这种情况。我意识到,由于数据存储在用户计算机上,因此无法100%保护数据。

本质上,是否有一种方法可以明确告诉浏览器该数据是特殊数据,并且在清除其他站点的数据时不应清除这些数据?这必须是一种明确鼓励用户不要从该特定站点删除本地数据的方法。或者,或者,我们需要合并本地数据库。哪个本地数据库将是最佳选择?

javascript html5 local-storage indexeddb angularjs

2
推荐指数
1
解决办法
1486
查看次数