首页
学习
活动
专区
圈层
工具
发布

慢的不是 Ruby,而是你的数据库

诚然,它的确不如人意,然而这并非致命伤,因为问题的根源在于你的数据库速度缓慢,成为了瓶颈。因此,这个标题也可以改为 “Ruby 虽慢,但对你而言无关紧要”。...然而,在处理更大的数据集时,这种速度差异并非呈线性增长,而是呈现出不规则的变化。...然而,Rails 的魔力使其从此开始使用这一特性。每次页面加载都会导致大约 2 秒钟的数据库查询,占用数据库服务器上的所有 CPU 和 IO。 当然,这是个愚蠢的错误。...而且它会查询五个连接表并且连接到至少一个索引上,而这个索引并不是为此准备的。导致大约 800 毫秒的查询。在每次页面加载时。 未优化的 where、group 和 order 调用。...这也是 Ruby 很少在 Rails(和 / 或 Web)之外使用的原因之一。 [7] 令人惊讶的是,从内存中的 SQLite 中查找比从数据库中查找要慢。

3.3K30

网页加速特技之 AMP

据统计,40%的人会放弃使用加载时间超过3秒的网站。对于加载慢的页面我也是没耐心等待的,同类型网站那么多,为什么不选择加载速度更快体验更好的呢。...要深入了解AMP页面和HTML的差异,还需要更多的测试。 三、AMP如何提升性能? 在静态内容页面测试数据中,AMP页面的加载速度确实更快,那么AMP提升页面加载速度的秘诀是什么捏,我们一起来看看。...6.字体必须有效触发 Web字体非常大,因此Web字体对性能优化是至关重要的。在一个普通的页面中有一些script和样式表,浏览器需要等待这些资源加载完成后开始加载这些大的字体资源。...7.减小样式重计算 修改元素样式时,会触发样式重新计算,这是非常高的性能消耗,因为浏览器需要重新布局整个页面。...AMP加载资源时,最重要的资源最先被加载,images 和 ads 在他们可能被用户看到的情况下才加载,或者在用户快速滚动到他们的位置时加载。

5.5K82
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    第四十九期:闲聊前端性能优化

    浏览器加载页面的过程 这里聊一个非常常见的问题,浏览器加载页面的过程。相信很多人都遇到过这个问题,但是应该很少有人去思考为什么要问这样一个问题? 很简单,理解这个原理对于我们做性能优化非常有帮助。...TCP有一个慢开始、14KB规则。第一个响应包是14kb大小,这是慢开始的一部分,慢开始是一种均衡网络连接速度的算法。逐渐增加发送数据的数据量达到网络的最大带宽。...(懒加载) 是一种将资源标识为非阻塞(非关键)资源并仅在需要时加载它们的策略。...即webpack中的code splitting。 而对于css的优化,除了删除不必要的css之外,一个非常不常见的技巧就是使用媒体查询。 默认情况下,浏览器假设每个指定的样式表都是阻塞渲染的。...通过添加 media属性附加媒体查询,告诉浏览器何时应用样式表。当浏览器看到一个它知道只会用于特定场景的样式表时,它仍会下载样式,但不会阻塞渲染。

    1.1K20

    前端性能优化方案

    外部引用 将JavaScript与CSS设置为外部文件引入而不是直接嵌入到HTML中,由于浏览器的缓存机制,外部文件可以通过浏览器的缓存引入而不需要每次请求重复请求同一个资源文件,这样就使得浏览器在第二次打开页面的速度会快得多...,网站上的用户每个会话具有多个页面视图,并且许多页面都重复使用相同的脚本和样式表,则缓存的外部文件会带来更大的潜在利益。...优化资源加载 样式表位置 根据浏览器渲染的顺序,将CSS在中引入或者嵌入,相对于将CSS放到或者页面底部来说,可以使页面渲染速度加快,这对于页面内容比较丰富的网站或者网络链接较慢时相当重要...脚本位置 浏览器是可以并发请求的,这一特点使得其能够更快的加载资源,然而外部引入JavaScript脚本在加载时却会阻塞其他资源,例如在脚本加载完成之前,它后面的图片、样式以及其他脚本都处于阻塞状态,直到脚本加载完成后才会开始加载...如果将脚本放在比较靠前的位置,则会影响整个页面的加载速度从而影响用户体验。此外当浏览器发现Js脚本时浏览器会立即开始解析脚本,并停止解析文档,因为脚本有可能会改动DOM与CSS,继续解析会浪费资源。

    3K31

    SQLite 的性能优化其实挺难的,但是知道三个技巧让你的应用飞起来!

    SQLite 作为轻量级的数据库,在 Rails 项目中非常常见,特别是开发阶段。但问题来了,SQLite 真有我们想象中那么简单吗?它的性能优化又需要注意什么呢?...想象一下,当有多个请求同时对数据库进行写操作时,瓶颈立马就出现了:写入速度会大大减慢,应用响应也会变得迟钝。那该怎么办呢?一个常见的解决办法就是利用事务。...使用正确的索引:别让查询成了性能杀手SQL 查询慢,这大概是所有数据库开发者的噩梦。如果你发现你的 Rails 应用在执行查询时总是慢半拍,很可能是因为你没有使用合适的索引。...举个例子,你有一个包含数千条记录的用户表,如果你频繁通过 email 字段查询用户信息,而 email 没有被索引,那么每次查询时,SQLite 都要扫描整张表。这显然会导致查询变慢。...这个方法的好处是,它能一次加载一定数量的数据到内存中,避免一次性加载太多数据导致内存溢出。但在一些特定场景下,find_each 并不是最佳选择。比如说,你需要对大量记录进行更新操作。

    2.7K10

    前端开发总结:如何优化网站性能?

    一般在页面一打开默认是一次性加载所有静态资源,如果页面图片较多可使用懒加载减轻第一次加载图片的压力。...这里顺便说一下懒加载实现的方法:将需要加载的图片路径放到元素的data中,比如,然后结合滚动监听,监听页面即将滑到需要加载的元素时,用js将data-image...九、样式表放在头部 经样式表(css)放在网页的HEAD中会让网页显得加载速度更快,因为这样做可以使浏览器逐步加载已将下载的网页内容。...如果将样式表放在底部,浏览器会拒绝渲染已经下载的网页,因为大多数浏览器在实现时都努力避免重绘,样式表中的内容是绘制网页的关键信息。...POST的请求,是不可以在客户端缓存的,每次请求都需要发送给服务器进行处理,每次都会返回状态码200。

    1.2K20

    脑残式网络编程入门(四):快速理解HTTP2的服务器推送(Server Push)

    但是,如果前一个网页就使用这个命令,预加载后一个网页需要的资源,那么用户打开后一个网页时,就会感觉速度飞快。...这显然很不方便,每次修改都要重启服务,而且应用与服务器的配置不应该混在一起。 服务器推送还有另一个实现方法,就是后端应用产生 HTTP 回应的头信息Link命令。...网上测评的结果是,打开这项功能,比不打开时的 HTTP/2 快了8%,比将资源都嵌入网页的 HTTP/1 快了5%。 ? 可以看到,提升程度也不是特别多,大概是几百毫秒。...而且,也不建议一次推送太多资源,这样反而会拖累性能,因为浏览器不得不处理所有推送过来的资源。只推送 CSS 样式表可能是一个比较好的选择。...该系列目录如下: 《不为人知的网络编程(一):浅析TCP协议中的疑难杂症(上篇)》 《不为人知的网络编程(二):浅析TCP协议中的疑难杂症(下篇)》 《不为人知的网络编程(三):关闭TCP连接时为什么会

    83340

    如何使用本地 Docker 更好地开发?我们总结了这八条经验

    将应用级依赖项放到镜像中意味着每次有人添加新依赖项时都必须重新构建镜像,这既耗时又容易出错。相反,我们应该将这些依赖项作为启动脚本的一部分。...这样做并不常见——大多数应用程序和框架都需要一定数量的镜像基础(例如,Rails 需要 Node),但如果你发现自己的 Dockerfile 只包含一个 FROM 行,你就可以不使用这个文件。...4 在命名卷中缓存依赖项 正如第一点所提到的,我们不会将代码依赖项放到镜像中,而是在启动时安装它们。...可以想象的是,如果我们每次重启服务时都从头开始安装 gem/pip/yarn 这样的库,速度会非常慢,所以我们使用 Docker 的命名卷来保持缓存。...所以,我们把 docker-compose.yml 修改一下: volumes: gems: yarn: services: rails: image: appname_rails

    2.9K40

    4.CSS引入方式-CSS进阶

    外部样式表 ,就是把CSS代码和HTML代码单独放在不同文件中,然后在HTML文档中使用link标签来引用CSS样式表。 当样式需要被应用到多个页面时,外部样式表是最理想的选择。...2.内部样式表 我们都知道外部样式表是最理想的CSS引用方式,但这并不意味着内部样式表和行内样式表这两种方式就一无是处。 (1)实际开发 在实际开发中,同一专栏的页面都会有相同的样式。...对于这种公有样式,我们一般会放在外部样式表种。 但有一些页面需要“ 个性样式 ”时,此时我们就不应该把这些“ 个性样式 ”放在公有样式中。...这是因为这些个别样式只应用在几个页面,如果我们把这些个别样式放在公有样式中,会导致所有页面都加载一次个别样式,这样会影响加载速度。...3.行内样式表 在一个样式非常多的页面,我们只在一个小地方进行样式修改(例如:字体加粗、颜色更改等)。 像这些小幅度修改,并且修改只出现一两次,我们更倾向于使用行内样式来实现。

    91941

    浅析YSlow-23条规则

    当应用Gzip压缩到一个纯文本文件时,效果是非常明显的,大约可以减少70%以上的文件大小。这取决于文件中的内容。...(无需再每个页面中都定义一次) 2、减少了页面体积,可以提高页面加载速度。(脚本文件和样式表可以被浏览器单独缓存) 3、提高了脚本和样式表的可维护性。...2、减少DNS查找次数,最理想的方法就是把所以的内容资源都放在同一个域(Domain)中,这样访问整个网站就只需要进行一次DNS查找,这样可以提高性能,节省响应时间。...how 对于AJAX而言,有一些特殊性,并不是所有的AJAX请求都是可以缓存的。 1、POST的请求,是不可以在客户端缓存的,每次请求都需要发送给服务器进行处理,每次都会返回状态码200。...将该文件放在单独的主机中,可以避免在请求该文件时发送cookie。

    2.2K81

    前端面试题之性能优化大杂烩

    移动端性能优化:保持单个文件小于25KB移动网站页面要求下载资源,如果文件过大,会大大减慢页面加载速度。...图片尽量避免使用DataURLDataURL图片没有使用图片的压缩算法文件会变大,并且要解码后再渲染,加载慢耗时长。图片懒加载图片对页面加载速度影响非常大。...比如,当一个页面内容比较多的时候,加载速度就会大大的降低,极大的影响到用户体验 。更有甚者,一个页面可能会有几百个图片,但是页面上仅仅只显示前几张图片,那其他的图片是否可以晚点加载用于提高性能。...CSS 相关优化把样式表放在标签中css放在head标签中比css放在body标签尾部少了一次构建RenderTree, 一次计算布局和一次渲染网页, 因此性能会更好。...不要使用CSS样式表使用替代@import不要使用filter避免元素类型转化(数组中放多种类型不利于v8引擎优化代码)降低css对渲染的阻塞(按需加载,放在dom前面加载)利用pu完成动画

    98430

    CSS引入方式

    多个页面请求的网站速度有所提高,CSS在第一次访问时就被浏览器缓存。...当HTML文件被加载时,引用的文件会同时被加载,而@import引用的文件则会等页面全部下载完毕再被加载,所以有时候浏览@import加载CSS的页面时会没有样式,也就是闪烁现象,网速慢的时候就比较明显...使用标签可以设定rel属性,当rel为stylesheet时表示将样式表立即应用到文档,为alternate stylesheet时表示为备用样式表,不会立即作用到文档,可以通过JavaScript...与@import混用可能会对网页性能有负面影响,在一些低版本IE中与@import混用会导致样式表文件逐个加载,破坏并行下载的方式导致页面加载变慢。...此外无论是哪种浏览器,若在中引入的CSS中继续使用@import加载外部CSS,同样会导致顺序加载而不是并行加载,因为浏览器需要先解析引入的CSS发现@import外部CSS后再次引入外部

    2.1K30

    浅析YSlow-23条规则

    当应用Gzip压缩到一个纯文本文件时,效果是非常明显的,大约可以减少70%以上的文件大小。这取决于文件中的内容。...(无需再每个页面中都定义一次) 2、减少了页面体积,可以提高页面加载速度。(脚本文件和样式表可以被浏览器单独缓存) 3、提高了脚本和样式表的可维护性。...2、减少DNS查找次数,最理想的方法就是把所以的内容资源都放在同一个域(Domain)中,这样访问整个网站就只需要进行一次DNS查找,这样可以提高性能,节省响应时间。...how 对于AJAX而言,有一些特殊性,并不是所有的AJAX请求都是可以缓存的。 1、POST的请求,是不可以在客户端缓存的,每次请求都需要发送给服务器进行处理,每次都会返回状态码200。...将该文件放在单独的主机中,可以避免在请求该文件时发送cookie。

    1.4K30

    5种你未必知道的JavaScript和CSS交互的方法

    直接对样式表进行添加和删除样式规则 我们都非常熟悉使用element.style.propertyName来修改样式,使用JavaScript能帮助我们做到这些,但你知道如何新增或修一个现有的CSS样式规则吗...加载CSS文件 延迟加载图片、JSON、脚本等是用来加快页面显示速度的好方法。...我们可以使用curl.js等这样JavaScript加载器来延迟加载这些外部资源,可你知道CSS样式表也可以延迟加载吗,而且在加载成功后回调函数会给予通知。...当所有的资源都加载后,回调函数就会触发,我可在回调函数里加载它。非常有用!...CSS鼠标指针事件 CSS鼠标指针事件pointer-events属性非常的有趣,它的功效非常像JavaScript,当你把这个属性设置为none时,它能有效的阻止禁止这个元素,你也许会说“这又如何?”

    1.1K20

    前端性能优化(21种优化+7种定位方式)

    参数说明 navigationStart 加载起始时间 redirectStart 重定向开始时间(如果发生了HTTP重定向,每次重定向都和当前文档同域的话,就返回开始重定向的fetchStart的值...,主要包含三个方面的优化:网络优化(对加载时所消耗的网络资源优化),代码优化(资源加载完后,脚本解释执行的速度),框架优化(选择性能较好的框架,比如benchmark)。...所以静态资源度建议放在CDN上,可以加快资源加载的速度。 3.9 懒加载 懒加载也叫延迟加载,指的是在长网页中延迟加载图像,是一种非常好的优化网页性能的方式。...图片懒加载 layzr.js 3.10 iconfont 中文(字体图表),现在比较流行的一种用法。使用字体图表有几种好处 矢量 轻量 易修改 不占用图片资源请求。...像Chrome, FireFox, Safari, IE9+和最新版本的Opera都支持GPU加速,当它们检测到页面中某个DOM元素应用了某些CSS规则时就会开启。

    12.8K76

    前端开发面试题答案(五)

    减少代码间的耦合 让代码保持弹性 严格按规范编写代码 设计可扩展的API 代替旧有的框架、语言(如VB) 增强用户体验 通常来说对于速度的优化也包含在重构中 压缩JS、CSS、image等前端资源(通常是由服务器来解决...) 程序的性能优化(如数据读写) 采用CDN来加速资源加载 对于JS DOM的优化 HTTP服务器的文件缓存 2、列举IE与其他浏览器不一样的特性?...(); 3、99%的网站都需要被重构是那本书上写的?...(7) 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。 (8) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢。...程序优化永远要优化慢的部分,换语言是无法“优化”的。 9、http状态码有那些?分别代表是什么意思?

    2.2K20

    html样式表优点,css样式表的使用有哪些优点?

    CSS简化了网页的格式代码,外部的样式表还会被浏览器保存在缓存里,加快了下载显示的速度,也减少了需要上传的代码数量(因为重复设置的格式将被只保存一次)。...二、易于维护 当我们在全局或共同的地方定义样式时,任何变化都变得容易操作。例如,在网站中,我们使用特定的样式属性显示产品的所有名称。...现在,可以通过在外部样式表中更改产品名称的样式类,我们可以在整个站点中更改样式。我们可以保留多个样式表并根据需要使用它们。使用属性继承方法,可以轻松地维护相同标记的不同样式。...只要修改保存着网站格式的CSs样式表文件就可以改变整个站点的风格特色,在修改页面数量庞大的站点时,显得格外有用。这就避免了一个个网页的修改,大大减少了工作量。...我们可以向蜘蛛提供较少的标签(样式标签)和更多内容以进行索引。 四、下载页面 当浏览器缓存样式表页面时,页面加载变得很快。每次使用相同CSS的同一站点的不同页面时,都不会从服务器加载样式类。

    2.7K30

    Cloudflare的HTTP2优化策略

    而在我们的示例页面中,并行加载与均匀带宽分配意味着浏览器的绝大部分加载过程都停留在头部文件之上,而图像等资源则会减慢阻塞脚本与样式表的传输速度。...在给定组内,资源在共享带宽的同时被下载;而那些图像则被计划在阻塞渲染资源之后,采用并行策略的方式进行加载,但阻塞渲染脚本和样式表也会被并行加载,这样便无法从流水化操作中获得显著的性能提升。...4)Chrome Chrome以及所有基于Chromium内核的浏览器会将资源按照一定优先级顺序排序至待加载列表中,这对于阻塞渲染资源来说非常有效;按顺序加载策略为这些资源的加载过程所带来的好处不言而喻...)中受益;并发“n”组对于依赖并行处理(渐进式图像,视频,音频等)的资源而言非常有用。...接下来通过某种程度的共享,覆盖页面内容的其余部分以平衡应用程序和内容加载。这里的“*If Detectable”警告是说,并非所有浏览器都区分不同类型的样式表和脚本,但这不影响浏览器的加载速度。

    1.7K30

    web性能优化的15条实用技巧

    加载和执行 一.提高加载性能 1.IE8,FF,3.5,Safari 4和Chrome都允许并行下载js文件,当script下载资源时不会阻塞其他script的下载。...,访问他的速度越慢 6.通常我们可以把需要多次使用的对象成员,数组元素,跨域变量保存在局部变量中来改善js性能 三....HTML集合优化 HTML集合包含了DOM节点引用的类数组对象,一直与文档保持连接,每次你需要最新的信息时,都会重复执行查询操作,哪怕只是获取集合里元素的个数。...白屏是浏览器对“无样式闪烁”的修缮。如果浏览器不采用“白屏”机制,将页面内容逐步显示(如Firefox),则后加载的样式表将导致页面重绘重排,将会承担页面闪烁的风险。...建议将TTL值设置为一天 // 客户端收到DNS记录的平均TTL只有最大TTL值的一半因为DNS解析器返回的时间是其记录的TTL的剩余时间,对于给定的主机名,每次执行DNS查找时接收的TTL值都会变化

    73920

    web性能优化的15条实用技巧

    加载和执行 一.提高加载性能 1.IE8,FF,3.5,Safari 4和Chrome都允许并行下载js文件,当script下载资源时不会阻塞其他script的下载。...,访问他的速度越慢 6.通常我们可以把需要多次使用的对象成员,数组元素,跨域变量保存在局部变量中来改善js性能 三....HTML集合优化 HTML集合包含了DOM节点引用的类数组对象,一直与文档保持连接,每次你需要最新的信息时,都会重复执行查询操作,哪怕只是获取集合里元素的个数。...白屏是浏览器对“无样式闪烁”的修缮。如果浏览器不采用“白屏”机制,将页面内容逐步显示(如Firefox),则后加载的样式表将导致页面重绘重排,将会承担页面闪烁的风险。...建议将TTL值设置为一天 // 客户端收到DNS记录的平均TTL只有最大TTL值的一半因为DNS解析器返回的时间是其记录的TTL的剩余时间,对于给定的主机名,每次执行DNS查找时接收的TTL值都会变化

    85050
    领券