我本想安靜的做一個美男子,可是,老板不漲工資,反而,一月不如一月。
我為什么放棄jquery mobile插件選擇自己寫特效?
在開發中大家都知道效率很重要,一個好的工具可以在開發中大大提升效率,工作做的越多,相應的取得的報酬也就越多,相反就是我自己了。
最近一直在一件事情上,移動線上網站測試必須符合3星,將不合格的網站調優后保證3星,方便線上推廣,難免會遇見一些問題,大致為題后期會寫一篇隨筆總結, “移動開發中網站如何優化”。其中遇見的一個問題就是JS文件過大,CSS文件過大,之前項目一直使用的jquery mobile開發的前端模板,以至於批量開發的模板全部是基於jquery mobile,在這中間一直沒有過多的分析這之間會出現的問題,直到這次考核。
jquery mobile是基於jquery,在應用jquery mobile前必須先引入jquery,為了方便也就自然使用了對應的jquery mobile的樣式文件。但是在實際批量模板的時候並沒有寫更多的JS特效,也並沒有使用jquery mobile默認的樣式,相反還要寫一些樣式來取消原來的樣式。(其實,這之間有些是可以避免的,不介意的情況下還是可以使用JQM,只是我們的小伙伴有固定的任務,開發的使用為了效率,一天可能就要完成兩套模板,相應的時間也就投入在了CSS和模板標簽上了)。
本文原創博客地址:http://www.cnblogs.com/unofficial官網地址: www.pushself.com
最近一直在一件事情上,移動線上網站測試必須符合3星,將不合格的網站調優后保證3星,方便線上推廣,難免會遇見一些問題,大致為題后期會寫一篇隨筆總結, “移動開發中網站如何優化”。其中遇見的一個問題就是JS文件過大,CSS文件過大,之前項目一直使用的jquery mobile開發的前端模板,以至於批量開發的模板全部是基於jquery mobile,在這中間一直沒有過多的分析這之間會出現的問題,直到這次考核。
jquery mobile是基於jquery,在應用jquery mobile前必須先引入jquery,為了方便也就自然使用了對應的jquery mobile的樣式文件。但是在實際批量模板的時候並沒有寫更多的JS特效,也並沒有使用jquery mobile默認的樣式,相反還要寫一些樣式來取消原來的樣式。(其實,這之間有些是可以避免的,不介意的情況下還是可以使用JQM,只是我們的小伙伴有固定的任務,開發的使用為了效率,一天可能就要完成兩套模板,相應的時間也就投入在了CSS和模板標簽上了)。
本文原創博客地址:http://www.cnblogs.com/unofficial官網地址: www.pushself.com
原來我們是這么做的移動開發
JS:
① jquery-1.9.1.min.js
② jquery.mobile-1.3.1.min.js
③ banner.js
④ 一段JS
CSS:
① jquery.mobile-1.3.1.min.css
② style.css
本文原創博客地址:http://www.cnblogs.com/unofficial 官網地址: www.pushself.com
① jquery-1.9.1.min.js
② jquery.mobile-1.3.1.min.js
③ banner.js
④ 一段JS
CSS:
① jquery.mobile-1.3.1.min.css
② style.css
本文原創博客地址:http://www.cnblogs.com/unofficial 官網地址: www.pushself.com
現在我是這么做的
在JQM與zepto之間我還是糾結了一下,畢竟之前已經有很多項目已經是基於JQM,最后我還是一致決定使用zepto來重新規范一下接下來的模板,也許我這只是一個人的想法,也許這只是一次做着玩的想法,畢竟這不是第一次也不是最后一次。說遠了,拉回來。
JS:
① require.js
② zepto.min.js
③ touch.min.js
④ baiyun.mobile.min.js
CSS:
① style.css
本文原創博客地址:http://www.cnblogs.com/unofficial 官網地址: www.pushself.com
JS:
① require.js
② zepto.min.js
③ touch.min.js
④ baiyun.mobile.min.js
CSS:
① style.css
本文原創博客地址:http://www.cnblogs.com/unofficial 官網地址: www.pushself.com
前前后后對比分析
>>>對比一:頁面
圖一,原版,在這個版本中使用的是JQM,完全沒有使用JQM的默認UI,相反使用了很多的獨立IMG,也就自然而然增加了很多次請求,按照現在的要求,頁面不能單一的設計成現在的banner,首頁欄目導航。這個將自然而然增加更多的請求。
圖二,現版,在這個版本中使用了zepto,只是為了選擇器方面方便一些,更好的我覺得還是使用原生的javascript,這就是做移動開發的好處,不用考慮蛋疼的IE低版本,對於基礎知識的要求也就要更牢靠一些,也許習慣了使用工具,有時都很難分清楚到底原生中有沒有這樣一個方法,隨着更新,也許現在正在使用就會被下一個取代,可是萬變還是不離其中。還使用了一個老方法就是CSS Sprites,現在還有一些其它的方式,這里暫時不贅述了。
>>>對比二:首次加載
圖三,原版
圖四,現版
>>>對比三:二次加載
圖五,原版
圖六,現版
對比二與對比三不能作為絕對數據,但是從中我們也能看出一些問題,由於也是剛剛面對三星檢測這個棘手的問題才現學現賣,關於網站的優化方面還有很多知識需要學習,希望能夠與正在做相關工作的小伙伴一起交流交流。這里先不說其它因素,要不然就有扯遠了,圖三中JQM 與 JQ文件是73.9K(原文件還要大一些,具體的可以參見JQUERY官網),耗時1S左右了,相反require 與 zepto 與 touch文件是17.6K,耗時52ms,數據應該能看出一些什么吧?最后我還是決定換掉JQM,使用現在的版本,插件也可以直接使用JQM的插件,更喜歡自己造輪子,主要還是希望在這過程中自我學習提升,工資不能再降了啊,再降就只好去讓人打發點兒了,新聞說地鐵口乞人日入多少多少,你不一定就可以,這中間涉及的問題太多,最簡單的就是你沒有這方面的工作經驗。 本文原創博客地址:http://www.cnblogs.com/unofficial 官網地址: www.pushself.com

圖一,原版,在這個版本中使用的是JQM,完全沒有使用JQM的默認UI,相反使用了很多的獨立IMG,也就自然而然增加了很多次請求,按照現在的要求,頁面不能單一的設計成現在的banner,首頁欄目導航。這個將自然而然增加更多的請求。

圖二,現版,在這個版本中使用了zepto,只是為了選擇器方面方便一些,更好的我覺得還是使用原生的javascript,這就是做移動開發的好處,不用考慮蛋疼的IE低版本,對於基礎知識的要求也就要更牢靠一些,也許習慣了使用工具,有時都很難分清楚到底原生中有沒有這樣一個方法,隨着更新,也許現在正在使用就會被下一個取代,可是萬變還是不離其中。還使用了一個老方法就是CSS Sprites,現在還有一些其它的方式,這里暫時不贅述了。
>>>對比二:首次加載

圖三,原版

圖四,現版
>>>對比三:二次加載

圖五,原版

圖六,現版
對比二與對比三不能作為絕對數據,但是從中我們也能看出一些問題,由於也是剛剛面對三星檢測這個棘手的問題才現學現賣,關於網站的優化方面還有很多知識需要學習,希望能夠與正在做相關工作的小伙伴一起交流交流。這里先不說其它因素,要不然就有扯遠了,圖三中JQM 與 JQ文件是73.9K(原文件還要大一些,具體的可以參見JQUERY官網),耗時1S左右了,相反require 與 zepto 與 touch文件是17.6K,耗時52ms,數據應該能看出一些什么吧?最后我還是決定換掉JQM,使用現在的版本,插件也可以直接使用JQM的插件,更喜歡自己造輪子,主要還是希望在這過程中自我學習提升,工資不能再降了啊,再降就只好去讓人打發點兒了,新聞說地鐵口乞人日入多少多少,你不一定就可以,這中間涉及的問題太多,最簡單的就是你沒有這方面的工作經驗。 本文原創博客地址:http://www.cnblogs.com/unofficial 官網地址: www.pushself.com
baiyun.mobile.min.js 簡單特效之Banner
一個簡單的banner特效效果圖:
圖片質量不是很高,還是用的是同一張圖片,能不能看?不能看,不能看也就先將就着看吧。就是一個簡單的幾張圖片輪播,這里有幾點不一樣,看完代碼大家應該可以發現其中的問題。
HTML代碼:
CSS代碼:
JS代碼:(代碼寫的不是很好,高手路過記得留下點兒高招哦)
這中間其實有遇見一個問題,因為存在在PC中向客戶大致展示一下,使用background只是為了部分瀏覽器中避免拖動時圖片被拉出,卻發現了一個問題,背景代碼:background: url(http://www.pushself.com/noImage.jpg) 50% 50% / 100% 100% no-repeat;在chrome下可以直接解析使用,移動端的時候就被分解了,background-size: 100%;並非是background: 100% 100%;就會第一次進入頁面時,或者刷新后出現一個不希望有的特效。
這次分享到此結束,希望能夠與大家多多交流。
本文原創博客地址:http://www.cnblogs.com/unofficial 官網地址: www.pushself.com

圖片質量不是很高,還是用的是同一張圖片,能不能看?不能看,不能看也就先將就着看吧。就是一個簡單的幾張圖片輪播,這里有幾點不一樣,看完代碼大家應該可以發現其中的問題。
HTML代碼:
<div class="mbSlider"> <ul> <li style="background: url(http://www.pushself.com/noImage.jpg) 50% 50% no-repeat;"> <a href="http://www.pushself.com"></a> </li> <li style="background: url(http://www.pushself.com/noImage.jpg) 50% 50% no-repeat;"> <a href="http://www.pushself.com"></a> </li> <li style="background: url(http://www.pushself.com/noImage.jpg) 50% 50% no-repeat;"> <a href="http://www.pushself.com"></a> </li> </ul> </div>
.mbSlider ul { position: relative; z-index: 0; height: 120px; overflow: hidden; } .mbSlider ul li { position: absolute; top: 0; left: 0; z-index: 0; visibility: hidden; } .mbSlider ul li, .mbSlider ul a { display: block; width: 100%; height: 100%; } .mbSlider ul li:nth-child(1) { visibility: visible; }
(function(i) { var windowWidth = $(window).width(), windowHeight = $(window).height(), name = option.name, AutoMain = function() { this.mbSlider = function() { var mbSliderThis = this, directionArr = ["left","right"]; liLength = $("." + name + " ul li").length, duration = i.duration in directionArr?i.duration:"left", initVal = i.initVal && i.initVal<liLength?parseInt(i.initVal):0, mbSliderHeight = $("." + name + " ul").height(), mbSliderHeight = mbSliderHeight > 120 && mbSliderHeight < windowHeight / 3?mbSliderHeight:120; $("." + name + " ul").height(mbSliderHeight);//banner不能過大 if(liLength < 2) { return; }else if(liLength == 2) {//便於切換流暢 $("." + name + " ul").append($("." + name + " ul").html()); liLength = $("." + name + " ul li").length; } var direction = i.direction, t; mbSliderThis.run = function(direction){ Action.apply(this,{ 0: direction, 1: initVal, 2: liLength, "length" : 3 }) initVal = initVal == liLength - 1?0:++initVal; t = setTimeout(function() { mbSliderThis.run(direction); },3000); } $("." + name + " ul li").css({ "-webkit-transition-duration":i.duration + "s" }); mbSliderThis.run(direction); $("." + name + " ul li").swipeLeft(function() { var direction = "right"; clearInterval(t); mbSliderThis.run(direction); }); $("." + name + " ul li").swipeRight(function() { var direction = "left"; clearInterval(t); mbSliderThis.run(direction); }); }; }, Action = function(direction,initVal,liLength) { var liLength = liLength; if(direction == "right") { var currLiNum = initVal, prevLiNum = currLiNum == 0?liLength - 1:currLiNum - 1, nextLiNum = currLiNum == liLength - 1?0:currLiNum + 1; directionVal = 1; }else { var currLiNum = initVal == 0?0:-initVal, prevLiNum = currLiNum == 0?-liLength + 1:currLiNum + 1, nextLiNum = currLiNum == -liLength + 1?0:currLiNum - 1; directionVal = -1; } var prevLiWidth = -windowWidth * directionVal, currLiWidth = 0, nextLiWidth = windowWidth * directionVal; $("." + name + " ul li").eq(prevLiNum).css({ "-webkit-transform":"translate3d(" + prevLiWidth + "px, 0, 0)", "visibility":"hidden" }); $("." + name + " ul li").eq(currLiNum).css({ "visibility":"visible", "-webkit-transform":"translate3d(" + currLiWidth + "px, 0, 0)" }); $("." + name + " ul li").eq(nextLiNum).css({ "-webkit-transform":"translate3d(" + nextLiWidth + "px, 0, 0)", "visibility":"hidden" }); }, autoMain = new AutoMain().mbSlider(); })(option)
var option = {"name":"mbSlider","direction":"right","duration":".8","initVal":0};

這次分享到此結束,希望能夠與大家多多交流。
本文原創博客地址:http://www.cnblogs.com/unofficial 官網地址: www.pushself.com