1、谈谈你对重构的理解?
网站重构就是不改变外部行为的前提下,简化结构、添加可读性、且在网站前端保持一致的行为。也就说在不改变UI的情况下,对网站进行优化。
通常包括以下方面:
把表格( table)布局改为DV+CSS。
使网站前端兼容现代浏览器。
对移动平台进行优化。
针对搜索引擎进行优化。
2、如果一个页面上有大量的图片(大型电商网站),网页加载很慢,可以用哪些方法优化这些图片的加载,从而提升用户体验?
对于图片懒加载,可以为页面添加一个滚动条事件,判断图片是否在可视区域内或者即将进入可视区域,优先加载。
如果为幻灯片、相册文件等,可以使用图片预加载技术,对于当前展示图片的前一张图片和后一张图片优先下载。
如果图片为CSS图片,可以使用 CSS Sprite、SVG sprite、 Icon font、Base64等技术。
如果图片过大,可以使用特殊编码的图片,加载时会先加载一张压缩得特别小的缩略图,以提高用户体验。
如果图片展示区域小于图片的真实大小,则应在服务器端根据业务需要先行进行图片压缩,图片压缩后,图片大小与展示的就一致了。
3、谈谈性能优化问题。
缓存利用:缓存Ajax,使用CDN、外部 JavaScript和CSS文件缓存,添加 Expires头,在服务器端配置Etag,减少DNS查找等。
请求数量:合并样式和脚本,使用CSS图片精灵,初始首屏之外的图片资源按需加载,静态资源延迟加载。
请求带宽:压缩文件,开启GZIP 。
CSS代码:避免使用CSS表达式、高级选择器、通配选择器。
JavaScript代码:用散列表来优化查找,少用全局变量,用 innerHTML代替DOM操作,减少DOM操作次数,优化 JavaScript性能,用 setTimeout避免页面失去响应,缓存DOM节点查找的结果,避免使用with(with会创建自己的作用域,增加作用域链的长度),多个变量声明合并。
HTML代码:避免图片和 iFrame等src属性为空。src属性为空,会重新加载当前页面,影响速度和效率,尽量避免在HTML标签中写 Style属性
4、请说出几种缩短页面加载时间的方法。
(1)优化图片
(2)选择图像存储格式(比如,GIF提供的颜色较少,可用在一些对颜色要求不高的地方)
(3)优化CSS(压缩、合并CSS)
(4)在网址后加斜杠
(5)为图片标明高度和宽度
5、针对HTML,如何优化性能?
(1)对于资源加载,按需加载和异步加载
(2)首次加载的资源不超过1024KB,即越小越好。
(3)压缩HTML、CSS、 JavaScript文件。
(4)减少DOM节点。
(5)避免空src(空src在部分浏览器中会导致无效请求)。
(6)避免30*、40*、50*请求错误
(7)添加 Favicon.ico,如果没有设置图标ico,则默认的图标会导致发送一个404或者500请求。
6、针对CSS,如何优化性能?
(1)正确使用 display属性
(2)不滥用 float。
(3)不声明过多的font-size。
(4)当值为0时不需要单位。
(5)标准化各种浏览器前缀,
7、针对 JavaScript,如何优化性能?
(1)缓存DOM的选择和计算。
(2)尽量使用事件委托模式,避免批量绑定事件。
(3)使用 touchstart、 touchend代替 click。
(4)合理使用 requestAnimationFrame动画代替 setTimeOut。
(5)适当使用 canvas动画。
(6)尽量避免在高频事件(如 TouchMove、 Scroll事件)中修改视图,这会导致多次渲染。
8、jQuery性能优化如何做?
(1)使用最新版本的 jQuery类库。
(2)使用合适的选择器。
(3)以数组方式使用 jQuery对象。
SpringMVC:如何保证Controller的并发安全
在Tomcat容器中,每个servlet是单例的。
在SpringMVC中,Controller 默认也是单例。
采用单例模式的最大好处,就是可以在高并发场景下极大地节省内存资源,提高服务抗压能力。
正因为Controller默认是单例,所以不是线程安全的。如果用SpringMVC 的 Controller时,尽量不在 Controller中使用实例变量,否则会出现线程不安全性的情况,导致数据逻辑混乱。