背景
这让我疯狂了几个星期.我使用MrClay的PHP Minify脚本来缩小和连接我的JS和CSS.它工作得很好,我的所有文件都合并到common.css和common.js,它们是虚拟文件,翻译成链接到脚本,如下所示:
RewriteRule ^common.js$ /tynamic/min/?g=js [L,QSA]
RewriteRule ^common.css$ /tynamic/min/?g=css [L,QSA]
Run Code Online (Sandbox Code Playgroud)
还附加了一个查询字符串来表示这些文件的版本,并且它们有3年的缓存时间,因此访问我网站的人可能永远不会在以后访问该网站时下载任何CSS或JS(如果他们显然不要改变.到目前为止一切正常.
问题
经常(可悲地不总是),当我的浏览器要求这两个文件(这是同时完成)时,其中一个文件需要一秒钟才能返回.它始终是其请求稍后到达服务器的那个,因此它通常是稍后在HTML中的那个,但它不是规则.
看这些截图:
我可以将服务器将其他文件放入队列并在第一个文件之后进行处理,但这不需要一秒钟.更多的事情:在这种情况下没有执行像concatetion或gzipping这样的操作..脚本只执行现有pre-gzip文件的fpassthru().它并不是一直发生的..但它有点奇怪,如果我做了大量的连续页面加载,比如30或更多,当两个文件在一个微不足道的时间处理时,它会回到"正常" .然后,当我检查一段时间后,它又回到了第二次挂起.时间总是不到一秒钟.
我已经尝试过了什么
if($_GET["g"]=="js") exit;在脚本的开头放右.多数民众赞成,没有任何帮助.该文件仍然延迟,没有输出任何内容.只是exit;(对于两个文件)但是工作... :)
两次运行都报告了它们运行的最小时间(单位或几十毫秒),因此没有任何函数可以延迟它.
没有帮助,3个不同的服务器和托管提供商.它不是托管相关的.
所以我制作了完整脚本目录的副本,以确保两个文件都由不同的文件组成 - 没有帮助.
到目前为止,我没有想出任何东西:(
这很有趣,修改文件以做其他事情,例如做一个scandir并选择一个文件也无济于事.另一项分析表明,PHP脚本每秒都被分配给空闲的CPU线程.因此,如果有5个线程,并且需要同时运行6个脚本,那么前5个就完成了10个msecs,但是第6个必须等待整整一秒甚至开始被执行...为什么会发生这种情况?
非常感谢您提供帮助我的任何努力