重新审视网站优化的经验法则:JavaScript在现代浏览器中仍然是必不可少的
Revisiting site optimization rules of thumb: JavaScript still necessary at the bottom with modern browsers?
我已经关注web开发趋势超过10年了。我一直坚持的最大的网站优化技术之一是JavaScript位于网站的底部。
我坚持的理由是JavaScript阻止并行下载,并且每个主机名一次只能下载两个组件。如果添加到文档的标题中,这将对您的网站加载时间产生负面影响。
现在,我重新审视了我以前对网站优化的所有想法,我了解到,在现代网络浏览器中,这些都不再是真的了。
例如,从2015年2月起,InternetExplorer11现在每个主机名可以有13个连接(不再只有两个),JavaScript也不再阻止并行下载!这种行为也适用于所有现代浏览器。
虽然可以理解的是,如果在用户与页面交互之前不使用JavaScript,并且无论如何都应该将其放在底部,那么它现在和以前一样重要吗?
我正在浏览电子商务网站,看看他们现在使用的模式:
http://us.karenmillen.com/Karen-Millen-texture-knitted-dress/dp/B00TH9FDQG?class=quickView&field_availability=-2&field_browse=6482174011&id=卡伦+米伦+质感+针织+连衣裙&ie=UTF8&refinementHistory=subjectbin%2color_map%2Price%2size_name&searchNodeID=6482174011&searchPage=1&searchRank=-product_site_launch_date&searchSize=12
看着这座建筑,我差点哭了。超过60个外部JavaScript文件,其中很多在页眉中,而页脚中几乎没有。
但从网络时间线来看,大多数JavaScript文件都是以如此惊人的速度首先加载的,这确实不会影响网站的其他部分。您可以看到所有并行文件同时被下载。
我想这是出于某种特殊的原因,所以我冗长的问题是我错过了什么吗?
对于现代浏览器来说,遵守我们过去的旧规则有多必要?既然我们不再依赖IE6和那个时代为浏览器制定的规则,我们是否应该重新审视我们如何优化网站?
优化技术已经发生了变化,但与此同时,浏览器的JavaScript运行时引擎+用户资源也变得更好了。的确,通过重新访问旧代码可以获得更高的性能,但我怀疑性能的提高是否值得冒意外破坏旧代码的风险(尤其是当涉及IE时)。
很明显,您的代码所做的以及它所迎合的对象会在决策中产生很大的影响。例如,如果您的用户中有很大一部分在使用移动浏览器,那么JavaScript性能就更重要了。
--编辑--
顺便说一句,我想提到国际海事组织,该网站对表演不友好。加载那么多外部(和嵌入式)脚本是不正常的。现在加载大量JS文件的更好方法之一是通过AJAX注入它们。另一种方法是让服务器根据页面将各种JS文件合并为一个文件,然后缓存这些处理过的文件。
不幸的是,并行下载只是JS优化中的众多问题之一。
虽然与以前相比,现代浏览器可以并行下载更多的文件,但浏览器仍然会按顺序解析它们。如果脚本#50(满分100)没有下载,有一个无限循环或其他什么,即使所有99个其他脚本都已完成下载,浏览器仍将等待#50执行,然后再执行其他50个脚本(值得注意的例外是脚本具有defer
或async
属性时)。
此外,使用停滞脚本,您的页面将不会呈现任何内容,只是一个空白的白色页面。这不利于用户体验。是的,我见过这样的代码,你会面对一个空白的白色页面30秒,因为脑子里有十几个脚本决定要慢一些。
仅仅因为浏览器可以做得更快,并不意味着你可以跳过开发人员方面的优化。越快越好,开发人员一直在使用优化来压缩JS的性能。如果你坚持下去,那就最好了。
- 访问布局信息是否也会导致浏览器重排
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 有时数据是't显示在浏览器中
- 使图像在单击时展开到不大于浏览器
- fetch() 函数未在 Ubuntu Chromium 浏览器上定义
- 不同浏览器中的空白字符正则表达式行为
- 在Windows 10中自动执行例行程序(主要与浏览器交互)
- Windows形成web浏览器控件和Javascript更改的DOM
- 如何临时暂停浏览器渲染,然后恢复整个页面
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 禁用(而不是隐藏)浏览器滚动条
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 如何使用modalDialog来显示可以在所有浏览器中工作的弹出窗口
- 当浏览器上的后退按钮到达主页时,我需要删除Class
- 是否可以在浏览器中使用纯JavaScript保存音频流
- jQuery检测浏览器是否支持Zoom
- 重新审视网站优化的经验法则:JavaScript在现代浏览器中仍然是必不可少的