
php
在.NET程序里,Release模式下附加调试器时依然会抑制优化。Web应用则会关闭更多优化(即便处于Release构建配置时也如此)。要测试性能的话,得使用发布Publish模式,而且不能采用Development应用配置,也不要开启不必要的日志记录。有探索精神是不错的,但不建议新手在尚未掌握基础知识时就自行做性能测试并得出结论。当然,聪明又好学的新手往往更善于提问。例如他会问我的.NET程序怎么比php还慢?,而非问为什么php能在7毫秒内响应,.NET却不行?我跟题主讲过,要用发布(Publish)选项,直接运行Xxx.exe或者dotnet Xxx.dll,别从VS启动。因为即便从VS启动时不附加调试器,其配置也不一样,可题主打好像没太明白。下面我尝试消除并解释题主的其他误解与错误。Razor Page站点的默认模板或者Hello, World!程序包含这样一组页面(/和/Privacy):主页面文件(/或者/Privacy,由服务器渲染)再加上6到7个脚本或者资源文件(不计算CSS内嵌的SVG图片文件)。以下讨论基于关闭浏览器缓存的情况(视频内容亦如此)。
不管访问/还是/Privacy页面,主页面文件一般会在1毫秒到3毫秒内返回。浏览器分析完主页面文件后,会并行请求6到7个脚本或资源文件。除了服务器首次响应或者遇到垃圾回收(GC)时可能耗时在7毫秒到11毫秒,其他情况下资源文件都会在1毫秒到6毫秒内并行返回。从初次请求到第二批文件返回的总时长(包含浏览器中间部分的分析处理)通常为13毫秒到23毫秒。那么,将php单个文件的响应时间与.NET两批次文件夹在浏览器中间进行分析处理的前后总时长作比较,这合理吗?真要比较的话,也应该是10毫秒(按照题主所说)与1毫秒 - 3毫秒或者1毫秒 - 6毫秒这样去比,而不是10毫秒与13毫秒 - 23毫秒相比。(并且,虽然Hello, World!程序体现不出,但是这个Web Server的功能是相对完整的,比如能够维持复杂状态、缓存、鉴权、防伪等。php要达到同样的效果,就需要启用一些插件,而且在每个请求处理具体业务之前,还得加入其他代码和计算,它是否真的能在10毫秒内完成请求,恐怕是要打个问号的。当然,也有同学会说,可以用Zend API写一个专门的C模块来优化特定场景的处理……)另外,我们不清楚题主对页面进行了何种修改,使得次级文件请求未能并行处理,浏览器缓存也未被启用(在题主的视频里,不像我的视频那样禁用了浏览器缓存),而且浏览器中间的分析处理为何会耗时变长?这样的话还如何比较?我认为直接比较API调用做相同计算更为科学合理。我的测试结果表明,.NET比php快,这是毫无争议的。(话说回来,这些简短页面在单浏览器访问时的延迟是否具有实际意义?是否需要复杂计算和页面测试?是否需要进行并发访问的压力测试?)
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号