草庐IT

如何加速 Web 应用程序并提高网站性能

粤嵌教育 2023-03-28 原文
网站性能的优化是一件大事。它涉及多个方面需要照顾,其中许多取决于网站本身、其复杂性和元素。但是,还有一些适用于任何站点的常用优化方法。

集成 CDN

内容交付网络(又名 CDN)是一个非常棒的工具,可以集成到你的网站中,因为它可以大大加快你的内容交付速度。因为它是一个分布式服务器网络,所以 CDN 会找到离用户最近的服务器并部署它来交付内容。通过这种方式,内容会走得更短,并提供更好的用户体验。许多 CDN 还具有许多其他可提高网站性能的功能:图像优化、缩小 CSS、代码重组。

压缩文件

每个文件都需要一些时间来加载。问题是,文件越大,加载的时间就越长。结果,该网站以极其缓慢的方式加载并惹恼了用户。解决大体积文件的问题,压缩它们并享受更快的性能!

对于文件压缩,建议使用 Gzip 工具,这是最受信任的工具之一。Gzip 声称可以将文件大小减少多达 70%,并显着提高性能。

启用 Gzip 的方法有很多种,具体取决于你的站点。 例如,你可以在 .htaccess 文件中启用 Gzip 或简单地使用插件。

使用延迟加载

每个网站都包含一定数量的媒体文件(即图像、视频、音频文件),每个元素的加载需要相当长的时间。

延迟加载设计模式使媒体文件仅在进入用户视点时才加载。这意味着,当用户打开页面时,它不会立即加载所有媒体文件,而只会加载页面顶部的媒体文件。而且,当用户向下滚动时,页面将加载更多文件。

这种技术极大地节省了带宽,同时提供了无缝的用户体验。延迟加载还摆脱了不必要的代码执行并减少了内存使用。你还可以将代码分成不同的包,以便不同的页面仅包含代码块。这样,浏览器将只加载用户所在的那些代码。

缩小 CSS 和 JavaScript

当你的站点下载 JavaScript 或 CSS 文件时,会向服务器发送一个 HTTP 请求。发送的请求越多,性能就越慢。为了解决这个问题,你可以合并和缩小文件以减少 HTTP 请求的数量,从而提高性能。

缩小包括消除空格、不必要的代码行或换行符。要执行此过程,请使用 WP Rocket 或 WillPeavy 等可用插件之一。

优化数据库

数据库优化可能是你网站性能的瓶颈。虽然有很多方面需要关注,但最常见的是:

MySQL 查询优化:使用 EverSQL 查询优化器等工具来微调 MySQL 查询并获得有用的建议,

索引:该方法允许更快的行选择和排序,

内存容量:如果内存不足,会降低性能,因此你可能需要寻找更强大的托管解决方案。

请注意,数据库优化也取决于你的站点。 对于某些网站(即电子商务平台),有一些独特的问题需要处理,因此你需要先进行审核,以确定所有需要优化的问题区域。

摆脱阻塞的 JavaScript

许多网站最常见的问题之一是阻止渲染的 JavaScript 文件。 要解决此问题,你可以执行以下操作:

  • 在 HTML 文档中内联外部锁定脚本
  • 使用特殊插件(即 W3 Total Cache)
  • 使用 async 属性使 JavaScript 文件异步
  • 启用缓存
每次用户登陆页面时,浏览器都会加载其内容 - 每次出现新查询时都会这样做。 现在,你能想象每天有多少用户访问你的网站以及浏览器必须加载页面内容的次数吗?

为了防止站点为返回的用户加载相同的内容并节省一些加载时间,请启用浏览器缓存。 至于新用户,网站仍会从头开始加载内容,因为新用户的缓存是空的。尽管如此,完整的浏览器缓存可以将站点速度从 2.6 毫秒提高到 1(甚至 0.9),因此强烈建议使用它。

快速工具:盖茨比

Gatsby 是一个静态站点生成器。 该框架使用初步加载:当用户打开主页时,浏览器在后台模式下加载显示链接到主页的站点其他页面所需的数据。

使用 Gatsby 构建的网站是一个 React 应用程序,因此它只加载有关页面之间差异的数据,而不是完整的页面。 在页面之间的转换过程中,虚拟 DOM 被更新。 通过这种方式,用户可以享受高速加载和流畅的网站性能。

上述性能优化方法是处理网站慢问题的最常用方法。但是,由于每个网站和 Web 应用程序都是独一无二的,因此你需要首先进行性能审核,以准确识别你的网站存在的问题并提出解决问题的正确方法。


有关如何加速 Web 应用程序并提高网站性能的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  4. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  5. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  6. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  7. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  8. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  9. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  10. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

随机推荐