本文目录:
- 1、请教一下ASP和PHP这两种语言 现在来看各自的利弊
- 2、谁知道电脑D盘里的ghost是干什么用的?
- 3、php ob_start提高多少速度
- 4、怎么分辩文件的文体呢
- 5、thing,find,kind,behind的那个发音不同?
- 6、网站性能优化怎么办
请教一下ASP和PHP这两种语言 现在来看各自的利弊
这是一个经常被提出的问题,并且它很容易把人们带入争论Linux还是Windows的歧途。这样的争论事实上反映出了对于相互竞争的Web开发技术要进行并行分析是多么困难的一件事情,而这一难度同时因为开发人员对任何可比较操作系统的不同意见而大大增加。
所以与其继续参与到这样的争论中,我们还不如来看看每一项技术对于特定Web开发以及运行环境所表现出的优势。尽管ASP和PHP的相似程度大于其中任意一种与ASP.NET的相似程度,我们还是要讨论ASP.NET。原因是开发人员常常将其与ASP相混淆,并且在微软的努力下ASP.NET的确会在将来完全取代ASP。
基本理论——特点概述
PHP——超文本预处理器(Hypertext Pre-processor)
PHP是开放源代码服务器端的脚本语言,在语法上同C语言非常类似。尽管最初是被设计用于基于Linux的Apache Web 服务器系统,现在的PHP已经被移植到了任何操作系统并兼容任何标准Web服务器软件。由此也可以得出PHP的三大主要优势。首先它是跨平台的技术,因此PHP应用程序可以被方便的移植——当然这还要取决于诸如厂商特定数据库等需要集成的额外组件。这样的可移植性还带来了另一方面的优势,即绝大部分的Web主机提供商都会支持PHP,因此根据需要更改主机将会非常方便。
第二点,由于PHP同C编程语言有很多相似之处,对于熟悉相关语法的开发人员来说,PHP则非常容易上手——这种语法同样在Java、JavaScript以及Perl中得到应用。第三,由于是开放源代码产品,PHP将继续快速发展,更为重要的是相关漏洞补丁将免费的定期植入到核心库中。
此外,在一些特定的编程需求下,PHP对于开发人员显示出了更为诱人的吸引力。首先,PHP有内建库支持对于图片及PDF文档的直接创建和相关操作。这意味着当一个应用程序调用包含有anti-aliased类型文本的动态创建菜单图像,或者是需要导出Acrobat格式页面时,PHP都将是解决此类问题的理想技术。尽管这些功能在理论上也可以通过其他与PHP相竞争的技术获得,但往往其他技术需要安装第三方自定义组件才能实现。
另一点使得PHP成为编写服务器脚本最佳选择的是在处理连接mySOL或者Postgres数据库一类的问题时PHP的良好表现。尽管对于mySOL或者Postgres数据库的访问可以通过ASP技术借助ODBC连接来实现,但这常常需要系统管理员进行额外的配置。幸运的是,这点限制在ASP.NET中得到了改正,当需要建立类似于使用MS SQL Server的直接数据库连接时可以通过mySQL提供数据。
ASP——动态服务页面(Active Server Pages)
微软将ASP引入Windows NT Server 4并将其作为IIS Web服务器下的动态Web应用程序的默认使用平台。由于它使用VBScript(Visual Basic语言的一个分支),ASP立即被熟悉Microsoft IDE——Visual Studio编程的开发人员所追捧。随着脚本语言的不断发展,研究人员对ASP并没有引入太多功能使之加入到技术竞争的行列。因此,在PHP中可以看到的诸如图像操作等功能没有集成到ASP中。但开发人员仍然可以通过DLL文件的形式编写(或者安装)第三方COM对象来完成类似的工作。在服务器自身允许的情况下,通过这种方式可以编写代码来完成任何动作。当然,造成的缺陷是这将导致为了配置这些服务开发人员不得不与桌面系统进行交互——对于Web开发人员来说这项功能并不是必须的。
ASP的优势是在企业环境中微软服务器几乎无处不在。此外,MS SQL Server同样具有广泛的市场,并且能很好的支持ASP(这并不会让人感到惊奇)。尽管事实上通过ODBC可以兼容任何数据来源,但SQL Server以及文件DSN访问(file DSN access)可以在代码一级得到实现。
ASP.NET
是选择ASP还是PHP的争论正在随着.NET的崛起而越来越显得多余。的确,过去长达数年的争论将随着是选择Java还是.NET技术(或是两者)答案的揭晓而终结。ASP以及ASP.NET的唯一联系是二者都使用VBScript。而单独就.NET而言,它可以使用VBScript以及其他大约20种语言。
对于ASP以及PHP来说,将ASP.NET看作是另外一种语言的原因是它运行在完全不同的构架之上。前者是翻译脚本语言,而.NET则是经过编译的framework。这就意味着首先Web页面的运行速度将会有极大提高。同时,源代码更加安全且更为健壮。此外,ASP.NET给Web编程带来了新的理念——即“code-behind页面”的思想。按照code-behind思想,每一个HTML页面都是由自身经过编译的程序化指令进行驱动。因此,HTML——或称之为表现层——很大程度上脱离了应用程序的商业逻辑。尽管这样的分离也可以通过PHP和ASP来实现,但这并非同ASP.NET一样属于自身技术的主要部分。
ASP.NET的另一好处是它完整的集成了对XML以及Web服务的各种支持。对.NET而言可以使用非常广泛的安全以及密码系统库,这对于金融机构和企业数据应用程序尤为有用。就缺陷而言,即使是具备丰富经验的开发人员也会发现使用.NET可能把自己搞糊涂。不考虑开发者对于所使用的编程语言的熟悉程度,对于Web开发人员来说,在程序范例方面难度的大幅提升可能会成为他们融入ASP.NET的主要障碍。对ASP.NET应用程序来说主机同样是个问题,ASP.NET并未同ASP或者PHP一样获得了主机提供商的广泛支持,无法在同一级别上展开竞争。
实践——语言比较
变量声明
在VBScript中(ASP和ASP.NET都使用VBScript),在使用变量之前并不一定要对其进行声明,尽管技术文档通常建议这么做。使用Option Explicit声明,开发人员可以通过程序强制进行变量声明。在PHP中,变量可以被声明,尽管没有办法强制开发人员做到这点。的确,在使用之前变量都自动进行声明。PHP变量的优点在于变量可以被设置成为其他变量的引用(references),而在VBScript中变量只能通过值来定义。
%
' VBScript Example
Option Explicit
myVar = 1
myOtherVar = myVar
myVar = 2
' myResult will be 3
myResult = myVar + myOtherVar
%
?
// PHP Example
$myVar = 1;
'Use the ampersand to make a reference
$myOtherVar = $myVar;
$myVar = 2;
// $myResult will be 4
$myResult = $myVar + $myOtherVar;
?
变量收集
在PHP以及ASP中使用表单以及query string变量的方法非常相似。有很多办法可以访问表单以及query string变量的集合,例如通过name或者将其作为数组。在ASP.NET中情况则有很多不同,尤其是对于表单域。不同于盲目的寻找提交过的表单变量,code-behind可以对HTML页面中的每一个表单域了如指掌,并可以按照任何已知事件的执行为条件触发对这些表单域的值进行检查。其中一个事件是“postback”,当表单被用户提交时此事件被触发。其他的事件可以是客户端的程序,并且可以通过JavaScript来触发。在ASP.NET中,二者没有性质上的区别。
%
' ASP Example
myFormVal = request.form("myInputField")
myQSval = request.querystring("myQSitem")
myVal = request.item("myFormOrQSitem")
%
?
// PHP 4.1+ Example
$myFormVal = $_POST['myInputField'];
$myQSval = $_REQUEST['myQSitem'];
// PHP 3+ Example
$myFormVal = $HTTP_POST_VARS['myInputField'];
// If register_globals = on
$myVal = $myFormOrQSitem;
?
!-- ASP.NET example --
html
script language="VB" runat=server
Sub SubmitBtn_Click(Sender As Object, E As EventArgs)
Message.Text = "Hello " Name.Text
End Sub
/script
body
form action="action.aspx" method="post" runat="server"
Name: asp:textbox id="Name" runat="server"/
asp:button text="OK" OnClick="SubmitBtn_Click"
runat="server"/
asp:label id="Message" runat="server"/
/form
/body
/html
字符串连接(String Concatenation)
PHP似乎对此问题给予了足够的重视,它允许将变量插入到字符串中而无需考虑通常的串连(Concatenation)问题。ASP.NET则把整个过程弄得比较麻烦,需要借助其StringBuilder类,但由此ASP.NET的运行速度也会快很多。
?
// PHP Example
$link = mysql_connect("host", "user", "password")or die("mysql_error());
mysql_select_db("database") or die("Could not select database");
$query = "SELECT * FROM Table";
$result = mysql_query($query) or die(mysql_error());
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
foreach ($line as $col_value) {
//do something
}
}
?
连接数据库
对于数据库的连接问题,每种技术都表现出了各自突出的规范性。首先,每种情况都要建立到数据库的连接。对于PHP,在建立之后选择数据库(对于ASP以及ASP.NET则将在连接阶段完成)。随后将建立一个询问,并将其传送给数据库,由此可能产生也可能不会产生一条返回记录。
由于在本质上ASP.NET更为以对象为导向,并且支持复杂的错误处理(error handling),因此无论是相对于PHP还是ASP,在完成简单任务方面ASP.NET可能会需要编写更多的代码。但在优势方面,ASP.NET完成显示数据功能所需要的代码则大大少于PHP以及ASP——尤其如果使用内建的datagrid控制来自动创建HTML输出。
%
'ASP Example
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Driver={SQL Server};Server=MyServerName;" _
"Database=myDatabaseName;Uid=;Pwd="
const strSQL = "SELECT * FROM Table" Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.OpenstrSQL, objConn
Do While Not objRS.EOF
'do something
objRS.MoveNext
Loop
%
' ASP.NET Example
%@ Import Namespace="System.Data" %
%@ Import Namespace="System.Data.SqlClient" %
html
script language="VB" runat="server"
Sub Page_Load(Sender As Object, E As EventArgs)
Dim MyConn As SqlConnection = New SqlConnection("server=(local). . . ")
Dim MyComm As SqlCommand = New SqlCommand("select * from Table", MyConn)
MyConn.Open()
Dim dr As SqlDataReader = MyComm.ExecuteReader()
MyDataGrid.DataSource = dr
MyDataGrid.DataBind()
MyConn.Close()
End Sub
/script
body
ASP:DataGrid id="MyDataGrid" runat="server"
Width="600"
BackColor="#FFFFFF"
BorderColor="#000000"
ShowFooter="false"
CellPadding=2
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#EEEEEE"
EnableViewState="false"
/
/body
/html
结论
选择ASP、PHP还是ASP.NET将最终取决于应用程序的需要,以及运行程序的系统环境。开发人员对于相似编程语言或范例的熟悉程度同样可以作为选择的因素。记住没有完美的方法和个人实际情况可以表明哪种技术是最佳选择。比如,使用ASP.NET为一个Windows服务器创建一个单页面的表单邮件应用程序似乎有些大材小用,但对于ASP来说这是极佳的应用环境。如果一个站点需要同Linux Apache服务器上的mySQL数据库连接,那么使用ASP或者ASP.NET则会显得力不从心。如果能够提前详细考虑用户的个人要求,那么开发人员在这些相互竞争的技术中进行选择的过程则已成功了一半。
谁知道电脑D盘里的ghost是干什么用的?
Ghost软件是美国著名软件公司SYMANTEC推出的硬盘复制工具,与一般的备份和恢复工具不同的是:G host软件备份和恢复是按照硬盘上的簇进行的,这意味恢复时原来分区会完全被覆盖,已恢复的文件与原硬盘上的文件地址不变,而有些备份和恢复工具只起到备份文件内容的作用,不涉及到物理地址,很有可能导致系统文件的不完整,这样当系统受到破坏时,由此恢复不能达到系统原有的状况。在这方面,Ghost有着绝对的优势,能使受到破坏的系统完璧归赵, 并能一步到位。它的另一项特有的功能就是将硬盘上的内容“克隆”到其他硬盘上,这样,可以不必重新安装原来的软件,可以省去大量时间,这是软件备份和恢复工作的一次革新。可见,它给单个PC的使用者带来的便利就不用多说了,尤其对大型机房的日常备份和恢复工作省去了重复和繁琐的操作,节约了大量的时间,也避免了文件的丢失。
Ghost的特点校篏host支持fat12、fat16、fat32、NTFS、HPFS、UNIX、N OVELL等多种文件系统;Ghost在备份文件时,有两种方式:即不压缩方式和压缩方式,在此介绍Ghost特有的压缩方式,它是带地址的压缩方式,而且压缩率相当高,可以达到70%;它的安全和可靠性很好,提供了一个CRC校验用来检查复制盘与源盘是否相同,另外,备份文件可以使用密码保护以增加安全性;Norton Ghost所产生的备份文件也可以保存在多种存储设备之中,如JAZ、ZIP、CD-ROM等等,提供将一个盘或者分区的映像进行多卷存储的功能。
至於带EXE的东西都打不开了,可能是中病毒了,失去了程序连接。可以试试看下面的方法:
方法 1: 适用于所用 Windows 95 以上版本的 Windows (9x/ME/2000/XP/2003)
开始-运行-输入"command" (在 Windows 2000/XP/2003 中,输入"cmd"),回车
在命令行中,依次执行以下命令:
cd %windir%
copy regedit.exe regedit.com
regedit
注册表编辑器打开后,找到以下分支:
HKEY_CLASSES_ROOT\exefile\shell\open\command
双击右侧窗口中的 (默认) 值,设置为 "%1" %* [包含引号]
再找到:
HKEY_CLASSES_ROOT\.exe
双击右侧窗口中的 (默认) 值,设置为 exefile
然后退出注册表编辑器,重启电脑
方法 2: 适用于 Windows 2000/XP/2003
开始-运行-输入"cmd",回车
在命令行中,依次执行以下命令:
ftype exefile="%1" %* [包含引号]
assoc .exe=exefile
重启电脑
(1)如果文件夹选项可以用,试试恢复exe文件的关联:
"控制面板-文件夹选项(也可以打开一个文件夹,选工具-文件夹选项)-文件类型"里选新建,填上“exe”,在“高级”那里选“应用程序” !!!!!!!!!!!!!!!!!!!!!!!!!
(2)一、丢失RUNDLL32.EXE RUNDLL.EXE 这两个文件,只要从别的机器上复制过来就可以解决问题,
二、在你的“启动”项(开始菜单→程序→启动)是否有某一个特定的扩展名的文件,而打开它的程序可能已不存在了。此时,有两种办法:
①、重新安装原来的程序,
②、删除掉多余的文件或程序。
exe文件打不开的问题
这种问题大多是病毒造成的,可以按下面的方法来恢复
1,先将Windows目录下的注册表编辑器“Regedit.exe”改为“Regedit.com”,然后运行它,依次找到HKEY_CLASSES_ROOT\exefile\shell\open\command,双击“默认”字符串,将其数值改为"%1" %*就可以了。pyZ#XH0g|
0I7j{0Ee8oB
2,打开“我的电脑”,进入菜单“工具”→“文件夹选项”→“文件类型”,这时在现有的文件类型中找不到扩展名为exe的文件类型,没关系,单击“新建”弹出“新建扩展名”对话框,在“文件扩展名”框中填入“exe”,接着单击“高级”,在“关联的文件类型”下拉框中选择“应用程序”,单击“确定”返回,最后单击“应用”后关闭对话框。
1qulrXVW
3、系统会自动在Windows目录下建立一个“Regedit.exe”,不要忘了再回去把“Regedit.com”删了哟(不删也没什么影响,只是个垃圾文件而已)。
或者以下这个方法
重新启动计算机,在出现Windows欢迎屏幕前,就是刚刚自检完成以后,马上按下F8键,选择带命令行的安全模式,按下回车键,系统会以安全模式启动。启动后在命令好提示符下输入:
$rS;M:j R;nr
1、输入命令:m-k%Z(H.H5f
assoc.exe=exefile
2、或者输入命令:]trgV2r
#Ma6E;g5t0q5^
ftypeexefile="%1"%*~\P f n7L/i
k6b4}?R'N#XMA
以上两个命令,也可以取其一,其实都是可以恢复exe文件关联的,多提供一种方法,以防万一!9Y'T9V]@v:o
然后重启电脑就ok了。
php ob_start提高多少速度
由于PHP是“一边编译一边执行”的脚本语言,某种程度上也提供了一种相当方便的结果集缓存使用方法—通过动态include相应的数据定义代码段的方式使用缓存。
近来做了一阵子程序性能的优化工作,有个比较有意思的想法,想提出来和大家交流一下。
Cache是“以空间换时间”策略的典型应用模式,是提高系统性能的一种重要方法。缓存的使用在大访问量的情况下能够极大的减少对数据库操作的次数,明显降低系统负荷提高系统性能。相比页面的缓存,结果集是一种“原始数据”不包含格式信息,数据量相对较小,而且可以再进行格式化,所以显得相当灵活。由于PHP是“一边编译一边执行”的脚本语言,某种程度上也提供了一种相当方便的结果集缓存使用方法——通过动态include相应的数据定义代码段的方式使用缓存。如果在“RamDisk”上建缓存的话,效率应该还可以得到进一步的提升。以下是一小段示例代码,供参考。
// load data with cache
function
load_data($id,$cache_lifetime) {
// the return data
$data =
array();
// make cache filename
$cache_filename =
‘cache_‘.$id.‘.php‘;
// check cache file‘s last modify time
$cache_filetime = filemtime($cache_filename);
if (time() -
$cache_filetime = $cache_lifetime) {
//** the cache is not expire
include($cache_filename);
} else {
//** the cache is
expired
// load data from database
// ...
while
($dbo-nextRecord()) {
// $data[] = ...
}
// format
the data as a php file
$data_cache = "
while (list($key, $val) =
each($data)) {
$data_cache .= "\$data[‘$key‘]=array(‘";
$data_cache .= "‘NAME‘=\"".qoute($val[‘NAME‘])."\","
$data_cache .= "‘VALUE‘=\"".qoute($val[‘VALUE‘])."\""
$data_cache .= ";);\r\n";
}
$data_cache = "?\r\n";
// save the data to the cache file
if ($fd =
fopen($cache_filename,‘w+‘)) {
fputs($fd,$data_cache);
fclose($fd);
}
}
return $data;
}
? 适用情况:
1.数据相对比较稳定,主要是读取操作。
2.文件操作要比数据库操作快。
3.复杂数据访问,大数据量访问,密集数据访问,系统数据库负载极重。
4.Web/DB分离结构或者多Web单DB结构。
未经证实的问题:
1.并发访问时对文件的读写是否会引起锁定问题。
2.涉及到的数据文件太多时,性能如何。
扩展思路:
1.生成JavaScript数据定义代码,在客户端调用。
2.还未想到……
望共同探讨。
缓存
如果你想要让自己庞大的PHP应用有更好的性能表现,采用缓存也是一种很好的方法。现在已经有许多缓存方案可供选择,其中包括:Zend
Cache,APC,和Afterburner Cache。
所有这些产品都属于“缓存模块”。当第一次出现对.php文件的请求时,它们会在Web服务器内存中保存PHP的中间代码,此后就用“经过编译”的版本响应后继的请求。这种方法确实能够改善应用的性能,因为它使得磁盘访问量减低到了最少的程度(代码已经读取和解析),代码直接在内存中运行使得服务器响应请求的速度大大提高。当然,缓存模块还会监视PHP源文件的变化,必要时重新缓存页面,从而防止了用户得到的页面仍旧由过时的PHP代码生成。由于缓存模块能够明显地降低服务器的负载、提高PHP应用的响应效率,因此它们非常适合于负载较大的网站使用。
如何选择这些缓存产品
Zend Cache是Zend Technologies公司的商业软件,而Zend
Technologies就是前面提到的那个为我们提供PHP引擎和免费Zend Optimizer的公司。Zend
Cache确实是名不虚传!对于大型的PHP页面,你可以感觉到第一次运行之后速度就会有所提高,而且服务器也会有更多的可用资源。遗憾的是这个产品并不免费,不过在有些情形下它仍旧是物超所值。
Afterburner Cache是来自Bware Technologies的免费缓存模块,当前这个产品还是Beta版。Afterburner
Cache的做法看起来与Zend Cache差不多,但它对性能的改善程度(还)不能与Zend Cache相比,而且它还不能与Zend
Optimizer一起工作。
APC是Alternative PHP Cache的缩写,它是来自Community
Connect的又一个免费缓存模块。这个产品已经具有足够的稳定性供正式场合使用,而且它看起来也能在很大程度上提高响应请求的速度。
有关压缩
来自Remote
Communications的免费Apache模块mod_gzip就具有为支持这类内容编码的浏览器压缩静态Web内容的能力。对于绝大多数静态Web内容,mod_gzip都非常有效。mod_gzip可以方便地编译到Apache里面,也可以作为DSO使用。据Remote
communications公司说,mod_gzip也能够压缩来自mod_php、mod_perl等的动态内容。我试了一次又一次,但看来还是不行。我看了许多关于mod_gzip的论坛和文章,看来到了mod_gzip的下一个版本(可能是1.3.14.6f)这个问题有望得到解决。在此之前,我们可以在网站的静态部分使用mod_gzip。
然而有时我们确实蹊要压缩动态内容,所以必须找找其他办法。有一种办法是使用class.gzip_encode.php,这是一个可以用来压缩页面内容的PHP类,具体方法是在PHP脚本的开头和末尾调用该类的某些函数。如果要在网站级实现这个方案,可以从php.ini文件的auto_prepend以及auto_append指令调用这些函数。这种方法虽然有效,但它无疑为高负载的网站带来了更多的开销。关于如何使用这个类的详细说明,请参见它的源代码。它的源代码说明相当完善,作者告诉了你所有你必须知道的事情。
PHP
4.0.4有一个新的输出缓存句柄ob_gzhandler,它与前面的类相似,但用法不同。使用ob_gzhandler时要在php.ini中加入的内容如下:
output_handler = ob_gzhandler
;
这行代码使得PHP激活输出缓存,并压缩它发送出去的所有内容。如果由于某种原因你不想在php.ini中加上这行代码,你还可以通过PHP源文件所在目录的.htaccess文件改变默认的服务器行为(不压缩),语法如下:
php_value
output_handler ob_gzhandler
或者是从PHP代码调用,如下所示:
ob_start("ob_gzhandler");
采用输出缓存句柄的方法确实非常有效,而且不会给服务器带来什么特殊的负荷。但必须注意的是,Netscape
Communicator对压缩图形的支持不佳,因此除非你能够保证所有用户都使用IE浏览器,否则你应该禁止压缩JPEG和GIF图形。一般地,对于所有其他文件,这种压缩都有效,但建议你针对各种浏览器都分别进行测试,特别是当你使用了特殊的插件或者数据查看器时这一点尤其重要。
阅读提示:PEAR 的缓冲包提供了缓冲动态内容,数据库查询和 PHP 函数调用的框架。本文介绍如何采用 PEAR 来缓冲 PHP 程序
采用 PEAR 来缓冲 PHP 程序
PHP 世界中缓冲是一个热门的话题,因为 PHP 产生的动态页面,每次用户请求都需要重新计算,不论请求的结果是否一样,同时,PHP
每次都会编译一次脚本。这样的超负荷运转对一个流量很高的网站来说肯定难以忍受。幸运的是, Web 的结果可以缓冲,而不需要重新运行和编译脚本,商品化的产品像
ZendCache 或者开源的 Alternate PHP Cache都提供了把 PHP 脚本编译为字节代码并缓冲的办法。
PEAR
的缓冲包提供了缓冲动态内容,数据库查询和 PHP 函数调用的框架。
就像 Perl 有 CPAN, TeX 有 CTAN,PHP
也有自己的中心资源库,存放类,库和模块。这个库称为 PEAR(PHP Extension and Add-On
Repository)。
本文假设你已经安装了 PEAR 环境,如果没有的话,可以去 PHP 网站下载。PEAR
的缓冲包包含一个总体的缓冲类和几个特别的子类。缓冲类使用容器类来存贮和管理缓冲数据。
下面是 PEAR
缓冲当前所包含的容器,以及各自的参数:
file -- file 容器在文件系统存储了缓冲的数据,是最快的容器。
cache_dir
-- 这是容器存储文件的目录。
filename_prefix -- 缓冲文件的前缀,例如:"cache_"。
shm -- shm
容器把缓冲数据放入共享内存,基准测试显示,目前的实现下,这个容器的速度要比文件容器慢。
shm_key --
共享内存使用的键值。
shm_perm -- 使用共享内存数据段的权限。
shm_size --
分配共享内存的大小。
sem_key -- 信号灯的键值。
sem_perm -- 信号灯的权限。
db --
PEAR 的数据库抽象层。
dsn -- 数据库连接的 DSN 。可以参考 PEAR 的 DB 文档。
cache_table --
表的名字。
phplib -- phplib
容器使用数据库抽象层存储缓冲。
db_class
db_file
db_path
local_file
local_path
ext/dbx
-- PHP
的数据库抽象层扩展,如果像把缓冲存入数据库,可以采用这个容器。
module
host
db
username
password
cache_table
persistent
使用
PEAR Cache 所得到的性能提升取决于你所选择的缓冲容器,例如,把数据库的结果再次存入数据库缓冲中就显得毫无意义。
PEAR Cache
的函数缓冲模块能把任何函数或者方法的结果缓冲,不论是 PHP
的内置函数还是用户自定义函数,他缺省采用文件容器,把缓冲数据放入到一个叫做function_cache 的目录。
Cache_Function
类的构造器可以有三个可选的参数:
$container :缓冲容器的名字。
$container_options
:缓冲容器的数组参数。
$expires:缓冲对象过期的时间(秒数)。
普通的函数调用采用 Cache_Function 类的
call() 方法时,就能触发缓冲。调用 call()
很容易,的一个参数是函数的名字,然后是函数的参数,第二个参数是要调用函数中的第一个,依此类推,我们来看例子:
例1
缓冲函数和方法的调用
// 调用 PEAR Cache 的函数缓冲。
require_once
'Cache/Function.php';
// 定义一些类和函数。
class foo {
function
bar($test) {
echo
"foo::bar($test)
";
}
}
class bar {
function
foobar($object) {
echo
'$'.$object.'-foobar('.$object.')
';
}
}
$bar =
new bar;
function foobar() {
echo 'foobar()';
}
//
取得 Cache_Function 对象
$cache = new Cache_Function();
// 对 foo
类的静态函数 bar() 作缓冲(foo::bar())。
$cache-call('foo::bar',
'test');
// $bar-foobar()
$cache-call('bar-foobar',
'bar');
$cache-call('foobar');
?
下面我们采用
Cache_Output 来把输出作缓冲:
例2 缓冲脚本的输出
// 加载 PEAR
Cache 的输出缓冲
require_once 'Cache/Output.php';
$cache = new
Cache_Output('file', array('cache_dir' = '.') );
//
计算要缓冲页面的标记,我们假定页面的缓冲取决于
// URL, HTTP GET 和 POST 变量以及
cookies。
$cache_id = $cache-generateID(
array('url' =
$REQUEST_URI, '
post' = $HTTP_POST_VARS, 'cookies' =
$HTTP_COOKIE_VARS) );
// 查询缓冲
if ($content =
$cache-start($cache_id)) {
// 缓冲命中
echo
$content;
die();
}
// 缓冲丢失
// -- 在这里插入内容产生代码
--
// 把页面存入缓冲
echo $cache-end();
?
利用 Cache_Output 类,很容易把一个动态的数据库驱动的网站应用转化为静态,从而极大的提升站点的性能。越来越多的站点在采用 GZIP 压缩
HTML 内容,这样减少了服务器的带宽消耗,对于使用 Modem 上网的用户来说也能受益不少。
Cache_OutputCompression
扩展了 Cache_Output 类的功能,他把 GZIP 压缩的 HTML 内容进行缓冲,从而节省了 CPU 压缩的时间。
阅读提示:在本篇文章中,我们将对PHP应用程序的分析、如何改变脚本代码以及比较优化前后的各种参数值进行简要的介绍。
PHP应用程序的性能优化
使用PHP编程的最大好处是学习这种编程语言非常容易以及其丰富的库。即使对需要使用的函数不是十分了解,我们也能够猜测出如何完成一个特定的任务。
尽管PHP非常简单易学,但我们仍然需要花费一点时间来学习PHP的一些编程技巧,尤其是与性能和内存占用相关的技巧。在PHP中,有许多小技巧能够使我们减少内存的占用,并提高应用程序的性能。在本篇文章中,我们将对PHP应用程序的分析、如何改变脚本代码以及比较优化前后的各种参数值进行简要的介绍。
通过在程序中设置计时的程序,并反复执行这些代码,我们可以获得有关程序执行速度的一组数据,这些数据可以可以用来发现程序中的瓶颈,以及如何进行优化,提高应用程序的性能。
也许读者曾经听说过PEAR库吧。我们将使用PEAR库创建在分析时需要使用的例子,这也是对现有的代码进行分析的最简单的方法,它使我们无需使用商用产品就能对代码进行分析。
我们要使用的库的名字是PEAR::Benchmark,它对于对代码进行分析和性能测试非常有用。这个库提供一个名字为Benchmark_Timer()的类,能够记录一个函数调用和下一个函数调用之间的时间。在对代码的性能进行测试时,我们可以得到一个详细的脚本执行结果,它非常简单,如下所示:
include_once("Benchmark/Timer.php");
$bench
= new Benchmark_Timer;
$bench- start();
$bench-
setMarker('Start of the script');
//
现在处于睡眠状态几分钟
sleep(5);
$bench- stop();
//
从计时器中获得分析信息
print_r($bench-
getProfiling());
?
上面代码执行后的输出如下所示:
Array
(
[0] = Array
(
[name] =
Start
[time] = 1013214253.05751200
[diff] =
-
[total] = 0
)
[1] =
Array
(
[name] = Start of the script
[time] =
1013214253.05761100
[diff] = 9.8943710327148E-05
[total]
= 9.8943710327148E-05
)
[2] =
Array
(
[name] = Stop
[time] =
1013214258.04920700
[diff] = 4.9915959835052
[total] =
4.9916949272156
)
)
上面的数字似乎是一组杂乱无章的数字,但如果程序的规模更大,这些数字就十分地有用了。
也许广大读者也能猜测到,数组的第一个表目是实际调用Benchmark_Timer()类的方法,例如
$bench-
start()、$bench- setMarker()和$bench-
stop(),与这些表目有关的数字是相当简单的,现在我们来仔细地研究这些数字:
[0] = Array
(
[name] = Start
[time] = 1013214253.05751200
[diff] = -
[total] = 0
)
time表目指的是何时对Benchmark_Timer()的start()方法调用的UNIX的timestamp,diff表目表示这次调用和上次调用之间的时间间隔,由于这里没有上一次,因此显示出了一个破折号,total表目指的是自测试开始到这一特定的调用之前代码运行的总的时间。下面我们来看看下一个数组的输出:
[1]
= Array
(
[name] = Start of the script
[time] = 1013214253.05761100
[diff] =
9.8943710327148E-05
[total] = 9.8943710327148E-05
)
从上面的数字我们可以看出,在调用$bench-
start()之后,程序运行了9.8943710327148E-05秒(也就是0.0000989秒)后开始调用$bench-
setMarker(....)。
一次真实的性能测试经历
尽管上面的例子不错,但在对于决定如何优化你的站点代码设计方面,它真的不能算是一个好例子。下面我将用我自己作为网站技术人员的一段亲身经历来说明如何解决性能方面存在的问题。
我并不大理解网站使用的代码,因为它是根据特殊的需求,历经多年开发而成的━━其中的一个模块包括网站转换代码,另一个模块记录网站的使用情况,其他的模块也各有各的作用。我和网站的主要开发者都意识到网站的代码需要优化,但又不清楚问题出在哪儿。
为了尽快地完成任务,我开始研究网站的主要脚本代码,并在全部脚本代码以及其包含文件中添加了一些$bench-
setMarker()命令,然后分析$bench-
getProfiling()的输出,并对得到的结果大吃一惊,原来问题出在一个与获得特定语言名字(例如en代表english)的转换代码的函数调用中,该函数在每个页面上都会被使用数百次。每次调用该函数时,脚本代码都会对一个MySQL数据库进行查询,从一个数据库表中获得真正的语言名字。
于是我们这一类的信息创建了一个缓冲系统。经过短短2天时间的工作,我们使系统的性能得到了很大的提高,第一周内页面的浏览量也因此而增加了40%。当然了,这只是一个有关分析代码能够提高互联网应用或互联网网站性能的例子。
性能测试函数调用
在分析一个脚本或网页(以及其包含文件)时,尽管Benchmark_Timer()特别有用,但它并不科学,因为要获得分析的数据我们必须多次加载脚本,而且它也不是针对某个类或函数调用的。
PEAR::Benchmark库中的另一个被称作Benchmark_Iterator的类能够很好地解决这一个问题,它能够针对特定的函数或类的方法,显示其分析信息。它的用途是能够能够从测试中获得一致的结果,因为我们知道,如果运行一段脚本一次,其运行时间为10秒,并不意味着它每次的运行时间总是10秒。
In
any case, let's see some examples:
//
连接数据库的代码
include_once("DB.php");
$dsn = array(
'phptype'
= 'mysql',
'hostspec' = 'localhost',
'database'
= 'database_name',
'username' =
'user_name',
'password' = 'password'
);
$dbh =
DB::connect($dsn);
function getCreatedDate($id)
{
global
$dbh;
$stmt = "SELECT created_date FROM users WHERE
id=$id";
// 在这里使用PEAR::DB
$created_date = $dbh-
getOne($stmt);
if ((PEAR::isError($created_date)) ||
(empty($created_date))) {
return false;
} else
{
return $created_date;
}
}
include_once
'Benchmark/Iterate.php';
$bench = new Benchmark_Iterate;
//
运行getDate函数10次
$bench- run(10, 'getCreatedDate', 1);
//
打印分析信息
print_r($bench- get());
? 运行上面的代码能够产生与下面相似的结果:
Array
(
[1] = 0.055413007736206
[2] =
0.0012860298156738
[3] = 0.0010279417037964
[4] =
0.00093603134155273
[5] = 0.00094103813171387
[6] =
0.00092899799346924
[7] = 0.0010659694671631
[8] =
0.00096404552459717
[9] = 0.0010690689086914
[10] =
0.00093603134155273
[mean] = 0.0064568161964417
[iterations]
= 10
)
上面的这些数字很好理解,mean条目表示getCreatedDate()函数10次运行的平均时间。在进行实际测试时,应该至少运行1000次,但这个例子得出的结果已经足够说明问题了。
怎么分辩文件的文体呢
问的不太清楚呀!
是文件类型吗?
Windows系统文件类型概览[推荐]
大家知道,Windows系统文件按照不同的格式和用途分很多种类,为便于管理和识别,在对文件命名时,是以扩展名加以区分的,即文件名格式为: "主文件名.扩展名"。这样就可以根据文件的扩展名,判定文件的种类,从而知道其格式和用途。例如:
"文件名1.DOC"的扩展名"DOC"表示本文件是一个"Microsoft Word 文档",
"文件名2.XLS"的扩展名"XLS"表示本文件是一个"Microsoft Excel 工作表",
"文件名3.BMP"的扩展名"BMP"表示本文件是一个"BMP格式图像",
"文件名4.MP3"的扩展名"MP3"表示本文件是一个"MP3 格式声音",
"文件名5.MPEG"的扩展名"MPEG"表示本文件是一个"电影文件(MPEG)"。
下面列出Windows系统文件的扩展名及其分类对照表,以备查阅:
1. "323" "H.323 Internet 电话技术"
2. "386" "虚拟设备驱动程序"
3. "ACA" "Microsoft Agent Character File (HTTP format)"
4. "ACF" "Microsoft Agent Character File (HTTP format)"
5. "ACG" "Microsoft Agent 预览文件"
6. "ACL" "自动更正列表文件"
7. "ACS" "Microsoft Agent Character File"
8. "ACW" "辅助功能向导设置"
9. "ADE" "Microsoft Access 项目扩展"
10. "ADN" "Microsoft Access 空白项目模板"
11. "ADP" "Microsoft Access 项目"
12. "AIF" "AIFF 格式声音"
13. "AIFC" "AIFF 格式声音"
14. "AIFF" "AIFF 格式声音"
15. "ANI" "动画光标"
16. "ASA" "活动服务器文档"
17. "ASD" "ASF Stream Description File"
18. "ASF" "Windows Media 音频/视频文件"
19. "ASP" "活动服务器文档"
20. "ASX" "Windows Media 音频/视频快捷方式"
21. "AU" "AU 格式声音"
22. "AUDIOCD" "AudioCD"
23. "AVI" "视频剪辑"
24. "AW" "应答向导文件"
25. "BKF" "Windows 备份文件"
26. "BLG" "性能监视器文件"
27. "BMP" "BMP 图像"
28. "CAT" "安全编录"
29. "CDA" "CD 音频曲目"
30. "CDF" "频道文件"
31. "CDX" "活动服务器文档"
32. "CER" "安全证书"
33. "CHK" "还原了文件碎片"
34. "CHM" "已编译的 HTML 帮助文件"
35. "CLP" "剪贴板剪贴"
36. "CNF" "快速拨号"
37. "COL" "HTML 帮助文件"
38. "CPL" "控制面板扩展"
39. "CRL" "证书吊销列表"
40. "CRT" "安全证书"
41. "CSS" "级联样式表文档"
42. "CSV" "Microsoft Excel 逗号分隔值文件"
43. "CUR" "光标"
44. "DB" "数据库文件"
45. "DCS" "数据库内容源"
46. "DER" "安全证书"
47. "DESKLINK" "DESKLINK 文件"
48. "DET" "Office Data File"
49. "DIB" "BMP 图像"
50. "DIC" "文本文档"
51. "DIF" "Microsoft Excel 数据交换格式"
52. "DOC" "Microsoft Word 文档"
53. "DOCHTML" "Microsoft Word HTML 文档"
54. "DOCMHTML" "DOCMHTML 文件"
55. "DOT" "Microsoft Word 模板"
56. "DOTHTML" "Microsoft Word HTML 模板"
57. "DQY" "Microsoft Excel ODBC 查询文件"
58. "DRV" "设备驱动程序"
59. "DSN" "数据源名称"
60. "DUN" "拨号网络文件"
61. "DVD" "DVD"
62. "ECS" "Exchange Server 内容源"
63. "ELM" "Microsoft Office 主题文件"
64. "EMF" "EMF 图像"
65. "EML" "Outlook Express 邮件消息"
66. "EXC" "文本文档"
67. "FAD" "Office 数据文件"
68. "FAV" "FAV 文件"
69. "FCS" "文件共享内容源"
70. "FFA" "文件检索索引"
71. "FFL" "文件检索索引"
72. "FFT" "文件检索索引"
73. "FFX" "文件检索索引"
74. "FON" "字体文件"
75. "FPDOCLIB" "Microsoft FrontPage Document Library"
76"FPHOMEOP" Microsoft FrontPage Home Page Open"
77. "FPHOMEPG" "Microsoft FrontPage 主页"
78. "FPHTML""Microsoft FrontPage HTML 文档"
79. "FPLIST" "Microsoft FrontPage List"
80. "FPNOPUB" "Microsoft FrontPage Dont Publish"
81. "FPOPEN" "Microsoft FrontPage 打开文件"
82. "FPSURVEY" "Microsoft FrontPage Survey"
83. "FPWEB" "FPWEB 文件"
84. "FRG" "FRG 文件"
85. "GIF" "GIF 图像"
86. "GRA" "Microsoft Graph 图表"
87. "GRP" "Microsoft 程序组"
88. "HLP" "帮助文件"
89. "HOL" "Microsoft Outlook Holidays"
90. "HT" "超级终端文件"
91. "HTA" "HTML Application"
92. "HTC" "HTC 文件"
93. "HTM" "HTML Document"
94. "HTML" "HTML Document"
95. "HTT" "HyperText 模板"
96. "HTX""用于 Internet 数据库的 HTML 模板"
97. "ICC" "ICC 配置文件"
98. "ICM" "ICC 配置文件"
99. "ICO" "图标"
100. "ICS" "iCalendar 文件"
101. "IDC" "IDC 文件"
102. "III" "Intel IPhone 兼容"
103. "INF" "安装信息"
104. "INI" "配置设置"
105. "INS" "Internet 通讯设置"
106. "IQY" "Microsoft Excel Web 查询文件"
107. "ISP" "Internet 通讯设置"
108. "ITS" "Internet Document Set"
109. "ITSS" "Microsoft Infotech Storage System File"
110. "IVF" "Indeo 视频文件"
111. "JFIF" "JPEG 图像"
112. "JOB" "任务对象"
113. "JOD" "Microsoft.Jet.OLEDB.4.0"
114. "JPE" "JPEG 图像"
115. "JPEG" "JPEG 图像"
116. "JPG" "JPEG 图像"
117. "JS" "JScript Script File"
118. "JSE" "JScript Encoded Script File"
119. "LDB" "Microsoft Access 记录锁定信息"
120. "LEX" "词典文件"
121. "LOG" "文本文档"
122"LWV" Microsoft Linguistically Enhanced Sound File"
123. "M1V" "电影文件(MPEG)"
124. "M3U" "M3U 文件"
125. "MAD" "Microsoft Access 模块快捷方式"
126. "MAF" "Microsoft Access 窗体快捷方式"
127. "MAG" "Microsoft Access 图表快捷方式"
128. "MAM" "Microsoft Access 宏快捷方式"
129. "MAPIMAIL" "MAPIMAIL 文件"
130. "MAQ" "Microsoft Access 查询快捷方式"
131. "MAR" "Microsoft Access 报表快捷方式"
132. "MAS"Microsoft Access 存储过程快捷方式"
133. "MAT" "Microsoft Access 表快捷方式"
134. "MAU" "MAU 文件"
135. "MAV" "Microsoft Access 视图快捷方式"
136"MAW"Microsoft Access 数据访问页快捷方式"
137. "MDA" "Microsoft Access 加载项"
138. "MDB" "Microsoft Access 应用程序"
139. "MDBHTML" "Microsoft Access HTML 文档"
140. "MDE" "Microsoft Access MDE 数据库"
141. "MDN""Microsoft Access 空白数据库模板"
142. "MDT" "Microsoft Access 加载项数据"
143. "MDW" "Microsoft Access 工作组信息"
144. "MDZ""Microsoft Access 数据库向导模板"
145. "MGC" "媒体目录文件"
146. "MHT" "MHTML Document"
147. "MHTML" "MHTML Document"
148. "MID" "MIDI 序列"
149. "MIDI" "MIDI 序列"
150. "MML" "媒体目录文件"
151. "MMM" "媒体剪辑"
152. "MMW" "媒体目录文件"
153. "MP2" "电影文件(MPEG)"
154. "MP2V" "电影文件(MPEG)"
155. "MP3" "MP3 格式声音"
156. "MPA" "电影文件(MPEG)"
157. "MPE" "电影文件(MPEG)"
158. "MPEG" "电影文件(MPEG)"
159. "MPF" "Media Package 文件"
160. "MPG" "电影文件(MPEG)"
161. "MPV2" "电影文件(MPEG)"
162. "MSC" "Microsoft 通用管理文档"
163. "MSG" "Outlook 项目"
164. "MSI" "Windows Installer 软件包"
165. "MSP" "Windows Installer 修补程序"
166. "MSRCINCIDENT" "Microsoft 远程访问事件"
167. "MSSTYLES" "Windows 可视化风格文件"
168. "MSWMM" "Windows Movie Maker 项目"
169. "NCS" "Lotus Notes 内容源"
170. "NFO" "MSInfo 文档"
171. "NICK" "Office 数据文件"
172. "NK2" "Office 数据文件"
173."NMW""Microsoft NetMeeting T126 兼容白板文档"
174. "NWS" "Outlook Express 新闻消息"
175. "OBD" "OBD 文件"
176. "OBT" "OBT 文件"
177. "OBZ" "OBZ 文件"
178. "OCX" "ActiveX 控件"
179. "ODC" "Microsoft Office 数据连接"
180. "ODCCUBEFILE" "ODCCUBEFILE 文件"
181. "ODCDATABASEFILE" "ODCDATABASEFILE 文件"
182. "ODCNEWFILE" "ODCNEWFILE 文件"
183. "ODCTABLEFILE" "ODCTABLEFILE 文件"
184. "OFT" "Outlook 项目模板"
185. "OPC" "Microsoft 清理向导文件"
186. "OPS" "Office 10 设置文件"
187. "OQY" "Microsoft Excel OLAP 查询文件"
188. "OSS" "Office 搜索"
189. "OST" "Office 数据文件"
190. "OTF" "OpenType 字体文件"
191. "P10" "证书申请"
192. "P12" "Personal Information Exchange"
193. "P7B" "PKCS #7 证书"
194. "P7C" "数字标识文件"
195. "P7M" "PKCS #7 MIME 消息"
196. "P7R" "PKCS #7 证书"
197. "P7S" "PKCS #7 签名"
198. "PAB" "Office 数据文件"
199. "PBK" "拨号电话簿"
200. "PCB" "PCB 文件"
201. "PCD" "Photo CD 图像"
202. "PCX" "PCX 图像"
203. "PFM" "Type 1 字体文件"
204. "PFX" "Personal Information Exchange"
205. "PIP" "Microsoft Office 设置文件"
206. "PKO" "公钥安全对象"
207. "PMA" "性能监视器文件"
208. "PMC" "性能监视器文件"
209. "PML" "性能监视器文件"
210. "PMR" "性能监视器文件"
211. "PMW" "性能监视器文件"
212. "PNG" "PNG 图像"
213. "POT" "Microsoft PowerPoint 模板"
214. "POTHTML" "Microsoft PowerPoint HTML 模板"
215. "PPA" "Microsoft PowerPoint 加载项"
216. "PPS" "Microsoft PowerPoint 幻灯片放映"
217. "PPT" "Microsoft PowerPoint 演示文稿"
218. "PPTHTML" "Microsoft PowerPoint HTML 文档"
219. "PPTMHTML" "PPTMHTML 文件"
220. "PRF" "msrating.dll,-3001"
221. "PST" "Office 数据文件"
222. "PSW" "Password Backup"
223. "PWZ" "Microsoft PowerPoint 向导"
224. "QDS" "目录查询"
225. "RAT" "msrating.dll,-3000"
226. "RDP" "远程桌面连接"
227. "REG" "注册表项"
228. "RMI" "MIDI 序列"
229. "RNK" "拨号快捷方式"
230. "RQY" "Microsoft Excel OLE DB 查询文件"
231. "RTF" "RTF 格式"
232. "RWZ" "Office 数据文件"
233. "SC2" "Microsoft Schedule+ 应用程序"
234. "SCD" "Microsoft Schedule+ 应用程序"
235. "SCH" "Microsoft Schedule+ 应用程序"
236. "SCP" "文本文档"
237. "SCT" "Windows Script Component"
238. "SDB" "Appfix 软件包"
239. "SHB" "将快捷方式插入到文档"
240. "SHS" "片段对象"
241. "SHTM" "HTML Document"
242. "SHTML" "HTML Document"
243. "SLK" "Microsoft Excel SLK 数据导入格式"
244. "SLL" "SLL 文件"
245. "SND" "AU 格式声音"
246. "SNP" "Snapshot 文件"
247. "SPC" "PKCS #7 证书"
248. "SPL" "Shockwave Flash Object"
249. "SST" "Microsoft 系列证书存储"
250. "STF" "Microsoft 安装文件"
251. "STL" "证书信任列表"
252. "STM" "HTML Document"
253. "SWF" "Shockwave Flash Object"
254. "SYS" "系统文件"
255. "TCS" "Tahoe Server 内容源"
256. "THEME" "Windows 主题文件"
257. "TIF" "TIF 图像"
258. "TIFF" "TIF 图像"
259. "TTC" "TrueType Collection 字体文件"
260. "TTF" "TrueType 字体文件"
261. "TXT" "文本文档"
262. "UDL" "Microsoft 数据链接"
263. "ULS" "Internet 定位服务"
264. "URL" "Internet 快捷方式"
265. "VBE" "VBScript Encoded Script File"
266. "VBS" "VBScript Script File"
267. "VCF" "vCard 文件"
268. "VCS" "vCalendar 文件"
269. "VXD" "虚拟设备驱动程序"
270. "WAB" "数字标识文件"
271. "WAV" "波形声音"
272. "WAX" "Windows Media 音频快捷方式"
273. "WBK" "Microsoft Word 备份文档"
274. "WCS" "Web 站点内容源"
275. "WEB" "Office 数据文件"
276. "WEBPNP" "Webpnp"
277. "WHT" "Microsoft NetMeeting 旧白板文档"
278. "WIZ" "Microsoft Word 向导"
279. "WIZHTML" "Microsoft Access HTML 模板"
280. "WLL" "WLL 文件"
281. "WM" "Windows Media 音频/视频文件"
282. "WMA" "Windows Media 音频文件"
283. "WMD" "Windows Media Player 下载软件包"
284. "WMF" "WMF 图像"
285. "WMP" "Windows Media Player 文件"
286. "WMS" "Windows Media Player 外观文件"
287. "WMV" "Windows Media 音频/视频文件"
288. "WMX" "Windows Media 音频/视频快捷方式"
289. "WMZ" "Windows Media Player 外观程序包"
290. "WPS" "WPS 文件"
291. "WRI" "写入文档"
292. "WSC" "Windows Script Component"
293. "WSF" "Windows Script File"
294. "WSH" "Windows Script Host Settings File"
295. "WTX" "文本文档"
296. "WVX" "Windows Media 音频/视频快捷方式"
297. "XLA" "Microsoft Excel 加载宏"
298. "XLB" "Microsoft Excel 工作表"
299. "XLC" "Microsoft Excel 图表"
300. "XLD" "Microsoft Excel 5.0 对话框编辑表"
301. "XLK" "Microsoft Excel 备份文件"
302. "XLL" "Microsoft Excel XLL 加载宏"
303. "XLM" "Microsoft Excel 4.0 宏"
304. "XLS" "Microsoft Excel 工作表"
305. "XLSHTML" "Microsoft Excel HTML 文档"
306. "XLSMHTML" "XLSMHTML 文件"
307. "XLT" "Microsoft Excel 模板"
308. "XLTHTML" "Microsoft Excel HTML 模板"
309. "XLV" "Microsoft Excel VBA 模块"
310. "XLW" "Microsoft Excel 工作区"
311. "XML" "XML 文档"
312. "XNK" "Exchange 快捷方式"
313. "XSL" "XSL 样式表"
314. "ZAP" "软件安装设置"
315. "ZIP" "压缩(zipped)文件夹"
thing,find,kind,behind的那个发音不同?
(二)符合元音字母读音规则的单词
湖 lake[leik]
脸face[feis] 饼(蛋糕)cake[keik]
宫殿palace[plis] 制造make[meik]
箱(子)case[keis] 拿take[teik]
3.ame读[eim] 7.ate读[eit],ade读[eid]
游戏game[ɡeim] 盘子plate[pleit]
安全的safe[seif] 迟(的)late[leit]
同(样的)same[seim] 滑冰skate[skeit]
合成词联想:由name(名字) (大)门gate[ɡeit]
联想family['fmili]家;再 年级(等级)grade[ɡreid]
联想family name姓氏 日期读date[deit]
4.ane读作[ein] 8.ave读[eiv]
仙鹤,吊车读crane[krein] 戴伟(男名)Dave[deiv]
飞机,平面读plane[plein] 救save[seiv]
5.ape读[eip] 勇敢的brave[breiv]
磁带tape[teip] 离(开)leave[li:v]
形(状)shape[eip] 有是特例读have[hv]
同义词联想:由have(有) 联想have的单三现在式 has[hz],过去had[hd]。
(二)e在重读开音节中读[i:]
1.字母e读作[i:] 2.ese读 [i:z]
男他he[hi:] 请please[pli:z]
女她she[i:] (汉语)Chinese[taini:z]
我们we[wi:] 日语(日本人)Japanese
我读me[mi:] [dpni:z]
这,那the读[][i:] 词义联想:由Chinese(汉是读be[bi:] 语)联想China[tain]中国;
体育读P.E[pi:i:] 由Japanese(日语)联想
词义联想:由be(是)联想 Japan[pn]日本。
be的现在式am,is,are. 加字母联想:由please(请)
同音词联想:由be(是)联想 联想please[pi:zd](高兴
bee[bi:](蜜蜂) 的)。
(三)i(y)在重读开音节中读[ai]
1.i和y都读[ai] 天空sky[skai]
我的my[mai]
为什么why[wai] 果(菜,肉)汁juice
害羞的shy[ai] [du:s]
眼睛eye[ai] 办公室读office[fis]
哭cry[krai] 3.ide读[aid]
试try[trai] 骄傲pride[praid]
飞fly[flai] 骑ride[raid]
买buy[bai] (在…)旁边beside
被by[bai] [bisaid]
再见bye[bai] 边side[said]
滑雪ski[ski:] 决定decide[disaid]
喂读hi[hai] (向)导guide[ɡaid]
同音词联想:由eye(眼睛) 4.ike读[aik]
联想I[ai]我 迈克(男名)Mike[maik]
2.ice读[ais] 喜(欢)like[laik]
价格price[prais] 自行车bike[baik]
米rais[rais] 像like[laik]
好的nice[nais] 前缀联想:由like(喜欢)
冰ice[ais] 联想dislike[dislaik](讨厌; 不喜欢)
5.ine读[ain] 后缀联想:由write(写)联想
我的mine[main] writer[rait](作者)。
好的fine[fain] 7.ive读[aiv],ove读[u:v]
发光shine[ain] 到达arrive[raiv]
线line[lain] 驾(驶)drive[draiv]
机器特例读machine
居住live[liv]
[mi:n] 给give[ɡiv]
内服药读作medicine 贵的expensive
[medisin] [ikspensiv]
6.ite读[ait] 提高improve[impru:v]
怀特(姓)White[wait] 后缀联想:由drive(驾驶)联写write[rait] 想driver[draiv](驾驶员)。
喜爱的favourite 8.ise读[aiz]
[feivrit] 练习exercise[ekssaiz]
风筝读kite[kait] 聪(明的)wise[waiz]
同音词联想:由White(怀 惊奇的surprise[spraiz]
特)联想white[wait](白的)。
(四)o在重读开音节和非重读音节中都读[u]
所以so[su] 溜溜球yo-yo[ju ju]
不是no[nu] 零[ziru]
以前ago[ɡu] 电视播放读video[vidiu]
去读go[ɡu] 同音词联想:由no(不是)联照片photo[futu] 想know[nu](知道)
也also[:lsu] 2.oke读[uk]
土豆potato[pteitu] 打破broke[bruk]
番茄tomato[tmɑ:tu] (玩)笑joke[juk]
东京Tokyo[tukiu] 可口可乐读Coke[kuk]
多伦多Toronto 吸烟smoke[smuk]
[trntu] 3.one读[un]
千克kilo[kilu] 电话telephone[telifun]
喂hello[hlu] 骨头读作bone[bun]
钢琴读作[pinu] 一读one[wn]
4.ose读[uz]
没有人none[nn]
那些those[uz] 的单三现在式does[dz]
鼻(子)nose[nuz] 同音词联想:由to(到)联想
关闭close[kluz] too[tu:](也)
丢lose[lu:z]
6.ome读[m]
词义联想:由close关闭联想 一些some[sm]
closed(关着的)。 来come[km]
5.字母o读作[u:]
欢迎welcome[welkm]
做do[du:] ▲家home[hum]
到to[tu:] 合成联想:由home(家)联想
鞋读shoe[u:] homework[humw:k]
到…里into[intu:] (家庭作业)。
(到…)上onto[ntu] ove读[v]
词义联想:由do(做) 手套glove[ɡlv]
(五)u在重读开音节中读[ju:]
1.u和ue读作[ju:] 2.use读[ju:z]
菜单menu[menju:] 原谅excuse[ikskju:z]
大街(林荫道)avenue use用[ju:z]
[vnju:] 3.ute读[ju:t]
▲徒手功夫读kung fu 可爱的cute[kju:t]
[kfu:] 分钟minute[minit]
二、元音字母a、e、i、o、u在重读闭音节中分别读[][e][i][][]
(一)a在重读闭音节中读[]
1.black黑的[blk] (杰克,男名)Jack[k]
back背[bk] 外套jacket[kit]
2.ad,ad读[d] 合成词联想:由back(背)联
高兴的glad[ɡld] 想backpack[bkpk](双肩背包)。
爸dad[dd] 5.and读[nd],ant读[nt]
悲哀的sad[sd] 和and[nd]
坏(的)bad[bd] 手hand[hnd]
沙拉读作salad[sld] 站(忍受)stand[stnd]*
3.an,an读作[n] 沙sand[snd]
一个an[n] 岛屿island[ailnd]
可以can[kn] 地land[lnd]
妇女woman[wumn] 英国England[iɡlnd]
男人man[mn] 乐队读band[bnd]
计划plan[pln] 植物plant[plnt]
球迷(扇子)fan[fn] 大象elephant[elifnt]
音乐家musician 6.ank读[k]
[mju:zin] 银行bank[bk]岸
4.ance读[ɑ:ns] 谢thank[k]
法国france[frɑ:ns] 7.any读[eni]
(跳)舞dance[dɑ:ns] 多many[meni]
公司company[kmpni]
8.arrot读[rt] 班级class[klɑ:s]
胡罗卜carrot[krt] 草读grass[ɡrɑ:s]
鹦鹉woman[wumn] 11.at,at读[t]
9.ask读[ɑ:sk],ast读 帽子hat[ht]
[ɑ:st] 那that[t]
面罩mask[mɑ:sk] 肥的fat[ft]
问读ask[ɑ:sk] 猫cat[kk]
经过past[pɑ:st] 在at[t]
快的fast[frɑ:st] 坐sat[st](sit的过去式)
早餐breakfast[brekfst]
什么what[wt]
同义词联想:由pass(介绍 球拍读bat[bt ]
“经过”)联想pasted 同义词联想:由bat(球拍)
[pɑ:stid](动词“经过”的过 联想racket[rkit] (球拍)
去式)。 由hat(帽子)联想cap[kp]
10.ass读[ɑ:s] (帽)。
玻璃glass[ɡlɑ:s]
传(递)pass[pɑ:s]
(二)e在重读闭音节中读[e]
1.ed,ed读[ed] 4.en,en读作[en]
红的red[red] 何时when[wen]
床bed[bed] 那么then[en]
一百读作hundred 十ten[ten]
[hndrd] 笔pen[pen]
2.elf读[elf] 母鸡hen[hen]
架子shelf[elf] 女子(复数)women
自己self[self] [wimin]
3.ell读[el] 男子(复数)men[men]
拼写spell[spel]* 花园读garden[ɡɑ:(r)dn]
铃bell[bel] 5.end读
【obhost怎么样】的内容来源于互联网,如引用不当,请联系我们修改。
,ent读[nt]闻smell[smel] 朋友friend[frend]
卖sell[sel] 修(理mend[mend]
告诉tell[tel] 花费读作spend[spend]*
好(井)well[wel] 学生student[stju:dnt]*
旅行trave[trv] 公寓apartment
饭店hotel[hutel] [pɑ:tmnt]
6.ess读[es]
地址address[dres] 7.et读[et]
衣(服)dress[dres] 忘记forget[fɡet]
象棋chess[tes] 取get[ɡet]
猜guess[ɡes] 秘密secret[si:krit]
商业,事务business 让let[let]
[biznis] 8.even读[i:vn]
词义联想:由dress(衣服)联 晚上evening[i:vni]
想clothes[kluz](衣服); 更even[i:vn]
再联想uniform[ju:nif:m] 加字母联想:由even(更)
(制服)再联想pants 联想event[ivent](比赛项
[pnts](裤子,美国口语); 目)。
再联想short[:ts]短裤)。
(三)i在重读闭音节中读[i]
1.ick和ic读[ik] music [mju:zik]
棒stick[stik] 滴(答)tick[tik]
快(的)quick[kwik]
2.ridge读[ri] 小提琴violin[vailin]
冰箱fridge[fri] 薄的thin[in]
稀饭porridge[pri] 企鹅penguin[peɡwin]
桥读bridge[bri] 由win(获胜)联想
3.ill读[il] winner[win](获胜者)
病ill[il] 5.ind[aind]
药(丸)pill[pil] 找到find[faind]
将要will[wil] 种(类)kind[kaind]
(小)山hill[hil] 想法(思想)mind[maind]
技能,技巧skill[skil]* 在…后面读作behind
词义联想:由will(将要) [bihaind]
联想will的过去式would 6.ing读作[i]
[wud]。 带来bring[bri]
4.in,in读作[in] 东西thing[i]
开始begin[biɡin] 轻松的relaxing
在…里in[in] [rilksi]
孪生(子之一)twin[twin] 唱 sing[si]
获胜win[win] 响(戒指)ring[ri]
海豚dolphin[dfin] 国王king[ki]
参加读join[in]
有趣的interesting 7.ip读[ip]
[intristi] 旅行trip[trip]
早(上)morning[m:ni] (轮)船ship[ip]
兴奋的exciting[iksaiti] 炸土豆条读chips[tips]
●饺子dumpling 8.ish读[i]
[dmpli] 希望wish[wi]
下面的following[flui] 鱼fish[fi]
漂亮的good-looking 英语English[iɡli]
[ɡudluki] 碟(子)dish[di]
在…期间读during 9.is和iss读[is]
[djuri] 小姐Miss[mis]
开始beginning[biɡini] 想(念),(失去)miss[mis]
没(有东西)nothing 网球读作tennis[tenis]
[ni] 近义词联想:由Miss(小姐)
任何事情anything[enii] 联想Ms[mis];再联想
无聊的读boring[b:ri] Mrs[misiz](夫人,太太)。
躺lying[laii](lie的现在分词)
(四)o在重读闭音节中读[]
1.ob,ob读[bb] 3.ong读作[]
鲍勃Bob[rb] 年轻的young[j]
抢(劫)rob[rb] 歌读song [s]
工作读job[b] 强的strong[str]
2.ock读[k] 错的wrong[r]
钟表clock[klk] 沿着along[l]
锁lock[lk] 长的long[l]
点钟oclock[klk] 4.ot,ot读[t]
(短)袜sock[sk] 许多 lot[lt]
摇滚乐读rock[rk] 不not[nt]
同义词联想:由clock(钟表) 忘记forgot[fɡt]
联想[lɑ:m]clock(闹钟)。 热(的)hot[ht]
机器人[rubt]
(五)u在重读闭音节中读[]
1.uch读[] 同音词联想:由sun(太阳)
这样such[s] 联想son[sn] (儿子)。
(许)多much[m] us读[s]
2读[p] 我们us[s]
向上up[p] (公共汽)车bus[s]
杯(子)cup[kp] 加plus[pls]
▲跳跃读作jump[kp] ●减minus[mains]
3.un,un读作[n] ●小中巴minibus[minibs]
枪gun[ɡn] 讨论discuss[disks] *
跑run[rn] 5.ut,ut读[t]
太阳sun[sn] 但是but[bt]
玩笑读作fun[fn] 切cut[kt]
合成读作:由sun(太阳) 放置put[put]
联想sunglasses 关(闭)shut[t]
[snɡlɑ:siz](太阳镜)。
三、元音字母在非中毒音节中读 [],[i] 或者不发音
树袋熊koala[kuɑ:l] 孩子children[ildn]
熊猫读panda[pnd] (打)开open[upn]
澳大利亚Australia 小鸡(鸡肉)读chicken
[streilj]* [ikin]
加拿大Canada[knd] 3.et读[it]
非洲Africa[frik] 钱包wallet[wlit]
沙发sofa[suf] ▲街道street[stri:t]
香蕉banana[bnɑ:n] ●安静的quiet[kwait]
照相机读camera 喇叭trumpet[trmpit]
[kmr] 4.字母y读作[i]
2.en,en读作[n] 容易easy[i:zi]
经常often[fn] (快)乐(的)happy[hpi]
听listen[lisn] 业余爱好读hobby[hbi]
多云的cloudy[klaudi]
喜剧comedy[kmdi]
有风的windy[windi] 相当pretty[priti]
没有人nobody[nubdi] 脏(的)dirty[d:ti]
学习study[stdi] 活动activity[ktiviti]
悉尼Sydney[sidni] 6.ly和li都读[li]
调查survey[s:vei] 丑陋的ugly[ɡli]
健康的healthy[heli] 早(的)early[:li]
晴朗的读sunny[sni] 大声地loudly[laudli]
极小的teeny[ti:ni:] 卷(毛的)curly[k:li]
懒惰的lazy[leizi] 不友善的unfriendly
重heavy[hevi] [nfrendli]
电影movie[mu:vi] 花椰菜broccoli[brkli]
5.ty,ty读作[ti] 家(家庭)family[fmli]
同情piti[piti] 仅(仅)only[unli]
城(市)city[siti] 通常usually[ju:uli]
职责duty[dju:ti] 事实上really[rili]
党,(聚会)party[pɑ:ti] 7.ry和rry都读[ri]
渴的thirsty[:sti] 每一every[evri]
空的empty[empti] 很very[veri]
工厂factory[fktri] 8.on,on读作[n]
字典dirtionary 伦敦London[lnn]
[iknri] 狮(子)lion[lain]
图书馆library[laibrri] 原因reason[ri:zn]
国家country[kntri] ▲在…上[n]
记录片documentary 洋葱onion[njn]
[dkjumentri] 波士顿Boston[bstn]
饰品accessory[ksesri] 意见(看法)opinion
草莓strawberry [pinjn]
[str:bri]* 羊肉特例读mutton
抱歉的sorry[sri] [mtn]
(令人担)忧worry[wri]
运送(扛)读carry[kri]
可怕的scary[skεri]
饥饿的hungry[hɡri]
故事story[st:ri]
第二部分 符合辅音字母读音规则的单词
1.b和be都读[b] 体格build[bild]
描述(形容)describe 土地field[fi:ld]
[diskraib] 年长的读old[uld]
俱乐部club[klb] 野的wild[waild]
2.字母d读作[d] 孩子child[taild]
世界world[w:ld] 潮湿的humid[hju:mid]
词word[w:d] 词义联想:由child(孩子)联
胡须beard[bid] 想kid[kid](小孩,年青人。)
鸟bird[b:d] 3.f,fe和ffe都读[f]
疲倦的tired[taid] 牛肉beef[bi:f]
需(要)need[ni:d] 叶(子)leaf[li:f]
拥挤的crowded[kraudid] 妻子wife[waif]
放松的relaxed[rilkst] (小)刀knife[naif]
长颈鹿读giraffe[irf] 6.字母k读作[k]
围巾读作scarf[scarf]* 想think[ik]
4.字母g读作[ɡ] 喝(饮料)drink[drik]
腿部leg[leɡ] 公园park[pɑ:k]
蛋egg[eɡ] 暗(的)dark[dɑ:k]
旗flag[flɡ] 猪肉pork[pk]
包bag[bɡ] 叉fork[f:k]
大的big[biɡ] 办事员clerk[klɑ:k]
猪pig[piɡ] 说话speak[spi:k]*
小径zigzig[ziɡzɡ] 空白表格blank[blk]
5.ge,ge读作[] 牛奶milk[milk]
年龄age[ei] 工作work[w:k]
页page[pei] 后缀联想:由work(工作)联
语言language[lɡwi] 想worker[w:k](工人)
大(的)large[lɑ:] 7.l,ll读作[l]
桔子orange[rin] 邮政mail[meil]
(巨)大(的)huge[hju] 电子邮件e-mail[i:meil]
改变读change[tein] 玩具娃娃读doll[dl]
车轮读wheel[wi:l]
感觉feel[fi:l] 9.m和me都读[m]
女孩girl[ɡ:l] 时间time[taim]
极坏的读awful[:fl] (石)灰lime[lain]
8.le读[l] 奶油cream[kri:m]
人们people[pi:pl] 队(组)team[ti:m]
紫(的)purple[p:pl] 农场farm[fɑ:m]
桌子table[teibl] 臂arm[ɑ:m]
小(的)little[litl] 温暖的warm[w:m]
规则rule[ru:l] 鼓drum[drm]
面(条)noodle[nu:dl] 中等的midium[mi:dim]
文章读作article[ɑ:tikl] 从…读作from[frm]
可怕的terrible[terbl] 游泳swim[swim]
出售读sale[seil] 下午pm[pi:em]
例子example[] 考试exam[iɡzm]
苹果读apple[pl] 学期读term[t:m]
加字母联想:由(桌子) (吉姆男名)Jim[im]
联想vegetable[vetbl] 夫人madam[mdm]
(蔬菜);由rule(规则)联 情景喜剧sitcom[sitkm]
想ruler[ru:l](尺子) 问题problem[prblm]
近义词联想:由(桌子)
联想desk[desk](书桌)
博物馆读作museum 11.p和pe都读[p]
[mju:zim] 希望hope[]
近义词联想:由medium(中 (地)图map[mp]
等的)联想middle[midl] 团体(组)group[ɡru:p]
(中间的)。 汤(羹)soup[su:p]
同音词联想:由Jim(吉姆) 野营camp[kmp]
gym联想[im](体育馆)。 帮助help[help]
10.n和ne都读[n] 便宜的cheap[i:p]
学会learn[l:n] 停止stop[stp]
轮流(转弯)turn[t:n] 12.se和ce读作[s]
干净的(干扫)clean[kli:n] 护士nurse[n:s]
意思mean[mi:n] (钱)包purse[p:s]
(在…)之间 因为because[bikz]
绿(的)green[ɡri:n] 别的else[els]
外国的foreign[frin] 科学science[sains]
杂志magazine[mɡzi:n] (一)张piece[pi:s]
后缀联想:由clean(打扫)联 实践(练习)practice
想clean[kli:n](清洁工)。 [prktis]
许可证licence[laisns]
不同difference[difrns]
13.st[st] T恤衫T-shirt[ti: :t]
最多的most[must] 男(衫)shirt[ :t]
考试(测试)test[test] 卡式录音带盒cassette
最后的last[lɑ:st] [kset]
丢失的lost[l:st] 裙子skirt[sk:t]*
竞争contest[kntest] 单元unit[ju:nit]
主持人host[hust] 直的straight[streit]*
必须must[mst] 漂亮的smart[smɑ:t]
刚才just[st] 甜食dessert[diz:t]
邮件(邮递)post[pust] 参观visit[vizit]
(最)后(的)best[best] 水果fruit[fru:t]
清单读作list[list] 左边的left[left]
14.t和te都读[t] 困难的difficult[difiklt]
西方west[west] 皮带belt[belt]
它it[it] 严格的strict[strikt]*
休息rest[rest] 地方district[distrikt]*
坐sit[sit] 学科;科目subject
前面front[frnt] [sbikt]
(计)数count[kaunt]
5.x读[ks],xt读[kst] 下一个next[nekst]
性别sex[seks] 课文text[tekst]
传真fax[fks] 出租车读taxi[tksi]
狐狸fox[fks]
箱(盒)子box[bks]
更多注意力、快速记忆、快速阅读、思维导图文章
速读速记精华文章汇总
更多福利资料
开年福利!有孩子的你有福了
刻意练习和习得性无助,教你不再是巨婴,文末有福利。
懒惰与勤奋,今日有福利
觉得孩子笨,那是你培养方向和方法错了
习得性无助,你不够成功的根本原因和药
你的表达好不好,看这里
舒适区、学习区、恐慌区,站错区域,玩死你没商量注意力测试,你必须做的舒尔特方格量表:有深度解析
网站性能优化怎么办
一、前端优化
网站性能优化是一个很综合的话题,涉及到服务器的配置和网站前后端程序等各个方面,我只是从实际经历出发,分享一下自己所尝试过的网站性能优化方法。之所以在标题上挂一个web2.0,是因为本文更偏重于中小网站的性能优化,我所使用的系统也是典型web2.0的LAMP架构。
首先讲讲前端的优化,用户访问网页的等待时间,有80%是发生在浏览器前端,特别是页面和页面中各种元素(图片、CSS、Javascript、 flash…)的下载之上。因此在很多情况下,相对于把大量的时间花在艰苦而繁杂的程序改进上,前端的优化往往能起到事半功倍的作用。雅虎最近将内部使用的性能测试工具yslow向第三方公开,并发布了著名的网站性能优化的十三条规则,建议你下载并安装yslow,并作为测评网站优化效果的工具。下面我挑其中特别有价值的具体说明一下优化的方法:
对于第一次访问您网站,尚未在浏览器cache中缓存您网站内容的用户,我们可以做的事情包括:
1)减少一个页面访问所产生的http连接次数
对于第一次访问你网站的用户,页面所产生的http连接次数是影响性能的一个关键瓶颈。
对策:
- 尽量简洁的页面设计,最大程度减少图片的使用,通过放弃一些不必要的页面特效来减少javascript的使用。
- 使用一些优化技巧,比如利用图片的背景位移减少图片的个数;image map技术;使用Inline images将css图片捆绑到网页中。
- 尽量合并js和css文件,减少独立文件个数。
2) 使用gzip压缩网页内容
使用gzip来压缩网页中的静态内容,能够显著减少用户访问网页时的等待时间(据说可达到60%)。主流的web服务器都支持或提供gzip压缩,如果使用apache服务器,只需要在配置文件中开启 mod_gzip(apache1.x)或mod_deflate(apache2.x)即可。凡是静态的页面,使用gzip压缩都能够显著提高服务器效率并减少带宽支出,注意图片内容本身已经是压缩格式了,务必不要再进行压缩。
3)将CSS放在页面顶端,JS文件放在页面底端
CSS的引用要放在html的头部header中,JS文件引用尽量放在页面底端标签的后面,主要的思路是让核心的页面内容尽早显示出来。不过要注意,一些大量使用js的页面,可能有一些js文件放在底端会引起一些难以预料的问题,根据实际情况适当运用即可。
4)使JS文件内容最小化
具体来说就是使用一些javascript压缩工具对js脚本进行压缩,去除其中的空白字符、注释,最小化变量名等。在使用gzip压缩的基础上,对js内容的压缩能够将性能再提高5%。
5)尽量减少外部脚本的使用,减少DNS查询时间
不要在网页中引用太多的外部脚本,首先,一次dns的解析过程会消耗20-120毫秒的时间;其次,如果在页面中引用太多的外部文件(如各种广告、联盟等代码),可能会因为外部文件的响应速度而将你的网站拖得很慢。如果不得不用,那么就尽量将这些脚本放在页脚吧。不过有一点需要提及,就是浏览器一般只能并行处理同一域名下的两个请求,而对于不同子的域名则不受此限制,因此适当将本站静态内容(css,js)放在其他的子域名下(如 static.xxx.com)会有利于提高浏览器并行下载网页内容的能力。
对于您网站的经常性访问用户,主要的优化思路就是最大限度利用用户浏览器的cache来减少服务器的开销。
1)在header中添加过期时间(Expires Header)
在header中给静态内容添加一个较长的过期时间,这样可以使用户今后访问只读取缓存中的文件,而不会与服务器产生任何的交互。不过这样做也存在一些问题,当图片、CSS和js文件更新时,用户如果不刷新浏览器,就无法获得此更新。这样,我们在对图片、css和js文件修改时,必须要进行重命名,才能保证用户访问到最新的内容。这可能会给开发造成不小的麻烦,因为这些文件可能被站点中的许多文件所引用。flickr提出的解决办法是通过url rewrite使不同版本号的URL事实上指向同一个文件,这是一个聪明的办法,因为url级别的操作效率是很高的,可以给开发过程提供不少便利。
要理解为什么这样做,必须要了解浏览器访问url时的工作机制:
a. 第一次访问url时,用户从服务器段获取页面内容,并把相关的文件(images,css,js…)放在高速缓存中,也会把文件头中的expired time,last modified, ETags等相关信息也一同保留下来。
b. 用户重复访问url时,浏览器首先看高速缓存中是否有本站同名的文件,如果有,则检查文件的过期时间;如果尚未过期,则直接从缓存中读取文件,不再访问服务器。
c. 如果缓存中文件的过期时间不存在或已超出,则浏览器会访问服务器获取文件的头信息,检查last modifed和ETags等信息,如果发现本地缓存中的文件在上次访问后没被修改,则使用本地缓存中的文件;如果修改过,则从服务器上获取最新版本。
我的经验,如果可能,尽量遵循此原则给静态文件添加过期时间,这样可以大幅度减少用户对服务器资源的重复访问。
2)将css和js文件放在独立外部文件中引用
将css和js文件放在独立文件中,这样它们会被单独缓存起来,在访问其他页面时可以从浏览器的高速缓存中直接读取。一些网站的首页可能是例外的,这些首页的自身浏览可能并不大,但却是用户访问网站的第一印象以及导向到其他页面的起点,也可能这些页面本身使用了大量的ajax局部刷新及技术,这时可以将 css和js文件直接写在页面中。
3)去掉重复的脚本
在IE中,包含重复的js脚本会导致浏览器的缓存不被使用,仔细检查一下你的程序,去掉重复引用的脚本应该不是一件很难的事情。
4)避免重定向的发生
除了在header中人为的重定向之外,网页重定向常在不经意间发生,被重定向的内容将不会使用浏览器的缓存。比如用户在访问,服务器会通过301转向到,在后面加了一个“/”。如果服务器的配置不好,这也会给服务器带来额外的负担。通过配置apache的 alias或使用mod_rewrite模块等方法,可以避免不必要的重定向。
还有一些,比如使用CDN分发机制、避免CSS表达式等、避免使用ETags等,因为不太常用,这里就不再赘述了。
做完了上述的优化,可以试着用yslow测试一下网页的性能评分,一般都可以达到70分以上了。
当然,除了浏览器前端和静态内容的优化之外,还有针对程序脚本、服务器、数据库、负载的优化,这些更深层次的优化方法对技术有更高的要求。本文的后半部分将重点探讨后端的优化。
二、后端优化
上次写完web2.0网站前端优化篇之后,一直想写写后端优化的方法,今天终于有时间将思路整理了出来。
前端优化可以避免我们造成无谓的服务器和带宽资源浪费,但随着网站访问量的增加,仅靠前端优化已经不能解决所有问题了,后端软件处理并行请求的能力、程序运 行的效率、硬件性能以及系统的可扩展性,将成为影响网站性能和稳定的关键瓶颈所在。优化系统和程序的性能可以从以下的方面来入手:
1)apache、mysql等软件的配置的优化
尽管apache和mysql等软件在安装后使用的默认设置足以使你的网站运行起来,但是通过调整mysql和apache的一些系统参数,还是可以追求更高的效率和稳定性。这个领域中有很多专业的文章和论坛(比如: ),要想掌握也需要进行深入的研究和实践,这里就不重点讨论了。
2)应用程序环境加速
这里仅以我最常应用的php开发环境为例,有一些工具软件可以通过优化PHP运行环境来达到提速的目的,其基本原理大致是将PHP代码预编译并缓存起来,而不需要改变任何代码,所以比较简单,可以将php的运行效率提升50%以上。比较常用的免费php加速工具有:APC( http: //pecl.php.net/package-info.php?package=APC)、Turck MMCache( )、php accelebrator(),还有收费的Zend Performance Suite
3)将静态内容和动态内容分开处理
apache是一个功能完善但比较庞大的web server,它的资源占用基本上和同时运行的进程数呈正比,对服务器内存的消耗比较大,处理并行任务的效率也一般。在一些情况下,我们可以用比较轻量级的web server来host静态的图片、样式表和javascript文件,这样可以大大提升静态文件的处理速度,还可以减少对内存占用。我使用的web server是来自俄罗斯的nginx,其他选择方案还包括lighttpd和thttpd等。
4)基于反向代理的前端访问负载均衡
当一台前端服务器不足以应付用户访问时,通过前端机实现web访问的负载均衡是最快速可行的方案。通过apache的mod_proxy可以实现基于反向代理的负载均衡,这里推荐使用nginx做代理服务器,处理速度较apache更快一些。
5)应用缓存技术提高数据库效能,文件缓存和分布式缓存
数据库访问处理并发访问的能力是很多网站应用的关键瓶颈,在想到使用主从结构和多farm的方式构建服务器集群之前,首先应该确保充分使用了数据库查询的缓存。一些数据库类型(如mysql的innoDB)自身内置对缓存的支持,此外,还可以利用程序方法将常用的查询通过文件或内存缓存起来。比如通过 php中的ob_start和文件读写函数可以很方便的实现文件形式的缓存,而如果你拥有多台服务器,可以通过memcache技术通过分布式共享内存来对数据库查询进行缓存,不仅效率高而且扩展性好,memcache技术在livejournal和Craigslist.org等知名网站应用中都得到了检验。
6)服务器运行状态的检测,找到影响性能的瓶颈所在
系统优化没有一劳永逸的方法,需要通过检测服务器的运行状态来及时发现影响性能的瓶颈,以及可能存在的潜在问题,因为网站的性能,永远取决于木桶中的短板。可以编写一些脚本来检测web服务的运行,也有一些开源的软件也提供了很好的功能
7)良好的扩展架构是稳定和性能的基础
一些技巧和窍门可以帮你度过眼前的难关,但要想使网站具备应付大规模访问的能力,则需要从系统架构上进行彻底的规划,好在很多前人无私的把他们架构
网站的经验分享给我们,使我们可以少走甚多弯路。我最近读到的两篇有启发的文章:
- 从LiveJournal后台发展看大规模网站性能优化方法
- Myspace的六次重构
最后不得不提到程序编码和数据库结构对性能的影响,一系列糟糕的循环语句,一个不合理的查询语句、一张设计不佳的数据表或索引表,都足以会使应用程序运行的速度成倍的降低。培养全局思考的能力,养成良好的编程习惯,并对数据库运行机制有所了解,是提高编程质量的基础。
【obhost怎么样】的内容来源于互联网,如引用不当,请联系我们修改。
网友留言: