因为把公司的电脑搞坏两台,这两天没有工作电脑可用了,所以就不干活,从小图书馆拿了几本书看。其中一本是《高性能网站建设指南─前端工程师技能精髓》。
先说点题外话,这是一本讲前端性能优化的书,但是不看小标题的话,估计会忽悠到许多做后端的同学买下。当然我赞同作者所说的,前端优化解决80%问题的观点,所以如果做后端的同学如果不小心买下了,看看也好的。
总的来说,这本3年前的书所列出的优化规则大多我都熟知,不过每次看书总会有所得。这里记录一个我以前没想到过的优化方法。
两全其美(中文版第59页)
对于脚本或样式表,或者引用外部文件,或者直接在html中内嵌。
前者的优点是可以利用快取(cache),缺点是无快取时(比如用户第一次访问时)多一个http请求。后者的优点是减少了http请求,缺点是无法利用快取,在许多页面使用相同脚本和样式表内容时平白增加了下载量。
对于如何平衡这两者,相信许多同学都有经验。通常来说会倾向于用外部文件,而只在一个页面中使用的脚本和样式就内嵌于html中。另外作为特例,主页可能更适合内嵌(原因参见58页)。
而作者进一步提出了两全其美的办法。
一是加载后下载(post-onload download)。比如在主页中内嵌脚本,并在主页加载完成后的某个空闲时刻加载外部文件。对于当前页面这当然是多余的,因为同样的脚本或样式定义重复了。载入的唯一目的只是为了将外部文件放入快取,从而在载入其他使用外部文件的页面时可以利用快取。考虑到重复载入可能造成的问题,作者提出将这些对外部文件的引用放入一个iframe中,其实这个就是一种预加载方式,所以应该也可以使用XHR等方式来预加载。
进一步的,作者介绍了动态内嵌(dynamic inlining)。以cookie作为指示,如果没有cookie,说明很大可能是第一次访问因而很大可能不存在快取,那么就内嵌脚本和样式(并进行外部文件预加载和设定cookie),而如果已经有cookie,说明很可能已经有快取,那么就引用外部文件。
应该说这个方法是很巧妙的,当然也有一些成本:
1. 服务器端要动态响应,也就是静态html不能胜任,而需要php之类的动态页面技术。当然理论上说服务器只需要根据cookie来选择不同的版本,可以用更轻量级的方式(如apache的mod_rewrite或mod_negoation),配合自动部署系统可以根据源码产生不同部署版本即可。
2. cookie只是一个指示,并不能完全对应快取的状态。实际上目前并没精确的办法来获得某个资源是否存在在快取中的信息(html5草案中的application cache机制或许可以)。而且cookie本身也会失效。如果cookie状态和快取状态不匹配,就不能起到优化的效果,虽然页面仍然能工作。
考虑到这两点,在一般的网站中动态内嵌技术的性价比或许并不是很高。不过如果是像yahoo这样级别的网站,性能可以说榨一点是一点,就确实可以采用了。
分享到:
相关推荐
"我的前端学习总结.7z"这个压缩包文件显然包含了作者在前端学习过程中的笔记和经验总结,这可能包括了HTML、CSS、JavaScript等核心前端技术的学习心得,以及可能涉及到的框架和工具的使用体验。 首先,HTML...
前端发展展望则涉及到对未来前端技术趋势的预测和规划。随着技术的不断进步,前端工程师需要不断学习新的编程语言、框架和工具,同时还要保持对用户体验的敏感度。淘宝网在前端技术的探索上始终保持前瞻性,不仅关注...
"大米前端心得交流分享微信小程序源码.zip" 这个标题表明了这是一个关于前端开发的资源包,特别关注的是微信小程序的开发经验与心得分享。"大米前端"可能是某个开发者或者团队的代号,他们将自己在微信小程序开发...
在进行网站前端优化时,晋城吧针对DiscuzX论坛平台实施了一系列措施,尤其是考虑到服务器位于美国导致的响应延迟问题。以下总结了晋城吧在DiscuzX前端优化方面的重要知识点。 1. 服务器位置与延迟问题: - 晋城吧...
虽然AI是一款强大的矢量图形编辑工具,它的主要功能在于绘制线条、形状以及处理矢量元素,而PS则专长于像素图像处理和切片操作。因此,通常我们会先在AI中完成设计,然后通过特定的方法将设计元素导出到PS中进行切图...
本文主要探讨了前端架构的一些心得和基于editor的编码小技巧。前端架构是构建高效、可维护的Web应用的关键,而编码技巧则是提升开发效率和代码质量的重要手段。 首先,前端架构涉及的内容广泛,包括模块化、组件化...
这个模板可能还包含了预设的博客部分,让前端工程师可以分享他们的学习心得、技术文章或行业见解,进一步展示他们的专业知识和写作能力。博客功能的实现可能依赖于诸如WordPress、Jekyll或Gatsby等静态站点生成器。 ...
【标题】"tj12401101前端开发笔记" 提示我们这是一个关于前端开发的学习资源,可能是某位开发者的学习记录或者教程集合。前端开发是构建互联网应用程序的重要部分,涉及到用户与网站交互的所有视觉元素。在这个笔记...
锚点链接则允许在同一个页面内部快速跳转。除此之外,HTML5还引入了多种用于强调文本的标签,比如、、和等,用于不同的文本格式化需求。 HTML5还支持通过iframe标签嵌入其他网页,允许在当前页面中打开另一个独立的...
JavaScript个人博客网站是一种基于Web技术实现的在线平台,主要用于分享技术知识、个人心得或生活感悟。前端笔记网站则聚焦于前端开发技术的学习和记录,它通常包含HTML、CSS、JavaScript等核心前端技术的实例和讲解...
【柚子培训教育 1.2.1 小程序前端+后端】是一个完整的教育类小程序的源代码包,包含了该应用的前端用户界面和后端服务器逻辑。这个版本号1.2.1表明这是一个已经经过多次迭代和优化的成熟产品。在IT行业中,前后端...
CRM,即客户关系管理,是企业管理和优化与客户交互的核心工具。从开发到完成一个CRM系统,涉及到多个关键环节和知识点,以下是我根据标题、描述和标签总结的CRM系统开发的关键点。 一、需求分析 CRM系统开发的第一...
- **动易CMS**:模板在前端呈现上对新手不太友好,SEO优化也一般。 - **新云CMS**:界面简洁,适合行业站和下载站,但对于新手来说开发难度较大。 - **jtbcCMS**:提供ASPPHP和.NET版本,功能完备且完全开源,适合有...
在讨论开关电源设计心得时,首先需要了解开关电源的工作...在设计过程中,需要综合考虑电路的高速特性、电磁兼容(EMC)性能、热管理、以及安全隔离等问题,并利用现代设计工具进行优化,确保开关电源的性能和可靠性。
【MVVM模式】是Model-View-ViewModel的缩写,是一种前端开发架构模式。在运动软件的开发中,MVVM模式被用来分离视图(View)和模型(Model),通过ViewModel层进行双向数据绑定,使得视图的改变能够实时反映到模型上...
ExtJS是一款基于JavaScript的开源前端框架,它为开发者提供了丰富的UI组件库、数据处理工具以及应用程序架构模式。通过ExtJS,开发者可以构建高性能、可定制的企业级Web应用。ExtJS支持多种布局管理器,如CardLayout...
MySQL则提供数据库服务,对于Web开发者来说,理解和优化SQL查询至关重要,因为数据库性能直接影响到网站的响应速度和用户体验。 JavaScript是前端开发的核心,与PHP配合能够实现动态交互和良好的用户体验。学习Ajax...
JavaScript是一种重要的前端编程语言,用于实现页面的动态功能。简历中提到的JavaScript和JQuery的使用,展示了工程师对这两种工具的熟练掌握,它们可以创建丰富的交互性,提高用户参与度。JQuery是一个流行的...
根据提供的文件信息,我们可以从中提炼出与IT行业相关的知识点,主要集中在两个方面:一是关于毕业实习的心得体会,二是实习期间具体从事的工作内容——网站美工。下面将围绕这两个方面展开详细论述。 ### 毕业实习...
CSS3则提供了更多的样式控制,如多列布局、过渡效果、动画、媒体查询等,使网站设计更加丰富多彩且响应迅速。 二、自适应响应设计 自适应响应设计是此模板的一大亮点,它能确保网站在不同屏幕尺寸的设备上都能良好...