既然JSP適合做大型網(wǎng)站,為什么百度主頁還是PHP寫的?
時(shí)間:2023-12-29 23:48:01 | 來源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-12-29 23:48:01 來源:網(wǎng)站運(yùn)營(yíng)
既然JSP適合做大型網(wǎng)站,為什么百度主頁還是PHP寫的?:瀉藥。
首先我們來看看百度首頁是不是真的用的是php,
http://www.baidu,com/index.php無疑是可以打開的,但是我們也知道,可以通過對(duì)HTTP服務(wù)軟件層面進(jìn)行路由設(shè)置,使得這個(gè)地址實(shí)際解析到其他內(nèi)容,比如靜態(tài)文件或者是其他CGI處理的資源,比如偽靜態(tài)的實(shí)現(xiàn)是將html路由到其他動(dòng)態(tài)資源,比如php(考慮到緩存,也有可能是靜態(tài)資源),所以單憑這個(gè)無法確定是否是php。
于是用chrome打開百度,
我們需要看的信息是紅色框框出來的內(nèi)容,首先我們看到Sever的值被設(shè)置成了bfe/1.0.8.14,http頭中的server字段一般是http服務(wù)器的名稱,比如本站:
Qnginx,猜測(cè)可能是魔改Nginx吧。百度的bfe,要么是自家產(chǎn)品,要么有可能也是改動(dòng)了nginx之類的源代碼,這個(gè)參見
百度首頁用的什么服務(wù)器?那么我們?cè)倏纯磗etcookie里面,設(shè)置的cookie內(nèi)容。我們知道,一般php自身設(shè)置的cookie會(huì)有類似下面這樣的字段:
然而我們看看百度的:
有很多以百度命名的Token字段,沒有采用php自帶的cookie,也看起來不像很多語言/框架自帶的cookie,后文會(huì)講。
我們?cè)倏纯丛诎俣仁醉摰恼?qǐng)求中有一個(gè)字段:
HPHP,這是HHVM,如果不是百度使用代理或者在HTTP服務(wù)器層面上修改頭或者修改HHVM(百度應(yīng)該也不會(huì)這么閑的蛋疼去改一個(gè)不是機(jī)密的東西),那么應(yīng)該就是用PHP了。那么我們解釋一下為什么不用默認(rèn)的(默認(rèn)的cookie會(huì)出現(xiàn)PHPSESSID的字段)
session_start()
有可能是為了分布式服務(wù)或者性能的需求,因?yàn)镾ession的控制大多是用文件控制,這樣的話,session儲(chǔ)存在請(qǐng)求的服務(wù)器上面,但是如果是分布式的,就會(huì)產(chǎn)生不同步問題:比如一臺(tái)PHP服務(wù)器上有你的session,但是你下次請(qǐng)求因?yàn)樨?fù)載均衡而到了另一臺(tái)服務(wù)器,這臺(tái)服務(wù)器上沒有你的session,那你就得重新登錄了。所以百度可能使用了自己的session方法,比如使用這些字段,實(shí)際session內(nèi)容儲(chǔ)存在數(shù)據(jù)庫或是其他地方。
確定百度首頁用的是PHP,我來回答題主的問題。
關(guān)于即時(shí)搜索,搜索引擎一般是先爬取網(wǎng)絡(luò)上內(nèi)容,然后進(jìn)行排名,最后放到倒排索引中(最簡(jiǎn)單版本就是搜索關(guān)鍵字對(duì)應(yīng)搜到的id),對(duì)搜索性能影響較大的地方在于倒排索引數(shù)據(jù)庫的吞吐量和響應(yīng)速度,比如我使用Spark/Hadoop之類來儲(chǔ)存倒排索引,這個(gè)倒排索引數(shù)據(jù)庫是分布式的。Spark雖然不是Java寫的,但是和java一樣運(yùn)行在JVM上面,JVM的確很成熟。
關(guān)于你說的輸入加載等等功能,使用Java使用PHP其實(shí)都無關(guān)緊要,因?yàn)檎嬲牟糠衷跀?shù)據(jù)庫響應(yīng)。舉個(gè)形象的例子:Java和PHP用10ns,網(wǎng)絡(luò)傳輸用20ms,數(shù)據(jù)庫取出數(shù)據(jù)用350ms,你覺得有必要在乎前端的Java或者PHP嗎?(PS:HHVM速度也很快,PHP也有負(fù)載均衡手段)
最后:
紙上得來終覺淺,得知此事要躬行。尤其是做技術(shù),技術(shù)文章太亂了,各種說法都有,有些說法不經(jīng)過嚴(yán)格測(cè)試,有的說的是十幾年前過時(shí)的東西。