2009-02-25 224 views
6

我们正在计划开发一个新的网站。我们的目标是快速加载网页 。我们需要遵循哪些技巧?快速加载网页

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

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

+0

'快'有多快?你真的期望什么样的负载?应用程序将如何托管?你究竟会做什么?在写'速度够快'的东西和可以处理Facebook规模的东西之间有一个世界性的区别。 – 2009-02-25 17:46:07

回答

3
  • 使用CSS精灵来保持HTTP请求的计数。
  • 确保你所有的图片都是体面的大小。
  • 确保你有一个非常好的上游和下游主机。
  • 请确保您的服务器能够及时执行您的脚本,您可以使用microtime功能来检查它。
  • 确保您的代码已正确优化。
5

缓存缓存缓存。

memcached

APC

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

+1

请注意,memcached与APC并不相互排斥 - 使用APC作为操作码缓存并不排除使用memcached。 – 2009-02-25 17:41:58

+0

是的,APC一定要用作操作码,但实际上它也支持缓存数据,很多人都没有意识到。 http://php.net/apc_add http://php.net/apc_fetch – 2009-02-25 18:10:20

15

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

但是,有关此问题的某些观点,请参阅Jeff的博客条目Yahoo's problems are not your problems

+0

+1对于雅虎的问题不是你的问题。 – 2009-02-25 17:41:24

+0

同上肖恩的评论。 – 2009-02-25 17:50:01

+0

+1链接到Jeff的博客。 – altermativ 2009-03-16 14:09:50

2

尽量少写代码,但不要太少。

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

+0

+1布局更清晰/噪音最低 – Niteriter 2009-11-09 14:37:50

1

使用PHP的分析器来确保您的代码以合适的速度执行。重构(如果可能的话)如果性能可以提高。

1

一些随机点。

渐进渲染而不是将其构建在内存中,并在最后发送给出明显的印象的速度。

您可以使用一些高级缓存技巧,例如正向缓存(这是Akamai在大规模上执行的操作)并分隔静态和动态内容。

对于PHP来说,特别要小心复制大量的数据。由于它是“默认复制”,PHP 4因此而臭名昭着,但它仍然有点太容易让大量数据交给PHP 5.换句话说:不要复制(或创建!)字符串,数组和不必要的物品;与他们一起工作并传递参考。

0

除了说了些什么:

  • 模糊处理和压缩你的CSS
  • 模糊处理和压缩你的JavaScript
  • 减档==少的HTTP请求更快== ==网站把你所有的在一个文件中的CSS,把所有的JavaScript在一个文件中
1

压缩所有的文件,包括CSS和JS文件也压缩你的PHP文件。尽可能少的数据库调用,并如前所述缓存所有的回报。

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得到pissy)。 mod_gzipmod_deflate的文档都有应该工作正常的例子(我假设他们这样做,或者人们会通过电子邮件发送更改:-)。

我还应该提一下,根据我的经验,如果你在mod_gzip的Apache服务器和世界之间有一个反向代理,那么你需要小心。 Squid 2.6经常会欺骗Apache,当它应该更糟时,它会缓存未压缩的东西,并将它们提供给可以处理gzip内容的浏览器。不知道,如果3.0修复这个,我不知道它是否在我的配置错误(怀疑它)。只要小心:-)

这就是说。打开它。认真地:-)

1

雅虎:“把样式表放在最前面”,“把脚本放在最下面”。

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

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

0

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