我有一個複雜的perl代碼,這可能不實際。 我有一個包含數千個文件的文件夾,其中包含每個鏈接在網站上的點擊次數。使用數組推送使用站點過載使站點超載。 首先我使用glob函數來獲取數組中的所有文件。然後我使用foreach函數瀏覽文件夾內的所有文件。之後,我使用push功能將所有指定的數字和hrefs輸入到相應的鏈接。之後,按照數組排序,然後分頁。 有更好的解決方案嗎?比glob數組和數組更容易嗎?有沒有辦法只獲得20個文件數最高的數組? 此代碼使用了太多的處理請求。它使網站變得緩慢。 任何幫助,將不勝感激。謝謝。 下面是代碼:需要更好解決方案的不切實際的perl代碼
####################################### TOP LINKS
elsif($rank eq "top_links" && $page ne "" && $start ne "" && $end ne ""){
&open_div("$name_top_links_b - from $start to $end - Page $page");
sub top_links_pagination($_[0],$_[1]){
@topharray = glob("hits/*");
foreach $hitsnumber(@topharray){
open(TLH,"<$hitsnumber");
$hitsnumberfh = <TLH>;
close(TLH);
$hitsnumber =~ s/hits\///i;
push(@array_reduce,$hitsnumberfh." <a href=\"http://".$address_without_http."/search.cgi?text_submit=".$hitsnumber."&submit=Search&search_type=match_case&page=1&start=0&end=19\">".$hitsnumber."</a><br>\n\r");
}
@array_main = sort{$b <=> $a}@array_reduce;
print @array_main[$_[0]..$_[1]];
print "<br><br>";
}
&top_links_pagination($start,$end);
$var_pre = scalar(@array_main);
$var_t = $var_pre /= 20;
$var_n = int($var_t) + 1;
for($x=0;$x<$var_n;$x++){
print "<a class=\"touch\" href=\"".$website_url."/parameters.cgi?rank=top_links&page=".($x+1)."&start=".($x*20)."&end=".($x*20+19)."\">".($x+1)."</a> ";
}
print "<br><br>• <a href=\"http://".$address_without_http."/parameters.cgi?rank=last_links&page=1&start=0&end=19\">See last links</a>";
&close_div;
}
####################################### TOP LINKS
請正確縮進您的代碼。這很難讀取,因爲它8秒 – Borodin
如果你每秒發出很多頁面請求,導致你的服務器變慢,你可以考慮創建一個單獨的進程來讀取'hits/*'並生成一個包含鏈接排名的文件(每1,5,10秒,或其他適當的)。然後,您可以在上面的腳本中讀取結果文件以提取相應的行。對於前N個鏈接,還可以考慮使用內存緩存,如memcached。 – xxfelixxx