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