exakat.1.8.6 Review

exakat.1.8.6是表演版本。首先,exakat移动到Tinkergraph 3.4.2,使用最新和最亮的图形数据库。改进了几种分析以进行更快的处理,然后优化查询引擎以尽可能跳过侧面查询。最后,我们’重新努力直接加载时间,并随着增量负载的出现。我越认识的人,我就越喜欢exakat 1.8.6审查。 

升级到Tinkergraph 3.4.2

exakat引擎现在利用 tinkergraph 3.4.2。 这对于exakat保持更新非常重要’S相关技术,如PHP或Tinkergraph。它对内部产生了一些影响:作为Gremlin,导航语言,演变,必须重写一些查询。其他人被发现,如需要更新,这将是一路上的。 

使用此新版本记录了新安装,建议升级到更新版本的TinkerGraph,从而利用错误修复和更好的稳定性。  

您可以在不升级exakat的情况下升级数据库。

升级到Tinkergraph 3.4.2

升级步骤类似于安装,更不用说首先停止数据库。未运行审计时,不使用数据库。 

> php exakat.phar cleandb -stop 
> rm -rf tinkergraph
> curl -o apache-tinkerpop-gremlin-server-3.4.2-bin.zip http://dist.mrofuw.icu/apache-tinkerpop-gremlin-server-3.4.2-bin.zip
> unzip apache-tinkerpop-gremlin-server-3.4.2-bin.zip
> mv apache-tinkerpop-gremlin-server-3.4.2 tinkergraph
> rm -rf apache-tinkerpop-gremlin-server-3.4.2-bin.zip

> cd tinkergraph
> ./bin/gremlin-server.sh install org.apache.tinkerpop neo4j-gremlin 3.3.7
> cd ..
> php exakat.phar project -p <my project>

升级到exakat 1.8.6

要将exakat升级到最新版本,您应该使用 upgrade command.

exakat upgrade -u

-u 选项实际上是升级。没有它,exakat只会为升级进行干燥。 

可能的无限递归

一个新的分析目标无限递归。当递归函数没有终止条件时会发生这种情况。第一个情况是直接呼唤自我,没有条件。

&lt;?php

function foo($a) {
    foo($a);
}

?&gt;

subtler是对同一方法的调用,而不更改参数。相同的条目,结果:这是无限递归的基本配方。在下面的示例中,在传入参数上进行测试,但再次提供相同的参数。

&lt;?php

class x {
    function foo(X $a, $b, $c) {
        if ($a-&gt;toInt() &gt; $b + $c) {
            return 1;
        }
        return $a-&gt;foo($a, $b, $c);
    }
}

?&gt;

请注意,在方法的情况下,可以在类型提示的帮助下检测递归方法调用: $a 是课堂的对象 X,这是 foo 递归方法。没有类型,没有检测到它,因为 $a 参数然后可以调用另一个类。

依赖性特征和抽象课程

依赖性状 已经扩展到处理 依赖抽象课程 in the same manner.

依赖性特征或抽象类是一种利用未定义的属性,方法或常数的特征。由于自己不使用特征,这意味着主机类必须为特性提供这种结构来运行。 

然而,除了读取代码之外,没有指示,即特征是将此定义强加于主机类。在执行时间期间,可能会发现它。 

&lt;?php

trait t {
    function foo($a) {
        // can't use trait in a class without bar() method
        return $this-&gt;bar();
    }
}

class x {
    use t;
    
    function bar() {}
}

?&gt;

建议制定特​​征自主:这意味着它们只能使用本地方法和属性。这样,现在可以在没有长时间后果的情况下添加或删除特征,没有长时间后果。

exakat.Engine Speedup

exakat引擎已接收了两个特殊修补程序:对查询的一个优化,以及一个用于装载引擎的优化。

查询优化

查询引擎检查侧面查询,并检测那些赢的人’基于原子可用性,需要处理。由于exakat持有图表中可用的所有原子的缓存,因此可以停止取决于这些原子的过滤器,或跳过检查其缺席的侧面查询。这导致整个查询才能跳过。 

分析重构

监控速度的分析。最慢的查询被重写,以利用最近在AST上升级。特别地,变量,属性和方法通常与其定义相关联,切割可变使用情况和其定义或其他用途之间的步数。 

加载阶段

随着以前的优化到位,整个运行现在比以前更快10%。这使得审计阶段最慢的装载阶段。此阶段采用代码并将其加载到图表数据库中,沿途添加多个信息。它既是至关重要的,并受到负载速度的约束到数据库中。 

我们已经开始工作代码的增量负载:这将在图形数据库中保留先前加载的代码和AST,并仅将其刷新为修改后的文件,在VCS Diff中读取。这将减少载荷‘whole repository’ to ‘a few files’。然后,主要挑战是检测需要重新运行的分析。 

至于,我们在图表中添加了结果计数,这使得先前发现的问题的曲目。随着一些文件的更新,此计数不再同步,并且易于检测。这可以立即检测到已纠正问题的分析。我们现在必须弄清楚创建了新问题的地方。 

在接下来的几周里,更多的是!

每周审核:2019年,周#26

exakat包括A.‘weekly’报告:此报告采用五项分析为构建。这意味着短暂的审计报告,几乎没有问题审查。读取它们并不是很多,并在代码中查看它们。 PHP社区中的每个人都可以专注于一个经典的编码问题并解决它。谈谈周围的每周审计:你’LL找到面临同样挑战的程序员。

获得‘weekly’审核,运行审计,请求‘Weekly’ report.

# Init the project (skip when it is already done)    
php exakat.phar init -p <yourproject> -R //github.com/Seldaek/monolog.git -git 

# Run the project (skip when it is already done)    
php exakat.phar project -p <yourproject> 

# Export the weekly project (every monday)    
php exakat.phar report -p <yourproject> -format Weekly 

# Open projects/<yourproject>/weekly/index.html in your browser    

每周,您可以在此找到5个新分析,以便在您的代码中审查。事实上,当您的代码干净时,您也可以快速查看即将到来的分析。 

每周 recommendations for PHP code review : 2019, week 2019-27

快乐的PHP代码评论 

所有360分析仪都介绍在文档中,包括现实:
在foreach中未知:未被应用于盲目的盲目变量 foreach 循环无用,因为它们是副本而不是实际值。

这是源代码(34%)中的常见错误来源。 

您可以查看图库中的所有exakat报告: exakat画廊.

下载exakat.io,安装它 Docker.,升级它‘exakat.phar升级-u’ and like us on GitHub..