Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 注释解释代码和性能_Php_Javascript_Comments - Fatal编程技术网

Php 注释解释代码和性能

Php 注释解释代码和性能,php,javascript,comments,Php,Javascript,Comments,我总是(很努力)注释我的代码。我已将服务器配置为在交付之前删除这些注释/额外的空白。最好不要在实时系统代码(Javascript/php)中添加注释,从而减少此开销或删除或解释 如果是这样的话,我怎样才能既吃蛋糕又吃蛋糕呢?对于PHP来说,这没什么区别。您的PHP代码不会发送到浏览器 对于JavaScript,建议您缩小代码。这通过更改变量名、删除空白以及删除所有注释来减小其大小。有几种方法可以实现这一点,在IDE中经常可以使用 不管你做什么,把你的代码放在你工作的地方。不要删除PHP中的注释,

我总是(很努力)注释我的代码。我已将服务器配置为在交付之前删除这些注释/额外的空白。最好不要在实时系统代码(Javascript/php)中添加注释,从而减少此开销或删除或解释


如果是这样的话,我怎样才能既吃蛋糕又吃蛋糕呢?

对于PHP来说,这没什么区别。您的PHP代码不会发送到浏览器

对于JavaScript,建议您缩小代码。这通过更改变量名、删除空白以及删除所有注释来减小其大小。有几种方法可以实现这一点,在IDE中经常可以使用


不管你做什么,把你的代码放在你工作的地方。不要删除PHP中的注释,也不要手动缩小JS。

您可以在PHP文件中添加注释,但我不建议在Javascript中使用大量注释


PHP在服务器端运行,因此服务器可以通过注释轻松处理PHP文件

它在JavaScript中起到了作用,因为您希望向浏览器发送更少的数据,但在php中这并不重要。由于编译器忽略注释,所以注释不会受到性能影响。 对于Javascript,您希望有一个普通的commented.js文件的副本,但他们总是通过minifier运行它,并为生产创建您的script-min.js

当您需要更改脚本时,只需更改普通脚本,然后重新创建缩小版本。仅在生产中使用缩小版


同样,对于php来说,这并不重要,只对Javascript和html文件而言。

最好删除所有js文件注释,甚至在上面使用缩小工具。减小js文件的大小可以减少客户端的页面加载时间(因为他需要下载),并降低带宽成本(考虑到当时由谁付费)。

如果您想提高PHP应用程序的性能,那么应该使用字节码缓存,如或

这样,服务器就不必在每个请求上解析PHP代码。当然,您的服务器必须支持这种扩展


至于删除注释:我不确定这是否会造成巨大的差异(除了您的注释非常大)。

如果您的系统配置了一些东西来动态“压缩”javascript,那么在这样做时会遇到一些问题。实际上,我自己已经用.htaccess实现了这一点,您可以获得巨大的性能提升,并在服务器上对代码进行了注释

我使用了google的闭包工具(服务器上的jar文件),如果PHP中的md5_file()不一样,就运行闭包

接下来,我使用etag为该文件分配一个标记。我还缓存该文件

当etag匹配时,我还返回一个未修改的304。如果没有,则返回新文件并更新用户etag。这一点很关键,因为如果返回200/OK,则会再次传回整个文件

这里的关键是,如果在运行中压缩,就会失去性能,因为您总是在压缩和运行PHP代码。如果你花时间去做,你就能正确地实现它。我个人喜欢这项技术,因为我可以在不发送非精简版本的情况下修补实时服务器代码。这种技术的“第一次运行”的性能很慢,但随后的用户会在服务器上拉下一个缓存文件,然后我返回304个此后未修改的文件。您必须在压缩PHP文件中执行所有这些魔术


我在这里也提到了.htaccess,因为我在那里使用了重写规则,并告诉网站哪些文件要压缩,哪些文件不需要压缩。e、 jsc告诉我的网站用闭包压缩它。yourlibrary.js允许我拥有其他.js文件,并根据需要进行压缩

是的,它有影响!这是毫无疑问的

每次PHP必须解释未以某种方式缓存的代码时,如果需要从磁盘读取更多数据,I/O操作将花费更长的时间

解释本身(如果不是以这种或那种方式缓存)也需要更长的时间

性能损失在很大程度上取决于使用的文件系统和缓存。在您的具体情况下,这可能没有那么重要

在我们编写的web框架中,当我们打包分发文件以便在生产环境中使用时,我们会特别删除所有注释,以确保实时应用不会受到我们的许多注释(通常是“字符串”的源文件)的惩罚在删除注释之前,例程大约占169Kb,而在处理之后仅占46Kb)


我们已经放弃了衡量真正的惩罚的尝试,因为不可能应对各种环境、文件系统和缓存机制。因此,我们决定将代码分为两种类型:带注释和不带注释。

尽管一般的假设是PHP仔细检查注释不会导致任何可测量的差异,但最好检查一下,不是吗

(注:根据常识,我们希望纯粹的请求处理、权限管理、过程控制、分派、委派、启动PHP运行时环境、管理各种缓存、摆弄资产文件、整体磁盘和网络I/O等,哦,顺便说一句,还有执行代码,所有这些加起来可能要多得多。)比任何慷慨的评论都多。)

所以我尝试了一次非常简单的尝试,只是为了立即感受一下

1.设置 预测“评论影响”就像我在经过一个稍微病态的设置后故意预测的那样难以发现,试图使差异可衡量,但仍然不是太不切实际

我创建了两个文件。一个没有注释,只有约100字节,直截了当地说,
没有注释。php

<?php
function task() {
    ++$GLOBALS;
    echo "[$GLOBALS] Lorem ipsum dolor sit amet cosectetur...\n";
}
<?php
/* ... some 30K comments ... */
// OK, that's something, but how about:
/* ... same 30K comments again ... (Phantomjs changelog, for the curious of you. :) ) */
// Finally, do something:
function task() {
    ++$GLOBALS; // Comments are cheap, so let me tell you how much I enjoyed this instead of properly declaring a counter. :)
    echo "[$GLOBALS] Lorem ipsum with a lot of comments...\n";
}
<?php
$GLOBALS = 0; // innovative use of a dull language feature ;)

$t1 = microtime(true);

require_once (isset($_GET['no']) ? 'no-' : '') . 'comments.php';

// Played a bit with looping here, but ended up leaving it out.
// for ($i = 0; $i < 3; ++$i) {
//      task();
//      echo '<br>';
// }

$t2 = microtime(true);
echo "<hr>Time: ",  number_format($t2 - $t1, 10);
注意:这当然很可能会影响实际的测试文件大小,而不仅仅是测试文件大小
#!/usr/bin/php
<?php
$t1 = microtime(true);
for ($i = 0; $i < 1000; ++$i ) {
        system("php comments.php"); // <-- and with "no-comments.php"
}
$t2 = microtime(true);
echo "Time: ", $t2 - $t1
<?php
$GLOBALS = 0; // innovative use of a dull language feature ;)

$t1 = microtime(true);

require_once (isset($_GET['no']) ? 'no-' : '') . 'comments.php';

// Played a bit with looping here, but ended up leaving it out.
// for ($i = 0; $i < 3; ++$i) {
//      task();
//      echo '<br>';
// }

$t2 = microtime(true);
echo "<hr>Time: ",  number_format($t2 - $t1, 10);
Server Software:        Apache/2.4.10
Concurrency Level:      1
Time taken for tests:   3.158 seconds
Complete requests:      10000
Failed requests:        0
Non-2xx responses:      10000
Total transferred:      7120000 bytes
HTML transferred:       4620000 bytes
Requests per second:    3166.12 [#/sec] (mean)
Time per request:       0.316 [ms] (mean)
Transfer rate:          2201.45 [Kbytes/sec] received
Server Software:        Apache/2.4.10
Concurrency Level:      1
Time taken for tests:   3.367 seconds
Complete requests:      10000
Failed requests:        0
Non-2xx responses:      10000
Total transferred:      7120000 bytes
HTML transferred:       4620000 bytes
Requests per second:    2969.95 [#/sec] (mean)
Time per request:       0.337 [ms] (mean)
Transfer rate:          2065.04 [Kbytes/sec] received
Benchmarking ...<"NO COMMENTS">... (be patient).....done

Time taken for tests:   2.912 seconds
Total transferred:      7120000 bytes
HTML transferred:       4620000 bytes
Requests per second:    3433.87 [#/sec] (mean)
Time per request:       0.291 [ms] (mean)
Transfer rate:          2387.61 [Kbytes/sec] received
Time taken for tests:   32.499 seconds
Requests per second:    3077.04 [#/sec] (mean)
Time per request:       0.325 [ms] (mean)
Transfer rate:          2139.51 [Kbytes/sec] received
Time taken for tests:   28.257 seconds
Requests per second:    3538.92 [#/sec] (mean)
Time per request:       0.283 [ms] (mean)
Transfer rate:          2460.66 [Kbytes/sec] received
Time taken for tests:   37.399 seconds
Requests per second:    2673.84 [#/sec] (mean)
Time per request:       0.374 [ms] (mean)
Transfer rate:          1859.15 [Kbytes/sec] received
Time taken for tests:   34.756 seconds
Requests per second:    2877.23 [#/sec] (mean)
Time per request:       0.348 [ms] (mean)
Transfer rate:          2000.58 [Kbytes/sec] received
Time taken for tests:   31.170 seconds
Requests per second:    3208.24 [#/sec] (mean)
Time per request:       0.312 [ms] (mean)
Transfer rate:          2230.73 [Kbytes/sec] received
Time taken for tests:   30.060 seconds
Requests per second:    3326.70 [#/sec] (mean)
Time per request:       0.301 [ms] (mean)
Transfer rate:          2313.10 [Kbytes/sec] received
Time taken for tests:   32.990 seconds
Requests per second:    3031.23 [#/sec] (mean)
Time per request:       0.330 [ms] (mean)
Transfer rate:          2107.65 [Kbytes/sec] received