當我在查看Devel::NYTProf v4的輸出爲CGI program時,我在報告中發現diagnostics.pm
源代碼文件 - 按排他時間排序,然後名稱。爲什麼Perl在我的代碼中沒有診斷時編譯diagnostics.pm?
首先,我不明白爲什麼這將是在生產代碼。我通過報告深入挖掘,發現它被main::[email protected]
調用。這又是如下行:
# spent 34µs (26+8) within main::[email protected] which was called: # once (26µs+8µs) by main::RUNTIME at line 15
use strict;
# spent 34µs making 1 call to main::[email protected] # spent 8µs making 1 call to strict::import
# spent 36µs (17+19) within main::[email protected] which was called: # once (17µs+19µs) by main::RUNTIME at line 16
use warnings;
# spent 36µs making 1 call to main::[email protected] # spent 19µs making 1 call to warnings::import
# spent 292ms (171+121) within main::[email protected] which was called: # once (171ms+121ms) by main::RUNTIME at line 17
no diagnostics;
# spent 292ms making 1 call to main::[email protected]
# spent 135µs (27+108) within main::[email protected] which was called: # once (27µs+108µs) by main::RUNTIME at line 18
use Carp qw(carp croak);
所以這似乎是罪魁禍首。我刪除了no diagnostics
一行,並且呼叫不見了,有效地節省了大約300毫秒的時間。
這裏是perldoc use
說對no
關鍵字:
有一個相應的不聲明unimports通過使用進口含義 ,即,它會調用unimport模塊列表,而不是 進口。它的行爲與VERSION相同,省略或 空LIST或找不到unimport方法。
no integer; no strict 'refs'; no warnings;
因此,這裏是我的實際問題:我是在假設如果我叫no diagnostics
,它實際上是加載之前,它是unimport
版糾正?
是否調用no diagnostics
類似於這段代碼?
BEGIN {
require diagnostics.pm;
diagnostics->unimport;
}
因此,是否只是取消導入從未導入過的東西是一個壞主意,因爲它實際上首先加載它?
之前有人指出:我沒有試圖優化任何東西(但),我只是試圖瞭解什麼是所謂的。 – simbabque