快速加载网页

时间:2009-02-25 06:06:02

标签: php javascript mysql ajax

我们正计划开发一个新网站。我们的目标是加载网页 很快。我们需要遵循的所有技术是什么。

任何人都可以给我很好的建议,论坛链接或文章。

我们的平台是PHP,MySQL,Javascript和AJAX。

14 个答案:

答案 0 :(得分:21)

加快网站加载时间的最佳指南之一:

http://developer.yahoo.com/performance/rules.html


更新:Google现在也有一个很好的指南

http://code.google.com/speed/page-speed/docs/rules_intro.html

还有更好的addon for Firefox。到目前为止,在我的测试中,Google的Page Speed插件远远超过了YSlow。它提供了更详细的分析和更明智的建议(而不是为YSlow等小型网站推荐CDN)

答案 1 :(得分:16)

一个有用的工具是YSlow,它是Yahoo的一个工具,可帮助识别网页性能问题。此外,雅虎的Best Practices for Speeding Up Your Web Site是一个很好的列表。

但是,请参阅Jeff的博客文章Yahoo's problems are not your problems,了解有关此问题的一些观点。

答案 2 :(得分:5)

缓存缓存缓存。

memcached

APC

选择一个,使用它。无需从数据库中获取所有内容即可大大加快速度。

答案 3 :(得分:4)

雅虎:“将样式表放在首位”,“将脚本放在底部”。

这使我最近的网站比任何其他优化都更快。

答案 4 :(得分:3)

  • 使用CSS精灵来保持HTTP请求倒计时。
  • 确保所有图片尺寸合适。
  • 确保你有一个非常好的主机,上游和下游都很好。
  • 确保您的服务器能够及时执行脚本,您可以使用microtime函数进行检查。
  • 确保您的代码已正确优化。

答案 5 :(得分:3)

根据需要编写尽可能少的代码,但不要太少。

代码少,编译少,发送少,接收少,处理少,显示少。

答案 6 :(得分:3)

1)mod_gzip / mod_deflate!这是一个很容易解决的问题我很惊讶它没有默认打开。

2)使用您的URL播放技巧,以便您可以告诉浏览器永远缓存您的JS和CSS文件。换句话说,构造URL看起来像:

http://www.yourdomain.com/js/mad_scriptz-v123.js

然后使用mod_rewrite并去掉“-v123”:

<IfModule mod_rewrite.c>
    # http://www.thinkvitamin.com/features/webapps/serving-javascript-fast
    RewriteEngine on

    RewriteRule ^/(.*)\-v[0-9.]+\.(css|js|gif|png|jpg|xap)$ /$1.$2  [L]

</IfModule>

现在apache会去寻找“/js/mad_scriptz.js”...每次更改静态内容时,只需提高版本号以强制浏览器重新加载内容。我通常有一个模板变量,其中包含所有内容都绑定的全局版本号。不是最有效的,但适用于我的目的。如果您可以将版本号绑定到构建系统或文件的哈希值,那将是非常甜蜜的。

获取mod_expires,以便所有静态内容从现在开始过期数年:

<IfModule mod_expires.c>
    ExpiresActive On
    # all in seconds...  
    ExpiresByType image/x-icon A2592000
    ExpiresByType image/gif A2592000
    ExpiresByType image/jpeg A2592000
    ExpiresByType image/png A2592000
    ExpiresByType application/javascript A2592000
    ExpiresByType application/x-javascript A2592000
    ExpiresByType application/x-shockwave-flash A2592000
    ExpiresByType application/pdf A2592000
    ExpiresByType text/css A2592000
    ExpiresByType application/rdf+xml A1800
</IfModule>

更新:已经注意到并非所有浏览器或搜索引擎都喜欢gzip内容。不要像我上面建议的那样盲目地打开它。确保你不接受古老的浏览器gzip,即使他们接受它(其中一些将得到压缩的javascript)。 mod_gzipmod_deflate的文档都有适当的示例(我假设他们这样做,或者人们会通过电子邮件发送更改:-)。

我还应该提一下,根据我的经验,如果你在mod_gzip的Apache服务器和世界之间有一个反向代理,你需要注意。 Squid 2.6经常会愚弄Apache而不是gziping的东西应该更糟糕,它会缓存未压缩的版本并将它们提供给可以处理gzip内容的浏览器。 Dunno if 3.0修复此问题,我不知道我的配置是否有问题(怀疑)。请注意: - )

那就是说。打开它。说真的: - )

答案 7 :(得分:1)

使用PHP的分析器确保您的代码以适当的速度执行。如果可以改善性能,则重构(如果可能)。

答案 8 :(得分:1)

一些随机点。

逐步渲染而不是在内存中构建它并在最后发送时给出了明显的印象速度。

您可以执行一些高级缓存技巧,例如前向缓存(这是Akamai大规模执行的操作)以及分离静态和动态内容。

特别是PHP,要小心复制大量数据。 PHP 4因为它是“默认复制”而臭名昭着,但是在PHP 5中传输大量数据仍然有点太容易了。换句话说:不要复制(或创建!)字符串,数组和物品不必要;与他们合作并传递参考。

答案 9 :(得分:1)

除了已经说过的话:

  • 混淆并压缩你的css
  • 混淆并压缩您的javascript
  • 少文件==少http请求==更快网站==将所有css放在一个文件中,将所有javascript放在一个文件中

答案 10 :(得分:1)

压缩所有文件,包括css和js文件也压缩你的php文件。做尽可能少的数据库调用,如前所述缓存所有返回。

答案 11 :(得分:0)

以下是我总觉得有用的一个提示: 如果您有很多小图像,请将它们全部放在一个平铺图像中。在CSS声明中,通过操纵背景的x和y坐标来控制html元素的视口:

.icon {
    background-image:url(static/images/icons.png);
    height:36px;
    width:36px;
}
.food {
    background-position:-52px -8px;
}
.icon_default {
    background-position:-184px -96px;
}

平铺可以用Python脚本完成,如果你有一个可管理的设置,可以手工完成。

Gmail也是这样做的。请参阅:http://mail.google.com/mail/images/2/5/greensky/icons7.png

答案 12 :(得分:0)

帮助雅虎指南(http://developer.yahoo.com/performance/rules.html)中的一些要点的项目是Minify,它在同一空间中使用缩小,包捆绑和条件HTTP服务,并且使用良好设计实践可以显着减少页面加载,尤其是用户体验(与实际页面加载时间不同)。

答案 13 :(得分:0)

1。启用Keep-Alive

HTTP Keep Alive是指在客户端计算机和Web服务器之间发送的消息,要求获取下载文件的权限。启用Keep Alive允许客户端计算机下载多个文件而无需重复请求权限,这有助于节省带宽。

要启用Keep Alive,只需将以下代码复制并粘贴到.htaccess文件中即可。

<ifModule mod_headers.c>
    Header set Connection keep-alive
</ifModule>

2。禁用图像的热链接

当其他网站的图片“热链接”时,它会窃取带宽,从而减慢您的网站速度。为防止其他网站占用您的带宽,您可以将此代码段添加到.htaccess文件中。请记住更改说明your_Domain_name.com的位!

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?your_Domain_name.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ – [NC,F,L]

第3。使用gzip压缩您的网站

Gzip是一种压缩网站文件的简单方法,可以节省带宽并加快页面加载速度。 Gzip的工作原理是将您的文件压缩成zip文件,这对用户的浏览器加载速度更快。用户的浏览器然后解压缩文件并显示内容。这种将内容从服务器传输到浏览器的方法效率更高,节省了大量时间。

只需将以下代码添加到.htaccess文件中即可启用Gzip:

# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

# Or, compress certain file types by extension:

SetOutputFilter DEFLATE

要检查Gzip是否已在您的网站上启用或正常运行,您可以使用Gziptest.com。

4。启用过期标题

Expires标题告诉浏览器他们是否应该从服务器请求特定文件,或者他们是否应该从浏览器的缓存中获取它。

Expires Headers背后的整个想法不仅是为了减少从服务器下载的负载(在未经修改的情况下不断下载同一个文件浪费宝贵的加载时间),而是减少HTTP请求的数量。服务器。

所以在.htaccess文件中包含以下内容

<IfModule mod_expires.c>
    # Enable expirations
    ExpiresActive On 
    # Default directive
    ExpiresDefault "access plus 1 month"
    # My favicon
    ExpiresByType image/x-icon "access plus 1 year"
    # Images
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    # CSS
    ExpiresByType text/css "access plus 1 month"
    # Javascript
    ExpiresByType application/javascript "access plus 1 year"
</IfModule>

5。尽可能用静态HTML替换PHP

PHP非常适合提高网站效率,减少多次输入相同信息的需求。但是,通过PHP调用信息会占用服务器资源,应该用静态HTML替换它不能保存的任何时间

6。在HTTP标头中指定字符集

出于与上述相同的原因,在HTTP响应头中指定字符集很有用,这样浏览器就不必花费额外的时间来计算您正在使用的字符集。

您只需在网站的部分添加UTF-8字符集标记即可。

7。启用输出压缩

压缩可以通过两种方式完成。

Apache实际上有两种压缩选项:

  • mod_deflate 更容易设置并且是标准的。
  • mod_gzip 似乎更强大:您可以预压缩内容。

您的两个文件压缩选项是Deflate和GZIP。

  • Deflate是Apache服务器自动提供的一个选项,设置简单。
  • 另一方面需要安装GZIP,需要更多的工作才能安装。但是,GZIP确实实现了更高的压缩率,因此如果您的网站使用包含大量图像或大文件大小的页面,则可能是更好的选择。

Deflate快速且有效,所以我使用它;如果漂浮你的船,使用mod_gzip。在任何一种情况下,Apache都会检查浏览器是否发送了“Accept-encoding”标头并返回该文件的压缩版或常规版。但是,一些较旧的浏览器可能会遇到问题(更多信息如下),并且您可以添加特殊指令来纠正此问题。

  

zlib.output_compression是否透明地压缩页面。如果   此选项设置为&#34; On&#34;在php.ini或Apache配置中,   如果浏览器发送&#34; Accept-Encoding:gzip&#34;   或&#34;放气&#34;头。

     

PHP默认值:已禁用

在Php.ini中

zlib.output_compression = On

如果您无法更改.htaccess文件,则可以使用PHP返回压缩内容。为您的HTML文件添加.php扩展名,并将此代码添加到顶部:

在PHP中:

<?php 
    if (substr_count($_SERVER[‘HTTP_ACCEPT_ENCODING’], ‘gzip’))
    ob_start(“ob_gzhandler”); else ob_start(); 
?>

本节将打开apache mod_deflate模块,该模块在将text,css和javascript发送到浏览器之前压缩它。这导致较小的下载大小。在.htaccess文件中启用它,使其如下所示:

<IfModule mod_deflate.c>

############################################
## enable apache served files compression
## http://developer.yahoo.com/performance/rules.html#gzip

    # Insert filter on all content
    SetOutputFilter DEFLATE
    # Insert filter on selected content types only
    AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript application/javascript application/x-javascript text/xml application/xml application/xhtml+xml image/x-icon image/svg+xml application/rss+xml application/x-font application/x-font-truetype application/x-font-ttf application/x-font-otf application/x-font-opentype application/vnd.ms-fontobject font/ttf font/otf font/opentype 

    # Netscape 4.x has some problems...
    BrowserMatch ^Mozilla/4 gzip-only-text/html

    # Netscape 4.06-4.08 have some more problems
    BrowserMatch ^Mozilla/4\.0[678] no-gzip

    # MSIE masquerades as Netscape, but it is fine
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

    # Don't compress images
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary

    # Make sure proxies don't deliver the wrong content
    Header append Vary User-Agent env=!dont-vary

</IfModule>

**

8。启用缓存,OPcache和eAccelerator(另一个PHP缓存工具)

Memcache对于减少数据库负载特别有用,而APC或OPcache等字节码缓存引擎非常适合在脚本编译时节省执行时间。

9。利用本机PHP函数

尽可能尝试利用PHP的本机函数,而不是编写自己的函数来实现相同的结果。花一点时间学习如何使用PHP的本机函数不仅可以帮助您更快地编写代码,还可以提高代码效率。

10。切出不必要的计算

当多次使用相同的变量值时,请在开头计算并分配值,而不是为每次使用执行计算。 如果您循环遍历数组,例如,事先将count()存储,请将值存储在变量中,并将其用于测试。这样,您可以避免在每次循环迭代时不必要地触发测试函数。

11。使用Strongest Str函数

虽然str_replace比preg_replace快,但strtr函数比str_replace快四倍。

12。坚持单引号

如果可能,请使用单引号而不是双引号。双引号检查变量,这可能会降低性能。

13。尝试三个等号

由于“= = =”仅检查闭合范围,因此比使用“= =”进行比较要快。

14。使用isset()

相比
  

count(),strlen()和sizeof(),

isset()是一种更快更简单的方法,用于确定某个值是否大于0.

15。删除不必要的课程

如果您不打算多次使用类或方法,那么您并不真正需要它们。如果必须使用类,请确保使用派生类方法,因为它们比基类中的方法更快。

16。关闭数据库连接

在代码中取消设置变量和关闭数据库连接将节省宝贵的内存。

17。限制您的数据库命中

进行查询聚合可以减少数据库的命中数,从而加快运行速度。