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