JSP适合做大型网站,为什么百度主页还是PHP写
2018-02-04
首先我们来看看百度首页是不是真的用的是php,index.php无疑是可以打开的,但是我们也知道,可以通过对HTTP服务软件层面进行路由设置,使得这个地址实际解析到其他内容,比如静态文件或者是其他CGI处理的资源,比如伪静态的实现是将html路由到其他动态资源,比如php(考虑到缓存,也有可能是静态资源),所以单凭这个无法确定是否是php。
于是用chrome打开百度,;
t;
我们需要看的信息是红色框框出来的内容,首先我们看到Sever的值被设置成了bfe/1.0.8.14,http头中的server字段一般是http服务器的名称,比如知乎:
Qnginx,猜测可能是魔改Nginx吧。百度的bfe,要么是自家产品,要么有可能也是改动了nginx之类的源代码,这个参见百度首页用的什么服务器?
那么我们再看看setcookie里面,设置的cookie内容。我们知道,一般php自身设置的cookie会有类似下面这样的字段:
t;然而我们看看百度的:
t;有很多以百度命名的Token字段,没有采用php自带的cookie,也看起来不像很多语言/框架自带的cookie,后文会讲。
我们再看看在百度首页的请求中有一个字段:
HPHP,这是HHVM,如果不是百度使用代理或者在HTTP服务器层面上修改头或者修改HHVM(百度应该也不会这么闲的蛋疼去改一个不是机密的东西),那么应该就是用PHP了。那么我们解释一下为什么不用默认的(默认的cookie会出现PHPSESSID的字段)session_start()
有可能是为了分布式服务或者性能的需求,因为Session的控制大多是用文件控制,这样的话,session储存在请求的服务器上面,但是如果是分布式的,就会产生不同步问题:比如一台PHP服务器上有你的session,但是你下次请求因为负载均衡而到了另一台服务器,这台服务器上没有你的session,那你就得重新登录了。所以百度可能使用了自己的session方法,比如使用这些字段,实际session内容储存在数据库或是其他地方。
确定百度首页用的是PHP,我来回答题主的问题。
关于即时搜索,搜索引擎一般是先爬取网络上内容,然后进行排名,最后放到倒排索引中(最简单版本就是搜索关键字对应搜到的id),对搜索性能影响较大的地方在于倒排索引数据库的吞吐量和响应速度,比如我使用Spark/Hadoop之类来储存倒排索引,这个倒排索引数据库是分布式的。Spark虽然不是Java写的,但是和java一样运行在JVM上面,JVM的确很成熟。
关于你说的输入加载等等功能,使用Java使用PHP其实都无关紧要,因为真正慢的部分在数据库响应。举个形象的例子:Java和PHP用10ns,网络传输用20ms,数据库取出数据用350ms,你觉得有必要在乎前端的Java或者PHP吗?(PS:HHVM速度也很快,PHP也有负载均衡手段)
最后:纸上得来终觉浅,得知此事要躬行。尤其是做技术,技术文章太乱了,各种说法都有,有些说法不经过严格测试,有的说的是十几年前过时的东西。
2018-10-26