小编Pat*_*rts的帖子

Blob持续多久了?

我正在尝试编写一个使用画布绘制非常大的图像的故障安全程序(60 MB可能是较高的范围,而10 MB是较低的范围).我很久以前就发现调用canvas的同步函数toDataURL通常会导致页面在浏览器中崩溃,所以我调整了程序,使用toBlob填充程序来实现跨浏览器的兼容性.我的问题是:使用该URL.createObjectURL(blob)方法的Blob URL 持续多长时间?

我想知道是否有一种方法可以缓存Blob URL,这将允许它持续超出浏览器会话,以防有人想要在一个点上渲染部分图像,关闭浏览器,然后返回并稍后完成将Blob URL再次读入画布并从其停止的位置恢复.我注意到这个可选的autoRevoke参数可能是我正在寻找的,但我想确认我正在尝试做的事实际上是可能的.除非涉及不同的解决方案,否则您的答案中不需要代码示例,如果可以使用此方法或其他方式使Blob URL最后超出会话,则我只需要是或否.(如果由于某种原因页面崩溃并且它也像"恢复会话"选项那样,这也会很方便.)

我在考虑这样的事情:

function saveCache() {
  var canvas = $("#canvas")[0];
  canvas.toBlob(function (blob) {
    /*if I understand correctly, this prevents it from unloading
      automatically after one asynchronous callback*/
    var blobURL = URL.createObjectURL(blob, {autoRevoke: false});
    localStorage.setItem("cache", blobURL);
  });
}

//assume that this might be a new browser session

function loadCache() {
  var url = localStorage.getItem("cache");
  if(typeof url=="string") {
    var img = new Image();
    img.onload = function () …
Run Code Online (Sandbox Code Playgroud)

javascript blob persistent-storage

13
推荐指数
1
解决办法
6145
查看次数

Java:哪个更优先:|| 或&&或==

我有这个表达式:

y[i] = ( z[i] == a && b || c )
Run Code Online (Sandbox Code Playgroud)

哪个元素(&&,||,==)具有优先权?

你能用括号写它,更好地理解它吗?

谢谢

java operator-precedence

11
推荐指数
2
解决办法
9090
查看次数

为什么Boolean原语不能调用原型toString()?

说我有这个代码:

Boolean.prototype.toString = function toString() {
  return this.valueOf() ? '1' : '0';
};

var object = {
  true: 'true',
  false: 'false',
  1: '1',
  0: '0'
};

// "true" - this doesn't work
console.log('primitive', object[true]);
// "1" - but these do
console.log('primitive.toString()', object[true.toString()]);
console.log('instance', object[new Boolean(true)]);
Run Code Online (Sandbox Code Playgroud)

为什么原语不使用类的toString定义?对象键是字符串或符号,它们不能只是原始的布尔值.这就是为什么我很困惑.

javascript boolean prototype tostring prototype-programming

10
推荐指数
1
解决办法
612
查看次数

迭代对象数组并更改每个对象中的一个属性

我发现自己有很多这种模式.我有一个从api返回的对象数组,我需要操作所有对象中的一个属性.

有没有办法使用ES6/Babel或Typescript来使该模式更具说明性?

寻找一些整齐的解构技巧或类似的东西.

const data = [{ foo: 1, bar: 2}, 
              { foo: 2, bar: 3},
              { foo: 3, bar: 4}];

const increment = a => a + 1;

// Here is my typical pattern
const result = data.map(o => {
    o.foo = increment(o.foo);
    return o;
})

console.log(result);
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 spread-syntax

10
推荐指数
2
解决办法
6434
查看次数

在一行代码中用扩展语法替换数组条目?

我正在使用... spread语法替换react状态数组中的项.这有效:

let newImages = [...this.state.images]
newImages[4] = updatedImage
this.setState({images:newImages})
Run Code Online (Sandbox Code Playgroud)

是否可以在一行代码中执行此操作?像这样的东西?(这显然不起作用......)

this.setState({images: [...this.state.images, [4]:updatedImage})
Run Code Online (Sandbox Code Playgroud)

javascript reactjs spread-syntax

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

从JS中不可变数组中删除元素的最简洁方法是什么?

我需要从作为ReactComponent 状态的数组中删除一个元素.这意味着它是一个不可变的对象.

使用扩展语法很容易添加元素.

    return {
        ...state,
        locations: [...state.locations, {}]
    };
Run Code Online (Sandbox Code Playgroud)

删除有点棘手.我需要使用一个中间对象.

        var l = [...state.locations]
        l.splice(index, 1)
        return {
            ...state,
            locations: l
        }
Run Code Online (Sandbox Code Playgroud)

它使代码更加污垢和难以理解.

创建一个从中删除元素的新数组是否更容易或更简单?

javascript arrays immutability reactjs spread-syntax

10
推荐指数
1
解决办法
5624
查看次数

nodejs中的十六进制到字符串和字符串到十六进制的转换

我需要使用 nodejs 8 将数据转换为字符串到十六进制,然后再从十六进制转换为字符串

我在从十六进制解码为字符串时遇到问题

要转换的代码 string into hex

function stringToHex(str)
{
    const buf = Buffer.from(str, 'utf8');
    return buf.toString('hex');
}
Run Code Online (Sandbox Code Playgroud)

要转换的代码 hex into string

function hexToString(str)
{
    const buf = new Buffer(str, 'hex');
    return buf.toString('utf8');
}
Run Code Online (Sandbox Code Playgroud)

我有字符串 dailyfile.host

编码输出:3162316637526b62784a5a37697a45796c656d465643747a4a505a6f59774641534c75714733544b4446553d

解码输出:1b1f7RkbxJZ7izEylemFVCtzJPZoYwFASLuqG3TKDFU=

解码所需的输出:dailyfile.host

string encoding buffer node.js

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

在这种情况下,扩展原型链如何提高性能?

我有一个长期的假设,即深prototype链会导致物业访问者的性能下降.我试图解释一下隐藏吸气器或添加原型对象时,快速基准测试结果导致了与我期望的相反的结果.

这里发生了什么?我是否遗漏了一些明显的东西,或者这是否彻底证明了我(和其他人)关于prototype链条上属性访问者性能的假设是错误的?

建立

const object1 = {
  foo: 'Hello, World!',
  get bar () { return this.foo }
};

const object2 = Object.assign(Object.create({
  get bar () { return this.foo }
}), {
  foo: 'Hello, World!'
});

let result;
Run Code Online (Sandbox Code Playgroud)

测试1

(控制,没有prototype)

result = object1.bar;
Run Code Online (Sandbox Code Playgroud)

测试2

(实验,用prototype)

result = object2.bar;
Run Code Online (Sandbox Code Playgroud)

结果

测试1比测试2慢了92.85%,这意味着放置get bar () {}prototype链中而不是在对象自己的属性中导致属性访问器的速度增加14倍.请参阅Object.create()了解对象的布局是如何不同的.

测试1

79,323,722 ops/s±0.34%

测试2

1,108,762,737 ops/s±0.15%

使用谷歌浏览器63.0.3239.132(官方版本)(64位)在Windows …

javascript getter optimization performance prototype

9
推荐指数
1
解决办法
204
查看次数

如何在 C# 中创建类似 String Literal Union 类型的 TypeScript

我\xe2\x80\x99m 使用 C# 使用一些 JSON 和 API 进行工作。我想知道如何处理这样的事情。

\n\n

其中一个 JSON 值是一个字符串,可以是以下值之一: \xe2\x80\x9cLast_Day\xe2\x80\x9d、\xe2\x80\x9cLast_Week\xe2\x80\x9d、\xe2\x80\x9cLast_Month\ xe2\x80\x9d。

\n\n

在 TypeScript 中我可以这样做:

\n\n
type DateSince = "Last_Day" | "Last_Week" | "Last_Month"\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我得到这样的类型提示:

\n\n

VS Code 类型提示建议 3 个可能的值。

\n\n

如果该值不是这 3 个字符串,则会出现红色波浪线错误。从技术上讲,我的值仍然是一个字符串,这是我需要在 JSON API 请求和响应中使用的值。

\n\n

我还没有找到在 C# 中做到这一点的好方法。在 C# 中是否可以相对轻松地做到这一点?

\n\n

我理想的解决方案是让我将自定义类型分配给变量,而不是使用字符串。这样我就不必记住可能的字符串值。

\n

c# enums types

9
推荐指数
1
解决办法
3517
查看次数

如何在节点 REPL 中重新定义 const?

我需要在 Node REPL 中重新定义 const,因为我想重新运行历史记录中的一些函数。我收到此错误:

Uncaught SyntaxError: Identifier '_tareas' has already been declared
Run Code Online (Sandbox Code Playgroud)

有没有办法重新定义这个常量,而不必关闭 REPL 并再次打开它?

javascript node.js read-eval-print-loop

9
推荐指数
0
解决办法
1177
查看次数