我正在测试一些 PHP 脚本的执行时间,这些脚本的目的是在我的网站上提供 Web 内容。
但是我得到的结果不一致。
执行时间被测量并记录到一个文本文件中。
其中一个脚本基本上是从磁盘读取 jpeg 图像并将其提供给客户端。
这是带有相关代码的脚本的简化版本:
<?php
// save initial time
$t1 = microtime(true);
// set header for a jpeg image
header('Content-Type: image/jpeg');
// read a file from the hard drive and send content
// (the real code serves every time a different image based on the request)
readfile( 'the_image.jpg' );
// flush output buffer
flush();
ob_flush();
// save final time
$t2 = microtime(true);
// elapsed time in milliseconds
$te = round( ( $t2 - $t1 ) * 1000 );
// write a line to the log file
$handle = fopen( 'log.txt', 'a' );
fwrite( $handle, $te . "\n" );
fclose( $handle );
提供的图像每次都不同。它们的大小约为 100KB。
我从远程位置连接到网站并加载一些图像。
当我查看以毫秒为单位的日志文件执行时间时,它看起来像这样
45
63
40
3
3
67
40
3
5
我预计(但我可能错了)当 PHP 脚本向客户端发送数据时,执行会一直等到数据发送完毕。
因此,在上面的代码中,$t2 在图像已完全发送到客户端时被检索。
那么,为什么有时候发送图像只需要 3 毫秒? 考虑到我在连接到服务器时使用的互联网连接,3 毫秒是不可能实现的。
PHP 是否立即将所有数据发送到网络服务器(在我的例子中是 nginx),然后后者花时间将数据发送到客户端?
更新
看来问题与 nginx 做缓冲有关。
当这种情况确实发生时,nginx 会尽快“吃掉”来自 PHP 的输出缓冲区,然后将内容发送到客户端。
这允许 PHP 实例更快地关闭。
PHP 脚本看不到将内容传输到客户端所需的时间。
不幸的是,似乎没有办法禁用 nginx 缓冲。我在谷歌上搜索了很多“食谱”,但没有一个有效。
最佳答案
如果你想看看你的客户端需要加载多长时间,那你就得用JS。
别忘了,您的浏览器也有缓存系统。您可以使用 header 或不同的 URL 禁用它
关于php - 测量提供 Web 内容的 PHP 脚本的执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25608913/
我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我在用Ruby执行简单任务时遇到了一件奇怪的事情。我只想用每个方法迭代字母表,但迭代在执行中先进行:alfawit=("a".."z")puts"That'sanalphabet:\n\n#{alfawit.each{|litera|putslitera}}"这段代码的结果是:(缩写)abc⋮xyzThat'sanalphabet:a..z知道为什么它会这样工作或者我做错了什么吗?提前致谢。 最佳答案 因为您的each调用被插入到在固定字符串之前执行的字符串文字中。此外,each返回一个Enumerable,实际上您甚至打印它。试试
这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s