我正在尝试编写一个使用画布绘制非常大的图像的故障安全程序(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) 我有这个表达式:
y[i] = ( z[i] == a && b || c )
Run Code Online (Sandbox Code Playgroud)
哪个元素(&&,||,==)具有优先权?
你能用括号写它,更好地理解它吗?
谢谢
说我有这个代码:
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定义?对象键是字符串或符号,它们不能只是原始的布尔值.这就是为什么我很困惑.
我发现自己有很多这种模式.我有一个从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)
我正在使用... 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) 我需要从作为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)
它使代码更加污垢和难以理解.
创建一个从中删除元素的新数组是否更容易或更简单?
我需要使用 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
我有一个长期的假设,即深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)
(控制,没有prototype)
result = object1.bar;
Run Code Online (Sandbox Code Playgroud)
(实验,用prototype)
result = object2.bar;
Run Code Online (Sandbox Code Playgroud)
测试1比测试2慢了92.85%,这意味着放置get bar () {}在prototype链中而不是在对象自己的属性中导致属性访问器的速度增加14倍.请参阅Object.create()了解对象的布局是如何不同的.
79,323,722 ops/s±0.34%
1,108,762,737 ops/s±0.15%
使用谷歌浏览器63.0.3239.132(官方版本)(64位)在Windows …
我\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\ntype DateSince = "Last_Day" | "Last_Week" | "Last_Month"\nRun Code Online (Sandbox Code Playgroud)\n\n然后我得到这样的类型提示:
\n\n\n\n如果该值不是这 3 个字符串,则会出现红色波浪线错误。从技术上讲,我的值仍然是一个字符串,这是我需要在 JSON API 请求和响应中使用的值。
\n\n我还没有找到在 C# 中做到这一点的好方法。在 C# 中是否可以相对轻松地做到这一点?
\n\n我理想的解决方案是让我将自定义类型分配给变量,而不是使用字符串。这样我就不必记住可能的字符串值。
\n我需要在 Node REPL 中重新定义 const,因为我想重新运行历史记录中的一些函数。我收到此错误:
Uncaught SyntaxError: Identifier '_tareas' has already been declared
Run Code Online (Sandbox Code Playgroud)
有没有办法重新定义这个常量,而不必关闭 REPL 并再次打开它?
javascript ×7
node.js ×2
prototype ×2
reactjs ×2
arrays ×1
blob ×1
boolean ×1
buffer ×1
c# ×1
ecmascript-6 ×1
encoding ×1
enums ×1
getter ×1
immutability ×1
java ×1
optimization ×1
performance ×1
string ×1
tostring ×1
types ×1