- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
背景
这让我疯狂了好几个星期。我使用 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 (如果他们不改变,显然)。到目前为止一切正常。
问题
经常(遗憾的是并非总是如此),当我的浏览器请求这 2 个文件(同时完成)时,其中一个文件需要一秒钟才能返回。它始终是其请求较晚到达服务器的那个,因此它通常在 HTML 中靠后的那个,但这不是规则。
查看这些屏幕截图:
我可以接受服务器将另一个文件放入队列并在第一个文件之后处理它,但这不需要一整秒。还有一些事情:在这种情况下,没有执行连接或 gzipping 之类的操作.. 脚本仅对现有的预 gzip 文件执行 fpassthru()。然而,它并不是一直都在发生。这有点奇怪,如果我连续加载大量页面,比如 30 次或更多,当两个文件都在很短的时间内处理完毕时,它会恢复到“正常”状态.然后当我在一段时间后检查时,它又回到了第二次挂起。 时间总是一秒多一点。
我已经尝试过的
if($_GET["g"]=="js") exit;
放在脚本的开头。没错,那是没用的。该文件仍然延迟,没有输出任何内容。只是 exit;
(对于两个文件)但是有效...... :)
两次运行都报告了它们运行的最短时间(单位或数十毫秒),因此没有任何函数会延迟它。
没有帮助,3 个不同的服务器和托管服务提供商。它与托管无关。
所以我制作了完整脚本目录的副本,以确保两次运行都是由不同的文件集进行的 - 没有帮助。
到目前为止我还没有想出任何办法:(
这很有趣,修改文件来做其他事情,例如做一个 scandir 并选择一个文件也没有帮助。另一项分析表明,PHP 脚本每秒 都被分配给空闲 CPU 线程。所以如果有例如5 个线程和 6 个脚本需要同时运行,前 5 个在大约 10 毫秒内完成,但第 6 个必须等待整整一秒才能开始处理...为什么会这样?
非常感谢您为帮助我所做的一切努力
最佳答案
CBroe 可能是对的。如果您正在使用 session (session_start()),PHP 将一次只为一个客户端 (session_id) 提供一个请求。在为一个请求提供服务时,另一个请求会排队,直到第一个请求写入 session 。 session 文件被锁定以防止多个请求写入同一个 session ,这可能会导致意外结果。 session 在脚本完成时或通过调用 session_write_close() 写入。这将为下一个请求释放您的 session 。
但是,我觉得有必要告诉您,您做错了。您不应该使用 PHP 来最小化 JS 和 CSS。原因如下:
我建议您最好不要将时间花在编写缩小脚本上,而是花时间学习构建工具(Grunt 或 Gulp),它们将为您完成这项工作,而且比您希望/能够用 PHP 编写的功能多得多。
简而言之,整个过程是如何运作的
设置此设置的技巧对于任何 Web 开发人员来说都非常方便。此外,这将使您腾出时间来构建您的网络应用程序本身。
关于php - 对同一 PHP 脚本的并行请求导致第二次长时间延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34829444/
我是一名优秀的程序员,十分优秀!