我的 TypeScript 项目已经有一段时间了,而且相当大。最近编译时性能明显变差了。我认为很可能是我在某处包含的一些“整洁”打字技巧导致了这种情况。
不幸的是,这是一个大型项目,并且包含许多其他大型 TypeScript 依赖项,因此很难知道确切的根本原因。
在这种情况下,是否有任何工具可以调试 TS 编译器类型检查性能?例如,查看哪些文件/类型花费 TypeScript 最多的时间来编译。
CanIUse的浏览器统计信息表显示Chrome版本29占浏览器市场的0.68%,远远超过其他同类版本的版本.例如,版本28和30都有0.03%,使得版本29几乎是23倍受欢迎.在他们的统计数据上,它实际上比其他版本的Chrome更受欢迎,最高可达48(1月发布),尽管现在差不多已有3年了.
相比之下,0.68%的使用率意味着这个过时的Chrome版本比当前和以前版本的Opera,iOS的倒数第二个版本以及IE 9或10更受欢迎.
快速浏览其他来源,例如Clicky(其中仅包括最近Chrome和Chrome v29的版本统计信息)和W3Counter(实际上将其提高到2%)似乎表明这不仅仅是本地差异.
我似乎无法从谷歌发行说明或维基百科的发布细节中找到任何特别的东西.
这是从哪里来的?为什么有这么多人使用这个特定版本的Chrome?到底是怎么回事?
如果我的项目使用的是现在已经过时的依赖项,我想在某处发出大声警告(可能我可能会将其挂钩到我们的构建中,因此使用某些过时的依赖项的构建会自动失败并且无法部署).
如果可能的话,我只想对我们其他内部项目的依赖开始这样做,这样如果我发布新版本的共享内部库,那么使用该库的所有其他项目都会被大声通知/需要更新到新的,但所以我们不必在每次升级时立即升级到最新版本的实体框架.
有没有办法从包管理器控制台或MSBuild任务轻松检查我的NuGet依赖项的全部或部分是最新的?
我正在与 Lodash 的自定义比较函数进行斗争_.isEqualWith
。我想要一个这样的函数:
const comparisonFunc = /* ...TBC... */
// Should be true:
_.isEqualWith({ a: undefined }, { }, comparisonFunc);
// Should still be false, as normal:
_.isEqualWith({ a: undefined }, { a: 123 }, comparisonFunc);
// Should still be false, as normal:
_.isEqualWith([undefined], [ ], comparisonFunc);
Run Code Online (Sandbox Code Playgroud)
即,对于比较中的任何对象(递归地),设置为 的属性undefined
应被视为不存在。
有没有办法在JavaScript中更改根对象?
例如,在浏览器中,根对象是"窗口".所以
X = 5;
console.log(Y);
Run Code Online (Sandbox Code Playgroud)
是相同的:
window.X = 5;
console.log(window.Y);
Run Code Online (Sandbox Code Playgroud)
我现在要做的是更改此根对象,所以当我执行以下操作时:
X = 6;
Run Code Online (Sandbox Code Playgroud)
我需要这个的原因:
在Node.js应用程序中,程序的每个部分都可以访问全局对象.这是一个大问题,因为Node.js网络服务器执行的每个脚本都可以向其添加新变量.他们将在那里,直到网络服务器重新启动.我想通过更改全局对象来避免这种情况.
更新
我测试了以下代码,得到了一个非常有趣的结果.您对以下代码的期望是什么?
var X = {A:"a",B:"b"};
with(X){
A = 5;
C = 7;
}
for(a in X){
console.log(a+" is "+X[a]);
}
/*
Expected Console Output:
A is 5
B is b
C is 7
Real Console Output:
A is 5;
B is b;
*/
Run Code Online (Sandbox Code Playgroud)
有没有办法像我预期的那样获得输出?
更新
我现在用以下代码测试模块系统.
//program.js
var t = require("./module.js");
t.Test();
console.log(A);
//module.js …
Run Code Online (Sandbox Code Playgroud) 我有一个 bash 脚本,我想从中访问 /dev/tty,但前提是它可用。
当它不可用时(在我的例子中:在 GitHub Actions 中运行我的脚本时),当我尝试访问它时,我会得到/dev/tty: No such device or address
,并且我会尝试提前检测到这一点以避免错误并提供后备行为。
为此,我需要一个 bash 测试来清楚地检测这种情况,并且可以跨平台可靠地工作(即不使用该命令,该命令在 Mac 上tty
有问题)。
我目前正在使用[[ -e "/dev/tty" ]]
它不起作用 - 即使在 GitHub Actions 上它似乎也会返回 true,其中似乎 /dev/tty 存在但访问它会失败。我应该用什么来代替?
我正在嵌套自定义元素.我想让我的父自定义元素使用其子自定义元素原型中的方法和属性.例如
<script>
var ChildElement = Object.create(HTMLElement.prototype);
ChildElement.getName = function () {
return "Bob";
}
document.registerElement("child-element", {
prototype: ChildElement
});
var ParentElement = Object.create(HTMLElement.prototype);
ParentElement.createdCallback = function () {
var self = this;
setTimeout(function () {
// This logs 'Bob', correctly
console.log(self.childNodes[0].getName());
}, 0);
// This explodes - getName is not defined.
console.log(self.childNodes[0].getName());
};
document.registerElement("parent-element", {
prototype: ParentElement
});
</script>
<parent-element><child-element></child-element></parent-element>
Run Code Online (Sandbox Code Playgroud)
如内联所述,父级无法读取子元素原型上定义的任何内容.它可以,如果它立即触发一个setTimeout; 它只需要等到这个元素的子节点也被设置好了.
看起来这是因为元素创建过程中的回调顺序,我认为是这样的:
在这一点上,createdCallback触发是有道理的,但据我所知,当你所有的孩子都被创建时,根本没有可用的回调.我认为这意味着不可能在使用子元素原型的创建上做任何事情,而不使用setTimeout等待整个页面完成渲染.
是否有任何可以从父级监听的回调或事件,只有在设置了所有子节点的原型后才会触发?是否有一种不同的方法可以让你使用这样的结构?除了触发setTimeout之外,还有什么可以做的吗?
我认为自定义元素的设计允许使用其他元素内容进行参数化,并且在该内容中有效地不支持自定义元素是非常令人惊讶的.
可以说,这可以被认为是在创建custom-tag时访问子节点时未定义的Prototype的副本.然而,这个问题的措辞很差,破坏的例子,唯一的答案似乎实际上是一个实现错误,而不是解决方案(或者至少,它不再是当前的浏览器行为)
我正在寻找与 net.rim.device.api.system.ApplicationManager.getVisibleApplications() 对应的东西,但包括可能没有/没有 UI 的应用程序。有任何想法吗?
欢迎使用不合理复杂的变通解决方案,我慢慢地更加确定没有一个简单的单一调用来做到这一点......
我有一个特定的目标类型(在运行时决定),以及一个可迭代的类,我正在与它进行比较.我正在尝试编写一个检查类的泛型参数的方法,以查看它是否是可以迭代我的目标类型的子类.例子:
Class<?> X = SomeObject.class;
matches(X, new ArrayList<SomeObject>()) -> true
matches(X, new ArrayList<SubclassOfSomeObject>()) -> true
matches(X, new ArrayList<SomeOtherObject>()) -> false
matches(X, new ArrayList()) -> true (I think?)
matches(X, new Iterable<SomeObject>() { ... }) -> true
matches(X, new ListOfSomeObjects()) -> true
(where ListOfSomeObjects extends Iterable<SomeObject>)
Run Code Online (Sandbox Code Playgroud) 从 node.js 中,这按预期工作,发送了 POST 响应(正如我使用 httpToolkit 验证的那样)
% node
> const axios = require('axios')
> var r = (async () => { const x = await axios.post('http://example.com/v1/secret/data/foo/bar/baz',{data: {foo: 42}},{headers: {'X-Special-Token': 'DATA'}}); return true;})().then(console.log)
undefined
> true
Run Code Online (Sandbox Code Playgroud)
但是,然后在测试中执行相同的操作jest
,axios
首先发送 OPTIONS 请求。我正在运行的服务无法处理该问题(不是 example.com)
const axios = require('axios');
describe('Simple Post', () => {
test('POST', async () => {
// Axios HERE seems to send an OPTIONS request first...
const x = await axios.post('http://example.com',
{data: {foo: 42}},
{headers: {'X-Special-Token': 'DATA'}});
expect(x.status).toBe(200); …
Run Code Online (Sandbox Code Playgroud) javascript ×2
axios ×1
bash ×1
blackberry ×1
browser ×1
c# ×1
collections ×1
compilation ×1
equality ×1
generics ×1
html ×1
html5 ×1
http-toolkit ×1
java ×1
jde ×1
jestjs ×1
linux ×1
lodash ×1
macos ×1
mobile ×1
msbuild ×1
nuget ×1
performance ×1
profiling ×1
prototype ×1
reflection ×1
shell ×1
tty ×1
typescript ×1