【问题标题】:Fast Loading web pages快速加载网页
【发布时间】:2010-10-09 18:02:06
【问题描述】:

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

谁能给我好的建议、论坛链接或文章。

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

【问题讨论】:

  • “快”有多快?您-真的-期望什么样的负载?该应用程序将如何托管?你到底要做什么?编写“足够快”的东西和可以处理 Facebook 规模负载的东西之间存在天壤之别。

标签: php javascript mysql ajax


【解决方案1】:

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

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)

【讨论】:

    【解决方案2】:
    • 使用 CSS 精灵来减少 HTTP 请求的计数。
    • 确保所有图片的尺寸都合适。
    • 确保您有一个非常好的主机,具有良好的上游和下游。
    • 确保您的服务器可以及时执行您的脚本,您可以使用 microtime 功能进行检查。
    • 确保您的代码已正确优化。

    【讨论】:

      【解决方案3】:

      缓存缓存。

      memcached

      APC

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

      【讨论】:

      • 请注意,memcached 和 APC 并不相互排斥——使用 APC 作为操作码缓存并不排除使用 memcached。
      • 是啊,APC肯定是用来做opcode的,其实它也支持缓存数据,很多人没有意识到。 php.net/apc_addphp.net/apc_fetch
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          使用 PHP 分析器确保您的代码以适当的速度执行。如果可以提高性能,请重构(在可能的情况下)。

          【讨论】:

            【解决方案7】:

            一些随机点。

            渐进式渲染,而不是在内存中构建并在最后发送,给人一种独特的印象速度。

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

            特别是对于 PHP,要小心复制大量数据。 PHP 4 因其“默认复制”而臭名昭著,但在 PHP 5 中处理大量数据仍然有点太容易了。换句话说:不要复制(或创建!)字符串、数组和不必要的对象;就地使用它们并传递引用。

            【讨论】:

              【解决方案8】:

              除了已经说过的:

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

              【讨论】:

              • 压缩的 javascript 必须解压缩一段时间。在浏览器 javascript 运行时,这远非快。请改用 http 级压缩。
              • 嗯?解释器并非无法读取压缩的 javascript。它只是取出所有空格、制表符等,并替换局部变量,这样你就有了“a”而不是“myVariable”。另一方面,HTTP 压缩必须由浏览器解压缩,并且是(非常小的)资源税。
              • 视情况而定。我发誓我已经看到了一些“javascript 压缩”,它需要你的 JS,进行“真正的”压缩,Base64 对其进行编码并将混乱存储为一个 javascript 变量。否则我疯了。
              • 我觉得这种技术不太容易维护。
              • @collimarco - 这取决于您的基础架构 - 当您部署到生产环境时,您可能有一些部署工具可以为您完成混淆/压缩的艰苦工作
              【解决方案9】:

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

              【讨论】:

              • 我同意。一个返回多个结果集的数据库调用优于多个单独的数据库调用。
              【解决方案10】:

              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_gzip 和 mod_deflate 的文档都有应该可以正常工作的示例(我认为他们可以,或者人们会通过电子邮件向他们发送更改:-)。

              我还应该提到,根据我的经验,如果您在 mod_gzip 的 Apache 服务器和世界之间有一个反向代理,您需要小心。 Squid 2.6 通常会欺骗 Apache,使其在应该压缩的时候不压缩内容,更糟糕的是,它会缓存未压缩的版本并将它们提供给可以处理 gzip 内容的浏览器。不知道 3.0 是否解决了这个问题,我不知道我的配置是否有问题(怀疑)。请注意:-)

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

              【讨论】:

              • mod_gzip/mod_deflate 在默认情况下没有打开是有充分理由的:并非所有主流浏览器都完美地支持它。谨慎使用。如果您开始收到投诉或(更有可能)流量下降而没有用户说的话,请将其关闭。如果没有,请为您的用户使用智能浏览器感到高兴。
              【解决方案11】:

              Yahoo:“将样式表放在顶部”、“将脚本放在底部”。

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

              【讨论】:

                【解决方案12】:

                这是我一直觉得有用的一个提示: 如果您有很多小图像,请将它们全部放在一个平铺图像中。在您的 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

                【讨论】:

                  【解决方案13】:

                  一个有助于解决 Yahoo! 指南 (http://developer.yahoo.com/performance/rules.html) 中的一些要点的项目是 Minify,它在同一空间中采用缩小、打包和条件 HTTP 服务,与良好的设计实践一起使用可以显着提高减少页面加载,尤其是用户体验(与实际页面加载时间不同)。

                  【讨论】:

                    【解决方案14】:

                    1。启用保活

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

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

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

                    2。禁用图片盗链

                    当其他网站的“热链接”到您的图片时,它会窃取带宽,从而降低您的网站速度。为防止其他站点占用您的带宽,您可以将此 sn-p 代码添加到您的 .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 确实实现了更高的压缩率,因此如果您的网站使用包含大量图片或文件大小较大的网页,那么 GZIP 可能是更好的选择。

                    Deflate 又快又好用,所以我用它;如果它能让你的船漂浮,请使用 mod_gzip。无论哪种情况,Apache 都会检查浏览器是否发送了“Accept-encoding”标头并返回文件的压缩版本或常规版本。但是,一些较旧的浏览器可能会出现问题(更多内容见下文),您可以添加一些特殊指令来解决此问题。

                    zlib.output_compression 是否透明压缩页面。如果 此选项在 php.ini 或 Apache 配置中设置为“On”, 如果浏览器发送“Accept-Encoding: gzip”,页面会被压缩 或“放气”标题。

                    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 模块,该模块在将文本、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.使用最强的 Str 函数

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

                    12.坚持使用单引号

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

                    13.试试三个等号

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

                    14.使用isset()

                    与

                    相比

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

                    isset( ) 是一种更快、更简单的方法来确定一个值是否大于 0。

                    15.删除不必要的类

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

                    16.关闭数据库连接

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

                    17.限制您的数据库点击次数

                    使查询聚合可以减少对数据库的命中次数,从而使事情运行得更快。

                    【讨论】:

                      【解决方案15】:

                      更快加载网页的最佳方法:

                      [据雅虎]

                      1-样式表应该更快地出现在顶部加载网页上。

                      2-避免重定向。

                      3-减少不必要的代码。

                      4-将 CSS 和 JS 放在外部文件中。

                      5-删除重复脚本。

                      来源: https://developer.yahoo.com/performance/rules.html


                      [根据谷歌]

                      1-消除渲染阻塞资源

                      2-适当大小的图像

                      3-延迟离屏图像

                      4-高效编码图像

                      5-以现代格式提供图片

                      6-启用文本压缩

                      7-预连接到所需的来源

                      8-减少服务器响应时间(TTFB)

                      9-避免多页重定向

                      10-预加载密钥请求

                      11-将视频格式用于动画内容

                      12-减少第三方代码的影响

                      14-Kill Lazy 使用外观加载第三方资源。


                      注意:应用提示可以显着减少时间。根据您的需要使用积分。

                      【讨论】:

                        猜你喜欢
                        • 2021-10-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多