将面试整理的网站优化资料记一记,针对移动端的代码说的。
html
1: 标签嵌套层级不要太深,标签尽量简洁化.如懒加载后将data属性去除
2: DNS预先处理 dns-prefetch,如果一个页面有多个不同地址的引用,则DNS预解析很有用。页面预先处理link标签的prefetch
3: 大量图片的懒加载策略,以及一些元素利用ajax在onload后实行延迟加载
4: 对一些js的异步加载
css
1: 嵌套层级不要太深,一般三层最多了。这个主要还是看团队项目结构,命名规范对这个有很大影响,互有取舍,是命名长一点不会有重复还是命名方便一点嵌套深一点
2: css解析从右向左,所以最右边的应该是相对少一点的,比如.on.li_lick 就比.li_click.on要好(如果.on很多的话)
3: html用了base64的img的话,并不会缓存起来,可以将这个base64的图片放在css文件里,css会缓存,图片就缓存起来了
4: 尽量不用后代元素选择器,最右边的一层不要是标签,尤其是像div这种非常常用的标签
5: 多使用css的继承,而不是每一次都书写时都全部重写一遍。写多个css属性时,能连在一起写的就连在一起写。如:background: #fff url() center center no-repeat
javascript
以一个for循环来构建DOM文档举例(使用jquery)
// var lis = document.getElementsByTagName("li")
var lis = [1, "2", "3", "4"];
var ulObj = $("ul");
var lisLength = lis.length;
var html = "";
for (var i = 0; i
if (lis[i] === 1) {
html += '
} else {
html += '
}
}
ulObj.html(html);
01. 缓存变量。$("ul") 使用jquery这种语句记得将其存在变量里,每一句$()都是非常重的函数,能尽量少用就少用。
02. 使用诸如getElementsByTagName这类LIVE类型的collections时,更要注意对其length的缓存
03. var html = ""。 赋值时,用字面量的方式
04. for 循环。实践证明,递减循环比递增循环要快那么一点点。
05. 对于大型的for循环,可能导致执行时页面卡住,可以考虑使用数组分块技术将循环分割成多个循环一部分一部分的执行
06. for循环里的条件判断lis.length一定要缓存在变量里,不然每一次都要去查询一次长度。
07. 构建DOM结构。一般有三种方式:
①: 使用节点关系createElement,appendChild这些去构建生成节点关系。
②:使用文档片段documentFragment的方式。
③:直接用字符串拼接:这个又分为两种,直接+号拼接和数组join拼接。第三种速度效率最高。而第三种里面在移动端里使用+号比数组快很多,在PC端得看浏览器,不同浏览器不同版本对这两种方式的优化不同。
08. 插入到DOM文档:使用innerHTML的方式比appendChild要效率高。综上,移动端还是使用+号拼接字符串最后使用innerHTML的方式
09. 插入到DOM中时,一定要将插入结果放在变量里,在for循环结束后插入,千万不能在for循环中执行插入操作,会造成大量的重绘重排。尽量减少对DOM的操作
10. 这个例子需要动态添加,动态删除,每个li标签有click事件。如果每次插入到DOM后给li添加click事件,那么删除时就要清除注册在li上的click事件。非常麻烦。所以采用事件委托的机制,将事件绑定在ul上,通过target属来判断
11. 条件判断: == 与 ===,==要进行类型转换比较,多了一个步骤,效率低
12. 使用直接函数,而不是与之等同的函数,比如$.ajax(),其他$.get()等最终都是调用$.ajax(),多余的步骤多余的调用必然导致效率相对低
13. 选择器: 使用原生的选择器一定是最快的getElementById(),getElementsByTagName()这些,因为是用编译语言写好的方法。所以jquery里$("li")标签选取器的效率是很高的,所以$("li .my_li")这样写比$(".my_li")效率要高
14. 善用事件委托:如果有许多类似的结构要绑定事件,都利用事件冒泡的机制,在上层元素上绑定事件
15. 将一些多条件判断赋值语句用数组来做,比如:
switch(a) {
case 0:
result = "一";
break;
case 1:
result = "二";
break;
}
改成:
var arr = ["零", "一"];
result = arr[a]
16. 对于有复杂动画的模块,尽量用定位使其脱离文档流。利用css3实现的动画,调用一下translate3d(0, 0, 0)或其他的的3d变换,就会调起硬件加速,这个页面其他动画就都会有硬件加速的效果了。要考虑低端机型的话慎用
17. 函数尽量简单,少用闭包,嵌套的对象成员也会影响性能,总之结构尽量简单,能少一层就少一层
18. 对于非常频繁调用的函数,如scroll触发的函数,可以考虑使用函数节流,debounce,throttle
转自: https://segmentfault.com/a/1190000004223993
作者: zzzddd
本篇文章由 HTML5梦工场 小编从其他媒体精选前端相关文章转载,仅供网友学习和交流,如果小编的工作有侵犯到您的权益,请及时联系小编QQ:123464386,将会在第一时间进行处理!投稿与合作,请发至邮箱:tommy@html5dw.com

本文討論了HTML< Progress>元素,其目的,樣式和與< meter>元素。主要重點是使用< progress>為了完成任務和LT;儀表>對於stati

本文討論了html< datalist>元素,通過提供自動完整建議,改善用戶體驗並減少錯誤來增強表格。Character計數:159

本文討論了HTML< meter>元素,用於在一個範圍內顯示標量或分數值及其在Web開發中的常見應用。它區分了< meter>從< progress>和前

本文討論了使用HTML5表單驗證屬性,例如必需的,圖案,最小,最大和長度限制,以直接在瀏覽器中驗證用戶輸入。

本文討論了視口元標籤,這對於移動設備上的響應式Web設計至關重要。它解釋瞭如何正確使用確保最佳的內容縮放和用戶交互,而濫用可能會導致設計和可訪問性問題。

本文解釋了HTML5< time>語義日期/時間表示的元素。 它強調了DateTime屬性對機器可讀性(ISO 8601格式)的重要性,並在人類可讀文本旁邊,增強Accessibilit

本文討論了< iframe>將外部內容嵌入網頁,其常見用途,安全風險以及諸如對象標籤和API等替代方案的目的。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器