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

网站性能的何加优化是一件大事。它涉及多个方面需要照顾,应用其中许多取决于网站本身、程序其复杂性和元素。并提但是高网,还有一些适用于任何站点的站性常用优化方法。

集成 CDN

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

压缩文件

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

对于文件压缩,建议使用 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 应用程序都是独一无二的,因此你需要首先进行性能审核,以准确识别你的网站存在的问题并提出解决问题的正确方法。

人工智能
上一篇:在之前的文章中, 我们讨论过如何在Linux服务器安装各种各样的打印机(当然也包括网络扫描仪)。今天我们将来处理另一端:如何通过桌面客户端来访问网络打印机/扫描仪。网络环境 在这个安装教程中,我们的服务器(Debian Wheezy 7.2版本)的IP地址是192.168.0.10,我们的客户端(Ubuntu 12.04版本)的IP地址是192.168.0.105.注意这两台机器是在同一个网段(192.168.0.0/24).假如我们想允许打印机访问其它网段,我们需要在服务器上修改cupsd.conf文件的以下部分: Order allow,deny Allow localhost Allow from XXX.YYY.ZZZ.*(在上述例子中,我们授予打印机从本地或者任何系统能够访问打印机,这些系统的IPv4地址以XXX.YYY.ZZZ开始。为了验证哪些打印机可以在我们的服务器上适用,我们也可以在服务器上使用lpstat命令,或者浏览网页https://192.168.0.10:631/printers page.root@debian:~# lpstat -a EPSON_Stylus_CX3900 accepting requests since Mon 18 Aug 2014 10:49:33 AM WARSTPDF accepting requests since Mon 06 May 2013 04:46:11 PM WARSTSamsungML1640Series accepting requests since Wed 13 Aug 2014 10:13:47 PM WARST在Ubuntu桌面安装网络打印机 在我们的Ubuntu 12.04的客户端,我们将打开Printing菜单(Dash ->Printing).你会注意到在其它发行版中,这个名字也许会有一点差别(例如会叫做Printers 或者 Print & Fax):还没有打印机添加到我们的客户端:下面是在Ubuntu桌面客户端安装一台网络打印机的一些步骤。1) “Add”按钮将弹出 New Printer 菜单。我们将选择Network printer ->Find Network Printer并输入我们服务器的IP地址,接着点击Find:2) 在最下面我们将会看到可使用的打印机的名称。我们来选择这台三星打印机并按Forward:3) 我们将会被要求填写一些关于我们打印机的信息。当我们输入完成时,将点击 Apply按钮。4) 我们接下来将被询问是否打印一张测试页。让我们点击Print test page吧:这个打印任务将被创建为本地id 2:5)适用我们服务器上的CUPS网络借口,我们可以观察到打印任务已经提交成功了(打印机 ->SamsungML1640系列 ->显示完成任务):我们也可以通过在打印机服务器上运行以下命令显示同样信息: root@debian:~# cat /var/log/cups/page_log | grep -i samsung SamsungML1640Series root 27 [13/Aug/2014:22:15:34 -0300] 1 1 - localhost Test Page - -SamsungML1640Series gacanepa 28 [18/Aug/2014:11:28:50 -0300] 1 1 - 192.168.0.105 Test Page - -SamsungML1640Series gacanepa 29 [18/Aug/2014:11:45:57 -0300] 1 1 - 192.168.0.105 Test Page - -这个page_log日志显示每一页被打印过的信息,只包括哪些用户发送这些打印任务,打印日期&时间,以及客户端的IPv4地址。要安装Epson喷墨和PDF打印机,我们只需重复第1-5的步骤即可,并每一次选择左边的打印队列。例如,在下图中选择PDF打印机:然而,请注意到根据CUPS-PDF 文档中,根据默认:PDF文件将会被放置在打印作业的所有者命名的子目录内。在这个案例中,打印作业的所有者不能被识别(i.e.不会存在服务器中)输出的内容被放置在匿名操作的文件中。这些默认的文件夹可以通过改变在/etc/cups/cups-pdf目录中的Out值和AnonDirName变量来修改。这里,${HOME}被扩展到用户的家目录中:Out ${HOME}/PDFAnonDirName /var/spool/cups-pdf/ANONYMOUS网络打印实例 实例 #1 从Ubuntu12.04中打印,通常在本地用gacanepa(具有相同名字存在打印机服务器上)。打印到PDF打印机之后,让我们来检查打印机服务器上的/home/gacanepa/PDF目录下的内容:root@debian:~# ls -l /home/gacanepa/PDF total 368-rw------- 1 gacanepa gacanepa 279176 Aug 18 13:49 Test_Page.pdf-rw------- 1 gacanepa gacanepa 7994 Aug 18 13:50 Untitled1.pdf-rw------- 1 gacanepa gacanepa 74911 Aug 18 14:36 Welcome_to_Conference_-_Thomas_S__Monson.pdf这个PDF文件被创建时的,权限已经设置为600(-rw-------),这意味着只有打印任务的所有者(在这个例子中是gacanepa )可以访问它们。我们可以通过修改the /etc/cups/cups-pdf.conf文件UserUMask变量的值来改变这种行为。例如,0033的umask值将可以使PDF打印者以及其它所有者拥有创建文件的权限,但是只读权限也会赋予给其它所有者。 root@debian:~# grep -i UserUMask /etc/cups/cups-pdf.conf ### Key: UserUMaskUserUMask 0033对于那些不熟悉umask(有名用户文件创建模式掩码),它作为一组可以用于控制那些为新文件创建时修改默认权限。给予特定的umask值,在计算最终文件的许可权限时,在文件基本权限(0666)和umask的单项按位补码之间进行按位布尔 AND 运算。因此,假如设置一个umask值为0033,那么新文件默认的权限将不是(0033)AND 0666 = 644的值(文件拥有者具有读/写/执行的权限,其他人拥有只读权限)。实例 #2 在Ubuntu12.04执行打印,本地登录用户为jdoe(同样的帐号名称但是服务器上是不存在的)。 root@debian:~# ls -l /var/spool/cups-pdf/ANONYMOUS total 5428-rw-rw-rw- 1 nobody nogroup 5543070 Aug 18 15:57 Linux_-_Wikipedia__the_free_encyclopedia.pdf这个PDF被创建时赋予的权限是666(-rw-rw-rw-),这意味着每个人都可以访问它们。我们可以通过编辑在/etc/cups/cups-pdf.conf文件中的AnonUMask值来改变这种行为。在这一点上,你也许会疑惑:为什么同样安装一台网络打印机,大多数(当然不是全部)当前的Linux桌面发行版都会内置一个打印到文件的功能来允许用户动态创建PDF文件?使用一台网络PDF打印机有以下好处:一个网络打印机(任何类型的)允许你直接从命令行直接打印,无需首先打开文件。在其它操作系统上安装一个网络客户端,一个PDF网络打印机备件,于是系统管理员不必再单独需要安装PDF创建者实用程序(也避免了最终用户安装这些工具存在的风险)。网络PDF打印机允许通过配置权限直接打印一个网络共享,如我们所见的例子。在Ubuntu桌面安装一个网络扫描仪 这里是通过Ubuntu桌面客户端安装和访问一台网络扫描仪的一些步骤。假设网络扫描仪服务器已经启动并运行所述here.1)让我们第一步来检查在我们的Ubuntu客户端主机上是否存在一台可用的扫描仪。没有先前的安装,你将会看到信息提示没有识别到扫描仪. $ scanimage -L2) 现在我们需要启用saned进程,用来预装Ubuntu桌面。要启用它,我们需要编辑/etc/default/saned文件,并设置RUN变量为yes:$ sudo vim /etc/default/saned # Set to yes to start sanedRUN=yes3) 让我们编辑/etc/sane.d/net.conf文件,并在扫描仪安装后添加服务器IP地址:4) 重启saned进程:$ sudo service saned restart 5) 现在让我们来看看扫描仪是否可用: 现在我们可以打开Simple Scan(或者其它扫描工具)并开始扫描文件。我们可以旋转,修剪,和保存生成的图片:总结 拥有一或多台网络打印机或扫描仪在任何办公和家庭网络中都是非常方便适用的,并同时提供了许多好处。例举如下:多用户(从不同的平台/地方)都能够向打印机发送打印作业的队列。由于硬件共享达到了节约成本和维护的作用。我希望该文可以帮助你更充分地利用这些有点。
下一篇:关于iptables有价值的信息很多,但是大多都描述的很复杂。假如你想做些基本的配置,下面的 How To 很适合你。 # iptables -L 列出您当前iptables中在规则。假如您是刚刚建立您的服务器,那么可能此时还没有任何规则,而且您应该看到如下: Chain INPUT (policy ACCEPT) Chain FORWARD (policy ACCEPT) Chain OUTPUT (policy ACCEPT) ◆ 允许建立会话 我们可以允许建立会话来接受流量: # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ◆ 在指定端口上允许入站流量 阻断所有流量您也可以启动系统,但是您可能正在通过SSH工作,所有在您阻断其他流量前有必要允许SSH流量。 为了在22端口号(默认的SSH端口)上的允许流量入站,您可以告诉iptables允许您的网卡接受所有的目的端口为22的TCP流量。 # iptables -A INPUT -p tcp -I eth0 --dport ssh -j ACCEPT 特别的,这将向表中追加(-A)INPUT规则,允许目的端口号为SSH的所有流量进入接口(-i) eth0,以便iptables完成跳转(-j)或动作:ACCEPT 让我们核对下这些规则:(这里仅显示了少数行,您应该看到更多) # iptables -L 现在,让我们允许所有的web流量 # iptables -A INPUT -p tcp -I eth0 --dport 80 -j ACCEPT 检查我们现有的规则 # iptables -L 我们已经指定SSH和web端口为允许通过的TCP流量,但是因为我们还没阻断任何流量,所以到目前为止所有的流量仍然可以进入。 ◆ 阻断流量 一旦一条规则对一个包进行了匹配,其他规则不再对这个包有效。因为我们的规则首先允许SSH和WEB流量,所以只要我们阻断所有流量的规则紧跟其後,我们依然能接受我们感兴趣的流量。大家要做的仅仅是把阻断所有流量的规则放在最後,所以我们需要再次用到它。 # iptables -A INPUT -j DROP 因为我们刚才没有指定一个接口或一个协议,所以除了web和ssh流量外其他任何流量都会被阻断。 ◆ 编辑 iptables 到目前为止我们设置过程中唯一的问题是回环端口(loopbakc)也被阻断了。我们本可以通过指定 -I eth0 来仅仅丢弃eth0上的数据包,但我们也可以为回环端口(loopback)添加一条规则。假如我们追加这条规则,这将太晚了----因为所有的流量已经 被丢弃。我们必须插入这条跪着到第4行。 # iptables -I INPUT 4 -I lo -j ACCEPT 最後2行看起来几乎一样,因此我们可以让iptables列的更详细些。 # iptables -L -v ◆ 日志记录 在上面的例子中,所有的流量都不会被记录。假如您愿意在syslog中记录被丢弃的包, 下面将是最快捷的方式: # iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix iptables denied: --log-level 7 看 提示 段获得更多关于logging的ideas. ◆ 保存 iptables 假如您现在要重新启动机器的话,您的iptables配置将会消失。为了不用每次重新启动时敲入这些命令,您可以保存你的配置,让它在系统启动时自动启动。你可以通过iptables-save 和iptables-restore命令来保存配置。 保存您的防火墙股则到一个文件 # iptables-save >/etc/iptables.up.rules 接着修改 /etc/network/interfaces 脚本自动应用这些规则(末行是添加的) auto eth0 你也可以准备一组规则冰并自动应用它 auto eth0 ◆ 提示 下面的步骤复习了怎样建立你的防火墙规则,并假定它们相对固定(而且对于大多数人来说它们也应该是)。但是假如你要做许多研究工作,你也许想要你的 iptables在你每次重启时保存一次。你可以在 /etc/network/interfaces 里添加像下面的一行: pre-up iptables-restore < /etc/iptables.up.rules post-down iptables-save >/etc/iptables.up.rules 此行将保存规则用于下次启动时使用。 假如你超出了这个指南来编辑iptables,你可能想利用iptables-save和iptables-restore来编辑和测试你的规则。你可以通过使用你喜爱的文本编辑器(此处为gedit)来打开这些规则文件来完成编辑。 # iptables-save >/etc/iptables.test.rules 你会得到一个如下类似的文件(下面是紧接上的例子文件): # Generated by iptables-save v1.3.1 on Sun Apr 23 06:19:53 2006 注意到这些都是减去iptables命令的iptables语句。随意编辑这些命令、完成後保存它们。然後简单的测试下: # iptables-restore < /etc/iptables.test.rules 测试完毕後,假如你还没添加iptables-save命令 到 /etc/network/interfaces 里面,记得不要丢失了你的更改: # iptables-save >/etc/iptables.up.rules ◆ 更详细的日志 # Generated by iptables-save v1.3.1 on Sun Apr 23 05:32:09 2006 请注意 一个名为 LOGNDROP的链在文件顶部。而且,INPUT链底部标准的DROP被替换成了LOGNDROP,同时添加了协议描述so it makes sense looking at the log。最後我们在LOGNDROP链尾部丢弃了这些流量。下面的行告诉我们发生了什么: * --limit 设置记录相同规则到syslog中的次数 ◆ 禁用防火墙 假如您要临时禁用防火墙,您可以通过下面的命令清空所偶的规则: # iptables -F ◆ 轻松配置通过 GUI 新手可以利用 Firetarter(一个gui工具)---仓库中的可用软件(新立德或apt-get 获得)来配置她或他的iptables规则,而需要命令行知识。请查看指南,尽管…… 配置很简单,但是对于高级用户来说可能远远不能满足。然而它对于大多数的家庭用户来说是足够的…… 。(我)建议您使用firestarter在策略表中将出站配置为 “限制”,而将您需要的连接类型(如用于http的80、https的443,msn chat的1683等等)加入白名单。您也可以通过它查看进出您计算机的活动连接…… 。防火墙会一直保持下去一旦通过向导配置完毕。拨号用户必须在向导中指定它在拨号时自动启动。 firestarter主页: http://www.fs-security.com/ (再次, 仓库源中可用, 不需要编译) 指南: http://www.fs-security.com/docs/tutorial.php 个人笔记:不幸运的是,它没有阻断(或询问用户)特定应用/程序的选项……。因此,我的理解是一旦启用了80端口(例如,用于访问网页),那么任何程序都可以通过80端口连接任何服务器、做任何它想做的事……