我正在开发一个应用程序,一种设计方法涉及对instanceof
操作员的极大使用.虽然我知道OO设计通常会试图避免使用instanceof
,但这是一个不同的故事,这个问题纯粹与性能有关.我想知道是否有任何性能影响?是这么快==
吗?
例如,我有一个包含10个子类的基类.在一个获取基类的函数中,我会检查该类是否是子类的实例并执行一些例程.
我想解决它的另一种方法是使用"type id"整数原语,并使用位掩码来表示子类的类别,然后只需对子类"type id"进行掩码比较.表示类别的常量掩码.
被instanceof
莫名其妙地由JVM优化得比较快?我想坚持使用Java,但应用程序的性能至关重要.如果之前一直走在这条路上的人可以提供一些建议,那将会很酷.我是在挑剔太多还是专注于错误的事情来优化?
我正在使用MS SQL Server 2005.与SQL引擎之间有区别
SELECT * FROM MyTable;
Run Code Online (Sandbox Code Playgroud)
和
SELECT ColA, ColB, ColC FROM MyTable;
Run Code Online (Sandbox Code Playgroud)
当ColA,ColB和ColC代表表格中的每一列时?
如果它们是相同的,那么为什么你应该使用第二个呢?我有一个对LINQ很重的项目,我不确定它生成的标准SELECT*是不是很糟糕,或者我应该总是使用.Select()来指定我想要的cols.
编辑:更改"当ColA,ColB和ColC是表格的所有列?" "当ColA,ColB和ColC代表表格中的每一列?" 为清楚起见.
我正在使用新的fetch API在Javascript中编写一个基本应用程序.以下是代码相关部分的基本示例:
function foo(url) {
const options = {};
options.credentials = 'omit';
options.method = 'get';
options.headers = {'Accept': 'text/html'};
options.mode = 'cors';
options.cache = 'default';
options.redirect = 'follow';
options.referrer = 'no-referrer';
options.referrerPolicy = 'no-referrer';
return fetch(url, options);
}
Run Code Online (Sandbox Code Playgroud)
在进行获取请求时,我偶尔会在控制台中看到如下所示的错误:
拒绝加载脚本'<url>',因为它违反了以下内容安全策略指令...
在阅读并了解HTTP/2之后,看起来会出现此消息,因为响应正在推回预加载的脚本.使用devtools,我可以在响应中看到以下标题:
链接:<路径到脚本>; 相对=预载荷; 为=脚本
以下是我的Chrome扩展程序manifest.json文件的相关部分:
{
"content_security_policy": "script-src 'self'; object-src 'self'"
}
Run Code Online (Sandbox Code Playgroud)
以下是Chrome的manifest.json格式的文档,以及内容安全策略如何应用于扩展程序提取的内容:https://developer.chrome.com/extensions/contentSecurityPolicy
我做了一些测试,并且能够确定在获取期间发生此错误消息,而不是在解析响应文本时.没有问题将脚本元素加载到实时DOM中,这一切都发生在获取时.
在我的研究中我无法找到的是如何避免这种行为.看起来急于支持这个伟大的新功能,制作HTTP/2和fetch的人没有考虑我没有获取远程页面以便显示它或其任何相关资源(如css)的用例/图像/脚本.我(应用程序)以后不会使用任何相关资源; 只有资源本身的内容.
在我的使用案例中,这种推送(1)完全浪费了资源,并且(2)现在导致一个非常恼人和压力诱导的消息偶尔出现在控制台中.
话虽如此,这是我希望得到一些帮助的问题:有没有办法向浏览器发信号,使用清单或脚本,我对HTTP/2推送不感兴趣?是否有我可以为获取请求设置的标头告诉Web服务器不响应推送?我可以在我的应用程序清单中使用CSP设置,以某种方式触发不要推送我的响应吗?
我查看了https://w3c.github.io/preload/第3.3节,它没有多大帮助.我看到我可以发送标题Link: </dont/want/to/push/this>; rel=preload; as=script; nopush
.问题是我还不知道响应中会有哪些链接头,我不确定fetch是否允许在初始请求中设置链接头.我想知道我是否可以发送某些类型的请求,可以在响应中看到链接头但是避免它们,然后发送追加所有相应nopush头的后续请求?
这是一个简单的测试用例来重现这个问题:
我在页面上使用jQuery tableSorter插件.
不幸的是,正在排序的表是动态修改的,当我在添加元素后排序时,元素消失,将表恢复到创建tableSorter时的状态.
有什么方法可以强制tableSorter重新扫描页面,以便这些新元素正确排序?
来自https://developers.google.com/web/fundamentals/app-install-banners/#trigger-m68
let deferredPrompt;
window.addEventListener('beforeinstallprompt', (e) => {
e.preventDefault();
// Stash the event so it can be triggered later.
deferredPrompt = e;
});
Run Code Online (Sandbox Code Playgroud)
这段代码很好,但我想稍后在另一个地方触发藏匿事件.为了执行该操作,我需要将事件存储在变量中,而不是存储在其他地方.
我尝试使用对象的序列化/反序列化进行本地存储:
> localStorage.setItem('stashed-event', JSON.stringify(e))
>
> JSON.parse(localStorage.getItem('stashed-event'))
Run Code Online (Sandbox Code Playgroud)
但是这种方法不能按预期工作,因为它只存储键值并丢失所有事件方法.
我有可扩展和可折叠记录的经典表,如果展开显示几个子记录(作为同一父表中的新记录,而不是一些子div /子表).我也在使用tableorter并且非常喜欢它.
问题是tablesorter没有在父记录旁边保留扩展子记录.它将它们分类为顶级.因此,每当表按列排序时,子行最终会遍布整个地方而不是我想要的位置.
有没有人知道对tablesorter或特定配置的良好扩展,使tableorter即使在排序后也能将子行与父行组合在一起?或者我是否必须放弃tableorter以支持其他API或者开始编写我自己的小部件的丑陋过程?我应该避免使用基于CSS的隐藏表的各行来表示折叠行的方法吗?
我正在尝试在打字稿中实现网络自定义元素。我发现自定义元素的生命周期回调如下
connectedCallback()
adoptedCallback()
attributeChangedCallback()
这些回调有打字稿接口吗?我可以使用适当的签名编写这些方法,但我更愿意使用现有的定义。
我正在使用IndexedDB进行测试项目.这是一些示例代码:
var indexedDB = window.indexedDB || window.webkitIndexedDB
||window.mozIndexedDB||window.msIndexedDB;
var request = indexedDB.open("mydb",2),
customerData=[
{ssn:"444-44-4444",name:"Bill",age:35,email:"bill@company.com"},
{ssn:"555-55-5555",name:"Donna",age:32,email:"donna@home.org"}
];
request.onerror = function(event){
};
request.onupgradeneeded = function(event) {
var objectStore = db.createObjectStore("customers",{keyPath:"ssn"});
objectStore.createIndex("name","name",{unique:false});
objectStore.createIndex("email","email",{unique:true});
for(var i in customerData){
objectStore.add(customerData[i]);
}
};
request.onsuccess = function(e) {
};
Run Code Online (Sandbox Code Playgroud)
我真的不明白的是当我的请求对象运行onupgradeneeded
而不是onsuccess
(假设当然没有错误).是不存在对象存储的时候?或者在创建新的db版本时?
谢谢
这与ES6模块在谷歌Chrome扩展开发(意外令牌)中的问题不同,因为它已经过时且已经得到解答.
谷歌发布了一则新闻稿,声称Chrome支持ES6模块.我正在尝试从扩展中加载模块.我可以从普通页面加载模块,但不能从扩展名中加载.
这是html,这是扩展上下文中的页面:
<script src="test.js" type="module"></script>
Run Code Online (Sandbox Code Playgroud)
当我打开页面时,我在控制台中看到以下错误消息:
无法加载模块脚本:服务器使用非JavaScript MIME类型""进行响应.对每个HTML规范的模块脚本强制执行严格的MIME类型检查.
有人有建议吗?这是一个应该向Chrome报告的错误吗?或者它还没有得到支持?我无法找到任何直截了当的解释.
javascript ×6
html5 ×2
indexeddb ×2
jquery ×2
tablesorter ×2
database ×1
es6-modules ×1
events ×1
fetch-api ×1
html ×1
http2 ×1
instanceof ×1
java ×1
linq ×1
linq-to-sql ×1
performance ×1
sql ×1
typescript ×1
web-storage ×1