小编Dan*_*iel的帖子

使用 eslint 的 Angular 项目超级慢

我有一个由 590 个 TypeScript 文件组成的 Angular12 项目。当我这样做时ng lint,它会运行 TSLint 并在大约 5 秒内完成。尽管如此,我尝试按照 Angular官方视频中的说明升级到 eslint ,现在ng lint需要 10 多分钟(实际上我没有让该过程完成,我在 10 分钟处停止了)。

我尝试隔离问题以了解原因是否是ng这样,eslint因此我全局安装了 eslint,npm i -g eslint并使用单个文件的计时信息运行它:

time TIMING=1 eslint /home/user/my-file.ts
Run Code Online (Sandbox Code Playgroud)

即使是这个单个文件也需要 2 分钟以上。奇怪的是,eslint报告每条规则只花了几毫秒,而 Linux 却说花了 148 秒(这是准确的,花了 2 分钟多):

Rule                                        | Time (ms) | Relative
:-------------------------------------------|----------:|--------:
@angular-eslint/no-conflicting-lifecycle    |     0.342 |    35.9%
@angular-eslint/no-input-rename             |     0.163 |    17.1%
@angular-eslint/template/banana-in-box      |     0.161 |    16.9%
@angular-eslint/no-output-rename            |     0.103 |    10.9%
@angular-eslint/component-class-suffix …
Run Code Online (Sandbox Code Playgroud)

eslint angular-cli typescript-eslint

23
推荐指数
2
解决办法
8527
查看次数

带有正则表达式的赛普拉斯“have.attr”

在 Cypress 中,我可以通过像这样的精确文本来匹配属性的值:

cy.get("my-element")
  .should("have.attr", "title", "Exact title")
Run Code Online (Sandbox Code Playgroud)

但是,有没有办法通过子字符串或正则表达式来匹配属性的值?就像是:

cy.get("my-element")
  .should("have.attr", "title", /Partial title/)
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我拥有的最好的:

cy.get("my-element")
  .should("have.attr", "title")
  .then(title => expect(title).to.match(/Partial title/));
Run Code Online (Sandbox Code Playgroud)

cypress

12
推荐指数
1
解决办法
5894
查看次数

为什么“供应商块”只能用于开发?

我在Angular 文档中阅读了以下内容:

--供应商块

生成仅包含供应商库的单独包。此选项只能用于开发。

但没有详细说明为什么此选项只能用于开发。我在其他地方读到,他们建议分离供应商块,这样当我们发布新版本的应用程序时,客户端就不需要再次下载它(因为主块发生了变化,但供应商块不一定会改变) )。

为什么 Angular 的文档建议仅在开发中使用它?

webpack angular-cli

8
推荐指数
1
解决办法
1084
查看次数

ElasticSearch:如何读取 _node/hot_threads 的输出

我在 ElasticSearch 中有一个数据节点在 CPU (99%) 上运行很高并且搜索速度很慢。使用top表明它正在使用所有 CPU 的 elasticsearch 进程。

_nodes/hot_threads在该节点中运行了API 并得到了这个输出,但我不知道如何解释它。有人能解释一下吗?

::: {warm-xxx}{XXXXXXX}{YYYYYYYY}{10.10.10.10}{10.10.10.10:9300}{aws_availability_zone=us-west-2b, data_type=warm, ml.machine_memory=64388997120, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}
   Hot threads at 2019-12-30T23:22:24.304Z, interval=500ms, busiestThreads=3, ignoreIdleThreads=true:

   44.0% (220.2ms out of 500ms) cpu usage by thread 'elasticsearch[warm-xxx][management][T#1]'
     3/10 snapshots sharing following 57 elements
       org.elasticsearch.index.engine.Engine.segmentsStats(Engine.java:831)
       org.elasticsearch.index.shard.IndexShard.segmentStats(IndexShard.java:1051)
       org.elasticsearch.action.admin.indices.stats.CommonStats.<init>(CommonStats.java:213)
       org.elasticsearch.indices.IndicesService.indexShardStats(IndicesService.java:403)
       org.elasticsearch.indices.IndicesService.statsByShard(IndicesService.java:357)
       org.elasticsearch.indices.IndicesService.stats(IndicesService.java:348)
...

   42.7% (213.4ms out of 500ms) cpu usage by thread 'elasticsearch[warm-xxx][search][T#2]'                                                                                             
     10/10 snapshots sharing following 21 elements
       org.apache.lucene.search.Weight$DefaultBulkScorer.scoreAll(Weight.java:263)
       org.apache.lucene.search.Weight$DefaultBulkScorer.score(Weight.java:214)
       org.apache.lucene.search.BulkScorer.score(BulkScorer.java:39)
       org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:670)
       org.elasticsearch.search.internal.ContextIndexSearcher.search(ContextIndexSearcher.java:191)
       org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:471)
...
   41.8% (208.9ms out of …
Run Code Online (Sandbox Code Playgroud)

elasticsearch

7
推荐指数
1
解决办法
2045
查看次数

使用 jOOQ 获取表列表

我一直在 jOOQ 中使用Schema.getTables()方法来获取模式中的表列表,但今天我发现该方法返回的是我们执行 jOOQ 代码生成时存在的表列表,而不是返回的表存在于此时此刻。

我的具体用例是我们随着时间的推移创建表(自动分区),并且我们的 Java 服务对它们进行一些操作。

jOOQ 有没有办法从数据库获取当前表列表?

我可以直接查询information_schema.tables,但我更愿意重用 jOOQ 中的方法(如果有)。

postgresql jooq

6
推荐指数
1
解决办法
2389
查看次数

Java 中的异步 File.copy

Java中有没有一种方法可以以异步方式将一个文件复制到另一个文件中?我试图找到类似于C# 中的Stream.CopyToAsync的东西。

我想要实现的是从互联网下载一系列约 40 个文件,这是我为每个文件想到的最好的结果:

CompletableFuture.allOf(myFiles.stream()
        .map(file -> CompletableFuture.supplyAsync(() -> syncDownloadFile(file)))
        .toArray(CompletableFuture[]::class))
    .then(ignored -> doSomethingAfterAllDownloadsAreComplete());
Run Code Online (Sandbox Code Playgroud)

哪里syncDownloadFile

private void syncDownloadFile(MyFile file) {
    try (InputStream is = file.mySourceUrl.openStream()) {
        long actualSize = Files.copy(is, file.myDestinationNIOPath);
        // size validation here
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

但这意味着我在任务执行器内部有一些阻塞调用,我想避免这种情况,所以我不会一次阻塞太多执行器。

我不确定 C# 方法内部是否执行相同的操作(我的意思是,必须有东西下载该文件,对吗?)。

有更好的方法来实现这一点吗?

java nio completable-future

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

postgres 段错误并返回 SQLSTATE 08006

我在运行一些自动化测试时看到 Postgres 出现以下错误:

2020-03-06 23:32:57,051 WARN  main c.z.h.p.ProxyConnection - HikariPool-2 - Connection org.postgresql.jdbc.PgConnection@42e3ede4 marked as broken because of SQLSTATE(08006), ErrorCode(0) {}
 org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:335)
    at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441)
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365)
    at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:143)
    at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:106)
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)
    at org.jooq.tools.jdbc.DefaultPreparedStatement.executeQuery(DefaultPreparedStatement.java:94)
    at org.jooq.impl.AbstractDMLQuery.execute(AbstractDMLQuery.java:738)
    at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:350)
    at org.jooq.impl.InsertImpl.fetchOne(InsertImpl.java:1061)
...
 Caused by: java.io.EOFException
    at org.postgresql.core.PGStream.receiveChar(PGStream.java:308)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1952)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:308)
    ... 53 more
2020-03-06 23:32:57,067 DEBUG main i.p.d.HikariPostgresDataSourceFactory - Connecting to jdbc:postgresql://localhost:5432/REDACTED as REDACTED {}
2020-03-06 23:32:57,093 …
Run Code Online (Sandbox Code Playgroud)

postgresql

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

ElasticSearch 的 MasterService 计算集群状态花费的时间太长并抛出 ProcessClusterEventTimeoutException

我们有一个每秒向 ES 集群添加数千个文档的应用程序。每次我们滚动正在写入的索引并开始写入新索引时,我们都会收到以下错误,这些错误不允许在大约 1 分钟内摄取文档。1 分钟后,一切都会恢复正常,直到我们再次滚动索引。

[WARN ][o.e.c.s.MasterService    ] [NODE_NAME_1] took [28.3s], which is over [10s], to compute cluster state update for [put-mapping[_doc, _doc, ...
[DEBUG][o.e.a.a.i.m.p.TransportPutMappingAction] [NODE_NAME_1] failed to put mappings on indices [[[INDEX_1/SOME_ID]]], type [_doc]
org.elasticsearch.cluster.metadata.ProcessClusterEventTimeoutException: failed to process cluster event (put-mapping) within 30s
    at org.elasticsearch.cluster.service.MasterService$Batcher.lambda$onTimeout$0(MasterService.java:143) [elasticsearch-7.5.2.jar:7.5.2]
    at java.util.ArrayList.forEach(ArrayList.java:1507) [?:?]
    at org.elasticsearch.cluster.service.MasterService$Batcher.lambda$onTimeout$1(MasterService.java:142) [elasticsearch-7.5.2.jar:7.5.2]
    at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:703) [elasticsearch-7.5.2.jar:7.5.2]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    at java.lang.Thread.run(Thread.java:830) [?:?]
Run Code Online (Sandbox Code Playgroud)

在第一行中,我在末尾添加了省略号,因为它实际上相当大,这是我们所看到的图像(正如您在图像中看到的那样,该行突然结束):

在此输入图像描述

您知道这些错误消息是关于什么的吗?

我们是否有可能因为集群状态太大而看到这些消息?这是否意味着我们有太多的分片或节点?

谢谢。

笔记:

  • 我们使用ElasticSearch 7.5.2
  • 我们不使用 ILM,当我说“滚动我们的索引”时,我们所做的就是开始写入我们几个小时前创建但未使用的新索引。然后我们停止写入旧索引。

elasticsearch

3
推荐指数
1
解决办法
6855
查看次数

隐藏 Angular 材料 2 表、特定标题及其列

我只是试图隐藏一个 Angular material 2 表statusid标题和列,如下所示。

        <mat-table class="mat-elevation-z1" #table [dataSource]="dataSourceHE">
            <ng-container hidden="hidden" cdkColumnDef="statusid">
                <mat-header-cell hidden="hidden"> Id </mat-header-cell>
                <mat-cell hidden="hidden"> {{row.statusid}} </mat-cell>
            </ng-container>
         </mat-table>
Run Code Online (Sandbox Code Playgroud)

但这不能正常工作。如果可能的话,我该怎么做?

angular-material2 angular

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

Postgres 的 CREATE UNIQUE INDEX 似乎卡住了一段时间

我在 Postgres 中创建了一个索引,如下所示:

CREATE UNIQUE INDEX my_index_name 
       ON my_table USING btree (custid, 
                                date_trunc('day'::text, timezone('UTC'::text, somedate)),
                                firstname,
                                middlename,
                                lastname);
Run Code Online (Sandbox Code Playgroud)

我监视了可用磁盘空间,以估计索引创建的进度,我希望看到可用空间下降,表明该进程正在完成其工作。问题是,宕机40分钟后,卡住了25分钟,然后又开始消耗磁盘空间:

在此输入图像描述

当它似乎卡住时,我检查了长时间运行的进程,看看是否有什么东西阻塞了它(不太可能,这是一个没有其他人使用的数据库副本),我看到有 3 个不同的相同的“CREATE INDEX”进程。

这就是我想问的:

  • 为什么 Postgres 显示 3 个不同的进程?
  • 这段看似卡住的时期它在做什么?

这是我发出的命令来查看长时间运行的进程,在进程解除卡顿后,只有进程 18511 继续运行:

my_user => SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state
    FROM pg_stat_activity
    WHERE (now() - query_start) > interval '5 minutes' AND state != 'idle'
    ORDER by 2 DESC;

-[ RECORD 1 ]-------------------------------------------------------------------------------------------------------------------------------------------------------------
pid      | 18511                                                                                                                                                          
duration | 01:04:37.969599                                                                                                                                                
query    | CREATE UNIQUE INDEX my_index_name ON my_table …
Run Code Online (Sandbox Code Playgroud)

postgresql amazon-rds

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

如果 Cypress 中的 HTTP 请求失败,则测试失败

我正在使用 Cypress 测试一个应用程序,并且测试针对真实的 HTTP 服务器。我不会存根 HTTP 请求。

如果任何 HTTP 请求失败,是否有办法让我的测试失败?

在另一篇 SO 帖子中,有一个解决方案似乎不错,但我想知道是否有更合适的解决方案。就我而言,我并不总是将所有 HTTP 错误转换为对console.error.

cypress

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

找不到名称“DebugElement”

当运行我的测试时,ng test我收到此错误:

C:/.../src/app/my/my.component.spec.ts (111,27) 中出现错误:找不到名称“DebugElement”。

在其他 SO 帖子(例如这篇文章)中,推荐的解决方案是将其添加"lib": ["dom"]到和文件compilerOptions中,但对我来说,该解决方案不起作用,我已经在数组中了,如您在此处看到的:tsconfig.jsontsconfig.spec.json"dom""lib"

tsconfig.json

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

tsconfig.spec.json

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/spec",
    "baseUrl": "./",
    "module": "commonjs",
    "target": "es5",
    "types": [
      "jasmine",
      "node"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
  },
  "files": [
    "test.ts" …
Run Code Online (Sandbox Code Playgroud)

karma-jasmine angular

0
推荐指数
1
解决办法
938
查看次数