Õ⼸Ì죬µÚÈýÂÖȫվÓÅ»¯½áÊø£¬²âÊÔÏîÄ¿ÔÚ2GÊׯÁÔØÈëËÙ¶ÈÈ¡µÃÁËһЩÓÅ»¯³É¼¨£¬¶Ô±ÈÏÂÀ´ÓÐ10s×óÓҵIJî¾à£º

Õâ´ÎÓÅ»¯¹¤×÷½áÊøºó£¬ÒѾÊǵÚÈý´Î´ó¹æÄ£ÕÛÌÚ¹«Ë¾¿ò¼ÜÁË£¬ÕâÀォһЩ×Ô¼ºÖªµÀµÄÒÆ¶¯¶ËµÄ½¨ÒéÌá³öÀ´·ÖÏíÏ£¬Ï£Íû¶Ô¸÷λÓÐÓá£ÎÄÖÐÓÐÎóÇëÄúÌá³ö£¬ÒÔÃâÎóÈË×ÔÎó¡£
¼¼ÊõÑ¡ÐÍ
µ¥Ò³or¶àÒ³
spa£¨single page application£©Ò²¾ÍÊÇÎÒÃdz£³£ËµµÄwebÓ¦ÓóÌÐòwebapp£¬±»ÈÏΪÊÇÒµÄڵķ¢Õ¹Ç÷ÊÆ£¬Ö÷ÒªÓÐÁ½¸öÓŵ㣺
¢Ù Óû§ÌåÑéºÃ
¢Ú ¿ÉÒÔ¸üºÃµÄ½µµÍ·þÎñÆ÷ѹÁ¦
µ«Êǵ¥Ò³Óм¸¸öÖÂÃüµÄȱµã£º
¢Ù SEOÖ§³Ö²»ºÃ£¬ÍùÍùÐèÒªµ¥¶Àд³ÌÐò´¦ÀíSEOÎÊÌâ
¢Ú webapp±¾ÉíµÄÄÚ´æ¹ÜÀíÄÑ£¬Javascript¡¢Css·Ç³£ÈÝÒ×»¥ÏàÓ°Ïì
µ±È»£¬ÕâÀï²»ÊÇ˵¶àÒ³±ã²»ÄÜÓкõÄÓû§ÌåÑ飬²»ÄܽµµÍ·þÎñÆ÷ѹÁ¦£»¶àÒ³Ò²»áÓбäÁ¿ÎÛȾµÄÎÊÌâ·¢Éú£¬µ«Ôì³ÉwebappÒÀ¾ÉÊÇ¡°·¢Õ¹Ç÷ÊÆ¡±£¬¶øÃ»Óдó¹æÄ£Ó¦ÓõÄÖ÷ÒªÔÒòÊÇ£ºwebappģʽÃż÷½Ï¸ß£¬ºÜÈÝÒ×Íæ»µ¡£
ÆäʵwebappµÄ×î´óÎÊÌâÓëÉÏÊö¼¸µãûÓйØÏµ£¬Êµ¼ÊÉÏ×è°webappµÄÊǼ¼ÊõÃż÷ÓëÊÖ»úÐÔÄÜ£¬Ó²¼þ·½Ãæ²»±Ø¶à˵£¬ÕâÀïÖ÷Ҫ˵¼¼ÊõÃż÷¡£
webapp×öµÄºÃ£¬¿ÉÒÔÍæ¶¯»£¬¿ÉÒÔÍæÕæÕýÒâÒåÉϵÄÔ¤¼ÓÔØ£¬¿ÉÒÔÍæÎÞ·ìÒ³ÃæÇл»£¬´ÓijЩ·½ÃæÉõÖÁ¿ÉÒÔæÇÃÀÔÉúAPP£¬ÕâÒ²ÊÇwebappÊܵ½×·ÅõµÄÔÒò¡£
µ«ÊÇ£¬ÒÔÉϺÜÈÝÒ×±»Í滵£¡ÒòΪwebappģʽ²»¿É±ÜÃâµÄÐèÒªÓõ½¿ò¼Ü£¬Õ¾µãÐèÒªÒ»¸öÇÐʵ¿ÉÐеĿØÖÆÆ÷À´¹ÜÀíHistoryÒÔ¼°Ò³ÃæviewʵÀý»¯¹¤×÷£¬ÓÚÊÇ´ó¼Ò»áÑ¡ÔñÖîÈ磺
Backbone¡¢angularJS¡¢canJsÖ®ÀàµÄMVC¿ò¼Ü£¬ÓÚÊÇÕû¸öǰ¶ËµÄ¼¼ÊõÒªÇ󱻯½°×Î޹ʵÄÌáÉýÁËÒ»¸öµÈ¼¶£¬ÔÀ´²Ù×÷dom¿ÉÒÔ×öµÄÊÂÇ飬ÏÖÔÚ²»Ò»¶¨ÄÜ×öÁË¡£
ºÜ¶àÈ˶ÔÒÔÉÏ¿ò¼ÜֻͣÁôÔÚʹÓòãÃæ£¬¼¸ÂÖÅàѵºó£¬¶Ôµ×²ãÍùÍù¸Ðµ½Ò»Í·ÎíË®£¬¾ÍË㿪·¢Á˼¸¸öÏîÄ¿ºó£¬ÈÔÈ»»¹ÊÇÖ»ÄÜÁ˽âView²ãÃæµÄ¶«Î÷£»ÓжԼ¼Êõ¸ÐÐËȤµÄͬÊ»áÂýÂýÁ˽âµ×²ã£¬µ«¶àÊýÈÔȻֻ¹Ø×¢ÒµÎñ¿ª·¢£¬Õâ¸öʱºòÍøÕ¾ÌåÑé±ã»áÊܵ½Ó°Ï죬»¹ÈÃwebappÊܵ½ÖÊÒÉ¡£
ËùÒÔÕâÀィÒéÊÇ£º
¢Ù ¾«Ó¢ÍŶÓÔÚ¹«Ë¾ÓÐÇ®²¢ÇÒÍøÕ¾ÖÜÆÚÔÚÁ½ÄêÒÔÉϵϰ¿ÉÒÔÑ¡ÓÃwebappģʽ
¢Ú Ò»°ãÍŶӻ¹ÊÇʹÓöàÒ³°É£¬¿Ó²»ÁË
¢Û ¸üºÃµÄ½¨ÒéÊDzο¼Ï¸ıäºóµÄÐÂÀË΢²©£¬²ÉÓÃαµ¥Ò³Ä£Ê½£¬½«ÍøÕ¾·ÖΪ¼¸¸öÄ£¿é×öµ½×é¼þ»¯¿ª·¢£¬Åöµ½²î¾à½Ï´óµÄÒ³Ãæ±ãË¢ÐÂÒ²ÎÞ²»¿É
PS£ºÊÂʵÉÏwebappģʽµÄÍøÕ¾ÌåÑéȷʵ»áºÃÒ»µã
¿ò¼ÜÑ¡Ôñ
ÒÆ¶¯Ç°¶ËÒÀ¾ÉÀë²»¿ª¿ò¼Ü£¬¶øÇÒ¿ò¼Ü³Ê±ä»¯×´Ì¬£¬ÒÔÎÒ³§ÎªÀý£¬ÎÒÃǼ¸ÂÖ¿ò¼ÜÑ¡ÐÍÊÇ£º
¢Ù ¶àÒ³Ó¦ÓÃ+jQuery
¢Ú jQuery mobile£¨Õâ¸ö¿ÓËÓÃËÖªµÀ£©
¢Û ¿ªÊ¼webappģʽ£¨jQuery+requireJS+Backbone+underscore£©
¢Ü ÊÝÉí£¨zepto+requireJS+Backbone View²¿·Ö+underscore£©
......
ÒÆ¶¯´ó³±À´ÁÙºó£¬ä¯ÀÀÆ÷»ù±¾µÄ¼æÈݵõ½Á˱£Ö¤£¬ËùÒÔÍêÕûµÄjQuery±äµÃ²»ÊÇÄÇô±ØÐ룬ÒòΪ³ß´çÔÒò£¬ËùÒÔÒ»°ã±»zeptoÌæ»»£¬zeptoÓëjQueryÓÐʲô²îÒìÄØ£¿
jQuery VS Zepto
Ê×ÏÈ£¬ZeptoÓëjQueryµÄAPI´óÌåÏàËÆ£¬µ«ÊÇʵÏÖϸ½ÚÉϲîÒìÉõ´ó£¬ÎÒÃÇʹÓÃZeptoÒ»°ãÍê³ÉÁ½¸ö²Ù×÷£º
¢Ù dom²Ù×÷
¢Ú ajax´¦Àí
µ«ÊÇÎÒÃÇÖªµÀHTML5ÌṩÁËÒ»¸ödocument.querySelectorAllµÄ½Ó¿Ú£¬¿ÉÒÔ½â¾öÎÒÃÇ90%µÄÐèÇó£¬ÓÚÊÇjQueryµÄsizzle±ãÒâÒå²»´óÁË£¬ºóÀ´jQueryÒ²×öÁËÒ»ÂÖÓÅ»¯£¬ÈÃÓû§´ò°üʱºòÑ¡Ôñ£¬ÐèÒªsizzle²ÅÓá£
Æä´ÎjQueryµÄһЩÊôÐÔ²Ù×÷ÉÏ×ö×ãÁ˼æÈÝ£¬±ÈÈ磺
el.css('transform', 'translate(-968px, 0px) translateZ(0px)') //jQuery»á×Ô¶¯¸ù¾Ý²»Í¬ä¯ÀÀÆ÷ÄÚºËΪÄã´¦ÀíΪ£º el.css('-webkit-transform', 'translate(-968px, 0px) translateZ(0px)') |
ÓÖ±ÈÈç˵£¬ÒÔϲîÒì±È±È½ÔÊÇ£º
el.hide(1000);//jQuery¾ßÓж¯»£¬Zepto²»»áÄñÄã |
È»ºó£¬jQuery×î³õʵÏÖanimateÊDzÉÓÃjsÑ»·ÉèÖÃ״̬¼Ç¼µÄ·½Ê½£¬ËùÒÔ¿ÉÒÔÓÐЧµÄ¼Çס״̬ÔÝÍ£¶¯»ÔªËØ£»ZeptoµÄanimateÍêÈ«ÒÀÀµÓÚcss3¶¯»£¬ÔÝÍ£ÐèÒªÔÙÏë°ì·¨
// Zepto.js
// (c) 2010-2014 Thomas Fuchs
// Zepto.js may be freely distributed under the MIT license.
;(function($, undefined){
var prefix = '', eventPrefix, endEventName, endAnimationName,
vendors = { Webkit: 'webkit', Moz: '', O: 'o' },
document = window.document, testEl = document.createElement('div'),
supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,
transform,
transitionProperty, transitionDuration, transitionTiming, transitionDelay,
animationName, animationDuration, animationTiming, animationDelay,
cssReset = {}
function dasherize(str) { return str.replace(/([a-z])([A-Z])/, '$1-$2').toLowerCase() }
function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : name.toLowerCase() }
$.each(vendors, function(vendor, event){
if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {
prefix = '-' + vendor.toLowerCase() + '-'
eventPrefix = event
return false
}
})
transform = prefix + 'transform'
cssReset[transitionProperty = prefix + 'transition-property'] =
cssReset[transitionDuration = prefix + 'transition-duration'] =
cssReset[transitionDelay = prefix + 'transition-delay'] =
cssReset[transitionTiming = prefix + 'transition-timing-function'] =
cssReset[animationName = prefix + 'animation-name'] =
cssReset[animationDuration = prefix + 'animation-duration'] =
cssReset[animationDelay = prefix + 'animation-delay'] =
cssReset[animationTiming = prefix + 'animation-timing-function'] = ''
$.fx = {
off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),
speeds: { _default: 400, fast: 200, slow: 600 },
cssPrefix: prefix,
transitionEnd: normalizeEvent('TransitionEnd'),
animationEnd: normalizeEvent('AnimationEnd')
}
$.fn.animate = function(properties, duration, ease, callback, delay){
if ($.isFunction(duration))
callback = duration, ease = undefined, duration = undefined
if ($.isFunction(ease))
callback = ease, ease = undefined
if ($.isPlainObject(duration))
ease = duration.easing, callback = duration.complete, delay = duration.delay, duration = duration.duration
if (duration) duration = (typeof duration == 'number' ? duration :
($.fx.speeds[duration] || $.fx.speeds._default)) / 1000
if (delay) delay = parseFloat(delay) / 1000
return this.anim(properties, duration, ease, callback, delay)
}
$.fn.anim = function(properties, duration, ease, callback, delay){
var key, cssValues = {}, cssProperties, transforms = '',
that = this, wrappedCallback, endEvent = $.fx.transitionEnd,
fired = false
if (duration === undefined) duration = $.fx.speeds._default / 1000
if (delay === undefined) delay = 0
if ($.fx.off) duration = 0
if (typeof properties == 'string') {
// keyframe animation
cssValues[animationName] = properties
cssValues[animationDuration] = duration + 's'
cssValues[animationDelay] = delay + 's'
cssValues[animationTiming] = (ease || 'linear')
endEvent = $.fx.animationEnd
} else {
cssProperties = []
// CSS transitions
for (key in properties)
if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '
else cssValues[key] = properties[key], cssProperties.push(dasherize(key))
if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)
if (duration > 0 && typeof properties === 'object') {
cssValues[transitionProperty] = cssProperties.join(', ')
cssValues[transitionDuration] = duration + 's'
cssValues[transitionDelay] = delay + 's'
cssValues[transitionTiming] = (ease || 'linear')
}
}
wrappedCallback = function(event){
if (typeof event !== 'undefined') {
if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below"
$(event.target).unbind(endEvent, wrappedCallback)
} else
$(this).unbind(endEvent, wrappedCallback) // triggered by setTimeout
fired = true
$(this).css(cssReset)
callback && callback.call(this)
}
if (duration > 0){
this.bind(endEvent, wrappedCallback)
// transitionEnd is not always firing on older Android phones
// so make sure it gets fired
setTimeout(function(){
if (fired) return
wrappedCallback.call(that)
}, (duration * 1000) + 25)
}
// trigger page reflow so new elements can animate
this.size() && this.get(0).clientLeft
this.css(cssValues)
if (duration <= 0) setTimeout(function() {
that.each(function(){ wrappedCallback.call(this) })
}, 0)
return this
}
testEl = null
})(Zepto)
|
Æäʵ£¬ÎÒÃǼòµ¥´ÓʵÏÖÉϾͿÉÒÔ¿´³ö£¬ZeptoÕâÀïÊÇ͵ÀÁÁË£¬ÆäʵÏÖ×î³õ¾ÍûÓÐÏ뿼ÂÇIE£¬ËùÒÔwinphone¸ù±¾²»ÄÜÓä¿ìµÄÍæË£
zepto.Z = function(dom, selector) { dom = dom || [] dom.__proto__ = $.fn dom.selector = selector || '' return dom } |
ÕæÊµµÄ²îÒ컹Óкܶ࣬ÎÒÕâÀïҲû·¨Ò»Ò»Áгö£¬ÕâÀïҪ˵Ã÷µÄÒ»¸öÎÊÌâÆäʵ¾ÍÊÇ£º

zeptoÉè¼ÆµÄÄ¿µÄÊÇÌṩjqueryµÄÀàËÆµÄAPIs£¬²»ÒÔ100%¸²¸ÇjqueryΪĿµÄ£¬Ò»¸ö5-10kµÄͨÓÿ⡢ÏÂÔØ²¢Ö´Ðп졢ÓÐÒ»¸öÊìϤͨÓõÄAPI£¬ËùÒÔÄãÄܰÑÄãÖ÷ÒªµÄ¾«Á¦·Åµ½Ó¦Óÿª·¢ÉÏ¡£
ÉÏͼÊÇ1.8°æ±¾ÓëZeptoÍêÕû°æµÄ¶Ô±È£¬GzipÔÚ2GÇé¿öÏÂ20KÔì³ÉµÄ²î¾àÔÚ2-5sÖ®¼ä£¬3GÇé¿ö»áÓÐ1sµÄ²î¾à£¬ÕâÒ²ÊÇÎÒÃÇÑ¡ÔñZeptoµÄÔÒò£¬ÏÂÃæ¼òµ¥½éÉÜÏÂZepto¡£
ZeptoÇåµ¥

ÄãÕæÊµÏîĿʱ£¬ÍêÈ«¿ÉÒÔ°´ÕÕÐèҪѡȡģ¿é¼´¿É£¬ÏÂÃæ¼òµ¥ÔÙÁм¸¸ö²îÒ죺
ÆäËü²îÒì
¢Ù selector
ÈçÉÏËùÊö£¬ZeptoµÄÑ¡ÔñÆ÷Ö»ÊÇjQueryµÄÒ»¸ö×Ó¼¯£¬µ«ÊÇÕâ¸ö×Ó¼¯Âú×ãÎÒÃÇ90%µÄʹÓó¡¾°
¢Ú clone
ZeptoµÄclone²»Ö§³Öʼþclone£¬Õâ¾ä»°µÄÒâ˼ÊÇdom cloneºóÐèÒª×Ô¼ºÔÙ´¦Àíʼþ£¬¾Ù¸öÀý×ÓÀ´Ëµ£º
var el = $('.el');
el.on('click', function() {
alert(1)
})
|
1 //trueµÄÇé¿öjQuery»áÁ¬´ødomʼþ¿½±´£¬ZeptoûÓÐ×öÕâ¸ö´¦Àí 2 //jQuery¿â£¬µã»÷cloneµÄ½Úµã»á´òÓ¡1£¬Zepto²»»á 3 4 var el1 = el.clone(true); 5 $('#wrap').append(el1); |
Õâ¸ö²îÒ컹±È½ÏºÃ´¦Àí£¬ÏÖÔÚ¶¼»áʹÓÃʼþ´úÀí£¬ËùÒÔûcloneʼþÒ²ÔÚûÎÊÌâµÄ......
ÕâÀï¼òµ¥¿´¿´Ï¸½ÚʵÏÖ£º
clone: function (elem, dataAndEvents, deepDataAndEvents) {
var i, l, srcElements, destElements,
clone = elem.cloneNode(true),
inPage = jQuery.contains(elem.ownerDocument, elem);
// Fix IE cloning issues
if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&
!jQuery.isXMLDoc(elem)) {
// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
destElements = getAll(clone);
srcElements = getAll(elem);
for (i = 0, l = srcElements.length; i < l; i++) {
fixInput(srcElements[i], destElements[i]);
}
}
// Copy the events from the original to the clone
if (dataAndEvents) {
if (deepDataAndEvents) {
srcElements = srcElements || getAll(elem);
destElements = destElements || getAll(clone);
for (i = 0, l = srcElements.length; i < l; i++) {
cloneCopyEvent(srcElements[i], destElements[i]);
}
} else {
cloneCopyEvent(elem, clone);
}
}
// Preserve script evaluation history
destElements = getAll(clone, "script");
if (destElements.length > 0) {
setGlobalEval(destElements, !inPage && getAll(elem, "script"));
}
// Return the cloned set
return clone;
},
function cloneCopyEvent(src, dest) {
var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
if (dest.nodeType !== 1) {
return;
}
// 1. Copy private data: events, handlers, etc.
if (dataPriv.hasData(src)) {
pdataOld = dataPriv.access(src);
pdataCur = dataPriv.set(dest, pdataOld);
events = pdataOld.events;
if (events) {
delete pdataCur.handle;
pdataCur.events = {};
for (type in events) {
for (i = 0, l = events[type].length; i < l; i++) {
jQuery.event.add(dest, type, events[type][i]);
}
}
}
}
// 2. Copy user data
if (dataUser.hasData(src)) {
udataOld = dataUser.access(src);
udataCur = jQuery.extend({}, udataOld);
dataUser.set(dest, udataCur);
}
}
jQuery clone
|
1 clone: function(){ 2 return this.map(function(){ return this.cloneNode(true) }) 3 }, |
ÏÂÃæÊÇZeptoµÄcloneʵÏÖ£¬ÎÒɶҲ²»ËµÁË£¬ÎªÊ²Ã´jQueryÕâô´óÄØ£¬ÊÇÓеÀÀíµÄ¡£
¢Û data
ZeptoµÄdataÖ»ÄÜ´æ´¢×Ö·û´®£¬ÄãÏë´æ´¢¸´ÔÓ¶ÔÏóµÄ»°±ã°ÑËûÏÈת»»Îª×Ö·û´®
¢Ü offset
el.offset()
//Zepto·µ»Ø
Object {left: 8, top: 8, width: 485, height: 18}
//jQuery·µ»Ø
Object {top: 8, left: 8}
|
getBoundingClientRect º¯ÊýÊÇW3C×éÖ¯ÔÚµÚÒ»°æ±¾µÄW3C CSSOM View
specification²Ý°¸ÖÐÈ·¶¨µÄÒ»¸ö±ê×¼·½·¨£¬ÔÚ´Ë֮ǰ£¬Ö»ÓÐIEä¯ÀÀÆ÷ÊÇÖ§³Ö¸Ã·½·¨µÄ£¬W3CÔÚÕâ´Î²Ý°¸ÖаÑËü·öÕý³ÉΪ±ê×¼¡£
getBoundingClientRect ·½·¨·µ»ØµÄÊǵ÷Óø÷½·¨µÄÔªËØµÄTextRectangle¶ÔÏ󣬸öÔÏó¾ßÓÐtop¡¢left¡¢right¡¢bottomËĸöÊôÐÔ£¬·Ö±ð´ú±í¸ÃÔªËØÉÏ¡¢×ó¡¢ÓÒ¡¢ÏÂËÄÌõ±ß½çÏà¶ÔÓÚä¯ÀÀÆ÷´°¿Ú×óÉϽǣ¨×¢Ò⣬²»ÊÇÎĵµÇøÓòµÄ×óÉϽǣ©µÄÆ«ÒÆÏñËØÖµ¡£
offset: function(coordinates){
if (coordinates) return this.each(function(index){
var $this = $(this),
coords = funcArg(this, coordinates, index, $this.offset()),
parentOffset = $this.offsetParent().offset(),
props = {
top: coords.top - parentOffset.top,
left: coords.left - parentOffset.left
}
if ($this.css('position') == 'static') props['position'] = 'relative'
$this.css(props)
})
if (this.length==0) return null
var obj = this[0].getBoundingClientRect()
return {
left: obj.left + window.pageXOffset,
top: obj.top + window.pageYOffset,
width: Math.round(obj.width),
height: Math.round(obj.height)
}
},
Zepto offset
|
offset: function (options) {
if (arguments.length) {
return options === undefined ?
this :
this.each(function (i) {
jQuery.offset.setOffset(this, options, i);
});
}
var docElem, win,
elem = this[0],
box = { top: 0, left: 0 },
doc = elem && elem.ownerDocument;
if (!doc) {
return;
}
docElem = doc.documentElement;
// Make sure it's not a disconnected DOM node
if (!jQuery.contains(docElem, elem)) {
return box;
}
// Support: BlackBerry 5, iOS 3 (original iPhone)
// If we don't have gBCR, just use 0,0 rather than error
if (typeof elem.getBoundingClientRect !== strundefined) {
box = elem.getBoundingClientRect();
}
win = getWindow(doc);
return {
top: box.top + win.pageYOffset - docElem.clientTop,
left: box.left + win.pageXOffset - docElem.clientLeft
};
},
jQuery offset
|
²î¾à²»´ó£¬jQueryµÄ¸ü¼ÓÑϽ÷£¬×Ü»á×öºÜ¶à¼æÈÝ£¬jQuery´óÊÇÓеÀÀíµÄ
MVC¿ò¼ÜÑ¡Ôñ
MVC¿ò¼ÜÁ÷ÐеÄÓÐBackbone¡¢angularJS¡¢reactJS¡¢canJSµÈ£¬ÎÒ¸öÈ˱ȽÏÊìϤBackboneÓëcanJS£¬½üÆÚÒ²ÔÚÕûÀícanJSµÄһЩ±Ê¼Ç
Ê×ÏÈÌáÒ»ÏÂBackbone£¬ÎÒÈÏΪÆä×îÓÅÐãµÄ¾ÍÊÇÆäViewÒ»¿éµÄʵÏÖ£¬BackboneµÄView¹æ·¶»¯ÁËdomʼþµÄʹÓ㬱ÜÃâÁËʼþÀÄÓ㬱ÜÃâÁËʼþ¡°Ê§Ð§¡±
µ«ÊÇBackboneµÄ·ÓÉ´¦ÀíÒ»¿éºÜÈõ£¬ÊÂʵÉÏÒ»µãÓÃҲûÓУ¬¶øÇÒ¾ÍËãviewÒ»¿éµÄ¼Ì³Ð¹ØÏµÒ²·Ç³£ÄÑÒÔ´¦Àí£¬extendʵÏÖÊÇ£º
var extend = function (protoProps, staticProps) {
var parent = this;
var child;
// The constructor function for the new subclass is either defined by you
// (the "constructor" property in your `extend` definition), or defaulted
// by us to simply call the parent's constructor.
if (protoProps && _.has(protoProps, 'constructor')) {
child = protoProps.constructor;
} else {
child = function () { return parent.apply(this, arguments); };
}
// Add static properties to the constructor function, if supplied.
_.extend(child, parent, staticProps);
// Set the prototype chain to inherit from `parent`, without calling
// `parent`'s constructor function.
var Surrogate = function () { this.constructor = child; };
Surrogate.prototype = parent.prototype;
child.prototype = new Surrogate;
// Add prototype properties (instance properties) to the subclass,
// if supplied.
if (protoProps) _.extend(child.prototype, protoProps);
// Set a convenience property in case the parent's prototype is needed
// later.
child.__super__ = parent.prototype;
return child;
};
|
child.__super__ = parent.prototype; |
ÕâÊÇÒ»¶Î¼«ÎªÔã¸âµÄÉè¼Æ£¬ËûÊǽ«parentÔÐ͵ÄÖ¸Ïò¸øµ½ÁËÀàµÄµÄÊôÐÔÉÏ£¬ÕâÀï¿ÉÒÔ¿´×ö¾²Ì¬·½·¨£¬ÄÇôÎÒÔÚʵ¼ÊʹÓõÄʱºòÒªÈçºÎʹÓÃÄØ£¿
ÎÒÔÚÄÚ²¿ÔÐÍÁ´ÉÏ»òÕßʵÀý·½·¨Ò»°ãʹÓÃthis±ãÄÜÖ¸Ïò±¾Éí£¬µ«ÊÇÈ´²»ÄÜÖ´Ðб¾ÀàµÄ·½·¨£¬Èç¹ûҪʹÓÃÖ¸Ïò¹¹Ô캯ÊýÎÒÐèÒªÕâô×ö£º
this.constructor this.constructor.__super__ |
Èç¹ûÎÒÕâÀïÏëÒªÖ´Ðи¸ÀàµÄÒ»¸ö·½·¨£¬»¹µÃ¹Ø×¢Æð×÷ÓÃÓòÖ¸Ïò£¬ÓÚÊÇÖ»ÄÜÕâÑùд
this.constructor.__super__.apply(this, arguments) |
¶øÎÒ×ÜÊÇÈÏΪjavascriptµÄconstructδ±Ø·Ç³£¿¿Æ×£¬ÓÚÊÇÕû¸öÈ˶¼²»ºÃÁË£¬ËùÒÔÔÚÒ»ÂÖʹÓú󣬻ù±¾±ã·ÅÆúBackboneÁË£¬µ«ÊÇBackboneÓÅÐãµÄÒ»ÃæÒ²²»ÄÜĨɱ£¬ÎÒÃÇ¿ÉÒÔ½è¼øBackboneʵÏÖһЩ¸ü¼ÓÊʺÏÏîÄ¿µÄ»ù´¡¼Ü×Ó
BackboneÁíÒ»¸öÁîÈËÚ¸²¡µÄµØ·½ÊÇÆä²å¼þÉÙ£¬ÆäʵÕâÀïÓеã¿Á¿Ì£¬Òƶ¯¶Ë²ÅÐËÆð²»¾Ã£¬webappµÄÏîÄ¿ÓÖÉÙ£¬ÕâÀïûÓÐÊǺÜÕý³££¬±ðÈ˵IJå¼þҲδ±ØÄÜÓõÄ˳ÐÄ¡£
angularJsÎÒ±¾ÉíûÓÐʵ¼ÊʹÓùý£¬²»ºÃÆÀ¼Û£¬¸ù¾ÝһЩÅóÓѵÄʵ¼ÊʹÓÃÇé¿ö¿ÉÒԵóöÒ»¸ö½áÂÛ£º
¹æ¶¨µÄ·Ç³£ËÀ£¬ÒµÎñ´úÂë¿É±£³ÖÒ»Ö£¬ÈëÃżòµ¥ÉîÈëÄÑ£¬Ò»µ©³öÏÖÎÊÌ⣬²»Ì«ºÃ¸Ä£¬¶Ô¼¼ÊõÒªÇó½Ï¸ß
ÕâÀï¸÷λ¸ù¾Ýʵ¼ÊÇé¿öÑ¡Ôñ¾ÍºÃ£¬ÎÒÕâÀïµÄ½¨Ò黹ÊÇ×Ô¼º¶Á¶®Ò»¸öMV*µÄ¿ò¼Ü£¬³éÈ¡ÐèÒªµÄÖØÐ´£¬ÏñangularJSÒ»´ÎÉý¼¶£¬Ö®Ç°µÄÏîÄ¿ÈçºÎ¸ú×ÅÉý¼¶£¬ÕâЩÎÊÌâºÜÍ·ÌÛÒ²ºÜʵ¼Ê¡£
Éϴα§×Žâ¾öwebappSEOÄÑÌâʱºò¶ÔreactJSÓÐËù½Ó´¥£¬ÆäÔ´ÂëÑóÑóÈ÷È÷10000ÐУ¬Ã»ÓÐÒ»¶¨¹¦Á¦Óëʱ¼ä»¹ÊÇÔÝʱ²»ÅöΪºÃ¡£
canJSѧϰ³É±¾ÓëBackbone²î²»¶à£¬ÎÒÕâ±ß×¼±¸³öϵÁÐѧϰ±Ê¼Ç£¬ºÃ²»ºÃºóÃæµ÷ÑÐÔÙ˵¡£
×ܽáÒ»¾ä£º²»½¨ÒéÖ±½Ó½«ÒµÎñ¿â¿ò¼ÜÖ±½ÓÈ¡À´Ê¹Ó㬸ü²»½¨ÒéʹÓùýÖØµÄÒµÎñ¿ò¼Ü£¬×îºÃÊÇÄÜÃ÷°×¿ò¼ÜÏëÒª½â¾öµÄÎÊÌ⣬Óë×Ô¼ºÏîÄ¿µÄʵ¼ÊÐèÇó£¬×Ô¼ºÔìÂÖ×ÓÖª¸ùÖªµ×¡£
¿ò¼Ü½¨Òé
×îºÃ¸ø³öÒ»¸öССµÄ½¨Ò飬ϣÍû¶Ô¸÷λÓÐÓãº
µÚÈý·½¿â£¨»ù´¡¿â£©£º
requireJS+Zepto+ÑË¸î°æunderscore£¨½«ÆäÖв»Ì«Óõ½µÄ·½·¨È¥µô£¬Ö÷ҪʹÓÃÄ£°åÒýÇæÒ»¿é£©+
Fastclick
MVC¿â/UI¿â£º
½¨Òé×Ô¼ºÐ´£¬²»ÒªÌ«Ó·Ö×£¬¿ÉÒԳϮ£¬¿ÉÒÔ½è¼ø£¬²»ÒªÍêÈ«ÄÃÀ´¾ÍÓÃ
ÕâÑù³öÀ´µÄÒ»Ì׿ò¼Ü±È½ÏÇáÁ¿¼¶£¬Öª¸ùÖªµ×£¬²»»á³öÏָIJ»¶¯µÄÇé¿ö£¬×îºóÌáÒ»¾ä£º²»¾¹ýµ÷ÑУ¬Ã»ÓÐʵ¼Ê³¡¾°ÔÚ¿ò¼ÜÖÐÍæÄ£Ê½£¬Íæ¸ß¼¶ÀíÄîËÀµÃ¿ì£¬²»ÒªÎª¼¼Êõ¶ø¼¼Êõ¡£
ÍøÕ¾ÊÇÈçºÎ±äÂýµÄ£¿
³ß´ç¡ª¡ªÂýµÄ¸ùÔ´
±øÎÞ¶¨ÊÆ£¬Ë®ÎÞ³£ÐΣ¬°´ÕÕ֮ǰËù˵£¬ÎÒÃÇѡȡÁ˶ÔÎÒÃÇ×îÓŵĿò¼Ü£¬×ö³öÀ´µÄÍøÕ¾Ó¦¸ÃºÜ¿ì£¬µ«µÚÒ»ÂÖÐèÇó½áÊøºóÓеڶþÂÖ£¬µÚ¶þÂÖÐèÇó½áÊøºóÓеÚÈýÂÖ£¬ÍøÕ¾°æ±¾»á´Ó1.1-X.1£¬ÒµÎñµÄÔö³¤ÒÔ¼°Êг¡·Ý¶îµÄ½ÇÁ¦´øÀ´µÄÊÇÒ»ÔÂÒ»·¢²¼£¬Ò»¼¾Ò»ÂÖÌæ£¬Ã»Óв»±äµÄµÀÀí¡£
¿ò¼Ü×î´óµÄµÐÈËÊÇÐèÇ󣬴úÂë×î´óµÄµÐÈËÊDZä¸ü£¬×ʼʹÓõÄÊÇ×Ô¼ºÊìϤµÄ¼¼Êõ£¬Í»È»Ò»Ìì¶à³öÁËһЩĪÃûÆäÃîµÄ³¡¾°£º
¢Ù webappģʽºÜ²»´í£¬ÎªÁË¿ìËÙÒµÎñ·¢Õ¹£¬½«½ÓÈëHybrid¼¼Êõ£¬²¢ÇÒʹÓÃÒ»Ì×´úÂë
¢Ú ΢ÐÅÈë¿ÚÒѾºÜ»ðÁË£¬ÎªÁË¿ìËÙÒµÎñ·¢Õ¹£¬½«½ÓÈë΢ÐÅÈë¿Ú£¬²¢ÇÒʹÓÃÒ»Ì×´úÂë
¢Û UI×é¼þÒѾ¾ÉÁË£¬»»Ò»Åúios8·ç¸ñµÄ×é¼þ°É
¢Ü ȫվÑùʽ¸Ð¾õ¸ú²»Éϳ±Á÷ÁË£¬»»Ò»Ì×°É
ÍøÕ¾±äÂýµÄºËÐÄÔÒòÊdzߴçµÄÅòÕÍ£¬³ß´çÓÅ»¯²ÅÊÇǰ¶ËÓÅ»¯µÄ×îÖØÒªÃüÌ⣬¢Ù¡¢¢Ú³¡¾°ÊDz»¿ÉÔ¤Öª³¡¾°£¬Ãæ¶ÔÕâÖÖ²»¿ÉÔ¤Öª³¡¾°£¬»áдºÜ¶àÇŽӵĴúÂ룬¶øÕâÀà´úÂëÍùÍù×îºó¶¼»áÖ¤Ã÷ÊDz»ºÃµÄ£¡
¿ò¼ÜÊ״δ¦Àíδ֪³¡¾°Ëù×öµÄ´úÂ룬ÍùÍù²»ÊÇ×îÓŵģ¬ÈçHybrid¡¢Èç΢ÐÅÈë¿Ú
Ê£ÏÂÁ½¸ö³¡¾°ÊÇ¿ÉÔ¤¼ûµÄ¸Ä±ä£¬µ«ÊÇ´ËÀà±ä¸ü»á´øÀ´ÁíÒ»¸öÁîÈËÍ·ÌÛµÄÎÊÌ⣬ÐÂÀϰ汾½»Ìæ¡£ÒµÎñ20¶à¸öÒµÎñÍŶӣ¬²»¿ÉÄÜÒ»¸ö°æ±¾±ãÈ«²¿¸Ä±ä£¬±ãÓиöÖð²½ÍƽøµÄ¹ý³Ì¡£
ȫվÑùÊ½Ìæ»»/¶Ôδ֪³¡¾°µÄ´úÂëÓÅ»¯£¬ºÜ¶àʱºòΪÁË×öµ½Í¸Ã÷£¬»á²úÉúÈßÓà´úÂ룬ΪÁË×ö¼æÈÝ£¬³£³£Óкܳ¤Ò»¶Îʱ¼äÐÂÀÏ´úÂë¹²´æµÄÏÖÏó
ÓÚÊDz»¿ÉÔ¤ÖªÔì³ÉµÄ³ß´çÅòÕÍ£¬¾¹ýÖØ¹¹ÓÅ»¯£¬¶øÎªÁË×ö¼æÈÝ£¬¾ÓÈ»»áÔì³É³ß´ç½øÒ»²½µÄÔö¼Ó
ËùνÓÅ»¯²»Ò»¶¨ÂíÉϱãÓÐЧ¹û£¬¿ª·¢ÈËÔ±ÊÇ·ñ¿¸µÃסÕâÖÖѹÁ¦£¬ÊÇ·ñÓÐÈ«ÍŶÓÍÆ¶¯µÄÄÜÁ¦»á±äµÃ±È±¾Éí¼¼ÊõÄÜÁ¦¸ü¼ÓÖØÒª
ÊÂʵÉϵÄÇé¿ö¸´ÔӵĶ࣬ÒÔÉÏÖ»ÊÇÒ»ÏáÇéÔ¸µÄÒÔ¡°½Ó¿Úͳһ¡±¡¢¡°Í¸Ã÷Éý¼¶¡±ÎªÇ°Ìᣬµ«ÊÇ͸Ã÷µÄ´ú¼ÛÊÇÒªÔÚÖØ¹¹´úÂëÖÐ×ö¼æÈÝ£¬¶ø¼æÈÝÓÖ±¾ÉíÊÇÐèÒªÖØ¹¹µôµÄ¶«Î÷£¬µ±¼æÈݲúÉúµÄ´úÂë±ÈÓÅ»¯»¹¶àµÄʱºò£¬ÎÒÃÇ¿ÉÄܾͻá·ÅÆú¼æÈÝ£¬¶øÌṩһÌ×½Ó¿ÚÍêÈ«²»Í³Ò»µÄ¶«Î÷£»¸ü¼ÓÕæÊµÇé¿öÊÇÎÒÃǸù±¾²»»áÈ¥×öÕâÖֶԱȣ¬±ãÖ±½Ó½«ÀϽӿڷϵô£¬Õâ¸öʱºòÔì³ÉµÄÓ°ÏìÊÇ¡°ÌìÅÈËÔ¹¡±£¬µ«ÊÇÎÒÃÇˬÁË£¬Ë¬Á˵Ĵú¼ÛÊǵ¥¸öÍŶӵÄÍÆ¶¯°²¸§¡£
ÕâÀïÇë²Î¿¼angularJSÉý¼¶£¬ÐÂÀË΢²©2.0½Ó¿ÚÓë1.1²»¼æÈÝÎÊÌ⣬ÕâÀïµÄ΢ÐŽӿÚÌá³ö£¬Äѱ£Ò»Äêºó²»»áÍêÈ«ÍÆ·......
ËùÒÔ£¬³ß´ç±ä´óµÄÖ÷ÒªÔÒòÊÇÒòΪÈßÓà´úÂëµÄ²úÉú£¬ÈçºÎÏû³ýÈßÓà´úÂëÊÇÒ»¸öÖØµã£¬Ò²ÊÇÒ»¸öÄѵ㡣
°æ±¾ÂÖÌæ¡ª¡ªÄÄЩÄÜɾµÄÍ´µã
ÊýÔºó£¬20¶à¸öÍŶÓϤÊýÇÐÈëµ½×îеĿò¼Ü£¬ÁíÒ»¸öÁîÈËÍ·ÌÛµÄÎÊÌâÂíÉÏÓÖ³öÀ´ÁË£¬ËäÈ»´ó¼ÒÑùʽ¶¼½ÓÈëµ½×îеķç¸ñÁË£¬µ«ÊÇÀϵÄÑùʽÄÄЩÄÜɾ£¿ÄÄЩ²»ÄÜɾÓÖÊÇÒ»¸öÁîÈËÍ·ÌÛµÄÎÊÌâ¡£
¼¸¸öÔÂǰά»¤CSSͬÊÂÏÓ¹¤×ʵÍÁË£¬»»ÁËÒ»¸öͬÊÂά»¤È«Õ¾»ù´¡css£»ÔÙ¹ýÁËÒ»¶Îʱ¼ä£¬×éÖ¯¼Ü¹¹µ÷Õû£¬ÓÖ»»ÁËÒ»¸öͬÊÂά»¤£»ÔÙ¹ýÁËÒ»¶Îʱ¼ä£¬ÕýÔÚά»¤cssµÄͬʾõµÃ×Ô¼º¼¶±ðµÍÁË£¬ÔÚ¹«Ë¾ÄÚ²¿µÈ´ý½ú¼¶È·Êµ°¾²»×¡£¬ÓÚÊÇÒ²×ßÁË¡£Õâ¸ö»ù´¡cssٲȻ±ä³ÉÁËÒ»±ÊÀÃÕË£¬ËÒ²²»¸Òɾ£¬ËÒ²²»Ô¸Ò⶯£¬¶¯Ò»Ï´íһϡ£
Õâ¸öÎÊÌâ±íÃæÉÏ¿´ÊÇÒ»¸öcssÎÊÌ⣬ÆäʵÕâÊÇÒ»¸öǰ¶ËÄÑÌ⣬ҲÊǹý¶È½âñ²ð·Ö»úÖÆ²»ÕýÈ·´øÀ´µÄÂé·³¡£
CSSÊÇǰ¶Ë²»¿É·Ö¸îµÄÒ»²¿·Ö£¬HTMLÄ£°åÓëJavascript¿ÉÒÔÓÃrequireJS´¦Àí£¬ºÜ´ó³Ì¶ÈÉϽâ¾öÁËjavascript±äÁ¿ÎÛȾµÄÎÊÌ⣬cssÒ»°ã±»Ò»Æð·ÖÀëÁ˳öÀ´£¬µ¥¶À´æ·Å¡£Ò»¸ömain.css°üº¬È«Õ¾ÖØÖõÄÑùʽ£¬±íµ¥¡¢ÁÐ±í¡¢°´Å¥µÄ»ù´¡Ñùʽ£¬ÍêÁ˾ÍÊÇȫվ»ù´¡µÄUI×é¼þ¡£
×ÜÓÐÒµÎñÍŶÓÔÚʵ¼Ê×öÏîĿʱ»á²»×ÔÖ÷µÄʹÓÃmain.cssÖеÄһЩ¹¦ÄÜ£¬Èç¹ûÖ»ÊÇʹÓÃÁË»ù´¡µÄÖØÖû¹ºÃ£¬µ«ÊÇÒ»µ©ÕæµÄʹÓÃÆäÖÐͨÓÃµÄ±íµ¥¡¢ÁбíµÈ±ã2BÁË.
main.cssµÄ³õÖÔµ±È»Êǽ«¸÷¸öÒµÎñÍŶÓͨÓõIJ¿·ÖÌáÁ¶³öÀ´£¬ÊÂʵÉÏÒ²¸ÃÕâÑù×ö£¬µ«ÀíÏëºÜ·áÂú£¬ÏÖʵºÜ²Ð¿á£¬²»Í¬µÄÈ˶ÔSEO¡¢¶ÔÓïÒ廯¶ÔÃüÃûµÄÀí½â²»Ì«Ò»Ñù£¬»»Ò»¸öÈ˾ͻỻһÌ×¶«Î÷¡£µÚÒ»ÅúÏîÄ¿ÉÏÏߺ󣬹ýÁ˼¸¸öÔ£¬¿ª·¢ÈËÔ±³É³¤·Ç³£¾Þ´ó£¬¶ÔÔÀ´µÄÃüÃû½á¹¹£¬ÍêÈ«²»Ï÷Ò»¹Ë£¬×Ô¼ºµ¹ÌÚ³öÒ»Ì×ÐµĶ«Î÷£¬Èø÷¸öÍŶӻ»ÉÏÈ¥£¬ÆäËüÍŶÓÃæ¶ÔÕâÖÖÒªÇóÊǼ°ÆäÍ·Ì۵ģ¬ÒòΪ¸÷¸öÍŶӻáÓÐ×Ô¼ºµÄCSSÍŶӣ¬ÕâÑùÒ»¸ãÊÆ±Ø¸ÃÒµÎñÍŶӵÄHTML½á¹¹ÓëCSSÒª±»·ÐÂÒ»´Î£¬ÕâÑùµÄÒâÒåÊÇʲô£¬±ã²»Ì«Ã÷ÏÔÁË¡£2¸öÐÇÆÚ¹ýÈ¥ÁË£¬ÐÂÒ»Åú¡°¹æ·¶»¯¡±µÄ½á¹¹ÖÕÓÚÉÏÏßÁË£¬2¸öÔºóËùÓеÄÒµÎñÍŶÓÈ«²¿½ÓÁËеĽṹ£¬Ëƺõ½Ô´ó»¶Ï²£¬µ«ÊÇÄǸöͬʱ»ÁíÒ»¸öÍŹ«Ë¾ÍÚ¹ýÈ¥µ±Ç°¶ËleaderÁË£¬ÓÚÊÇÒ»´óȺ²ÝÄàÂíÕýÔÚÏòÒµÎñÍŶӵľջ¨±¼ÌÚ¹ýÈ¥£¡ÕâÀïµÄ½¨ÒéÊÇ£º
ÒµÎñÍŶӲ»ÒªÒÀÀµÓÚ¿ò¼ÜµÄÈκÎdom½á¹¹ÓëcssÑùʽ£¬Ìرð²»Òª½«UI×é¼þÖеÄdom½á¹¹ÓëÑùʽµ¥¶À¿Ù³öÀ´Ê¹Ó㬷ñÔò¾Í×¼±¸·ÊÔí°É
CSSÈßÓàµÄ½â¾ö·½°¸
¶Ôǰ¶Ë¾ßÓÐʵ¼ÊÍÆ¶¯×÷Óõģ¬ÎÒ¾õµÃÓÐÒÔϼ¼Êõ£º
¢Ù jQuery£¬½â¾öIEʱ´úÁîÈËÍ·Ì۵ļæÈÝÎÊÌâ
¢Ú ÒÆ¶¯À˳±£¬ÈÃHTML5ÓëCSS3Á÷ÐÐÆðÀ´
¢Û requireJS£¬Ä£¿é»¯¼ÓÔØ¼¼ÊõÈÃǰ¶Ë¿ª·¢ÄÜÐͬ×÷Õ½£¬Ò²Ò»¶¨Ï޶ȵıÜÃâÁËÃüÃûÎÛȾ
¢Ü Hybrid£¬Hybrid¼¼Êõ½«Ç°¶ËÍÆÏòÁËÒ»¸öǰËùδÓеĸ߶ȣ¬ÕâÃż¼ÊõÈÃǰ¶ËËÁÎ޼ɵ¬µÄÇÖÕ¼×ÅnativeµÄ·Ý¶î
Èç¹û˵½ÓÏÂÀ´»áÓÐÒ»Ãż¼Êõ»á¼ÌÐøÍÆ¶¯Ç°¶Ë¼¼Êõ·¢Õ¹£¬ÓпÉÄÜÊÇweb components£¬»òÕß³öÏÖÁËеÄÉ豸¡£
web componentÊÇǰ¶Ë¼¸Ïî¼¼ÊõµÄÈںϣ¬ÀïÃæÓÐÒ»ÏÄÜΪshadow dom£¬shadow domÊÇÒ»ÖÖä¯ÀÀÆ÷ÐÐΪ£¬ËûÔÊÐíÔÚdocumentÎĵµÖÐäÖȾʱ²åÈëÒ»¸ö¶ÀÁ¢µÄdom×ÓÊ÷£¬µ«Õâ¸ödomÊ÷ÓëÖ÷domÊ÷ÍêÈ«·ÖÀëµÄ£¬²»»á»¥ÏàÓ°Ïì¡£ÒÔÒ»¸ö×é¼þΪÀý£¬ÊÇÕâ¸öÑù×ӵģº

Ò»¸ö×é¼þ¾ÍÖ»ÓÐÒ»¸ödivÁË£¬ÕâÊÇÒ»¼þºÜ°ôµÄÊÂÇ飬µ«Êµ¼ÊµÄÖ§³ÖÇé¿ö²»ÈÝÀÖ¹Û£º

È»ºóweb components»¹»áÓÐһЩ¸½´øµÄÎÊÌ⣺
¢Ù cssÓëÈÝÆ÷Ò»Æð³öÏÖ£¬¶øÃ»ÓÐÔÚÒ»¸öÎļþÖУ¬ÔںܶàÈË¿´À´ºÜ¡°Ææ¹Ö¡±£¬ÎÒ×î³õÒ²¾õµÃÓеã¹Ö
¢Ú ´ó¹æÄ£Ê¹Óúó£¬ÓÃÓÚ×°ÔØHTMLµÄÈÝÆ÷×é¼þÈçºÎ´¦Àí£¬ÈÔȻûÓÐÒ»¸öºÜºÃµÄ·½°¸
¢Û ¶ÔÓÚ²»Ö§³ÖµÄÇé¿öÈçºÎ×ö½µ¼¶£¬ÈçºÎ×îС»¯´úÂë
¢Ü ûÓдó¹æÄ£Ê¹ÓõݸÀý£¬ÖÁÉÙ¹úÄÚûÓкܺõÄÑéÖ¤¹ý
ÆäÖÐshadow dom˼ÏëÒ²Êǽâ¾öcssÖØ¸´µÄÒ»¸ö°ì·¨£¬ÒÔÒ»¸öÒ³ÃæÎªÀý£¬ËûÔÚÔÀ´µÄ½á¹¹ÊÇÕâ¸öÑù×ӵģº
main.css
view1.js
view1.html
view2.js
view2.css
¿ª·¢µÄʱºòÊÇÕâ¸öÑù×Ó£º
view1.css
view1.js
view1.html
×îÖÕ·¢²¼ÊÇÕâ¸öÑù×Ó£º
view1.js
|
ÕâÒ»Çй鹦ÓÚrequireJSÓëgrunt´ò°ü¹¤¾ß£¬ÕâÀï¸øÒ»¸öʵ¼ÊµÄÀý×Ó£º

ÕâÀï×îÖջᱻ´ò°ü±àÒëΪһ¸öÎļþ£º

ÕâÑùµÄ»°°æ±¾UIÉý¼¶Ö»ÓëjsÓйØÏµ£¬requireJSÅäÖü´¿É£¬ÕâÀïÖ»ÊÇUIµÄÓ¦Ó㬺ÜÈÝÒ×±ã¿ÉÒÔÀ©Õ¹µ½page
view¼¶±ð£¬Ê¹Óõõ±µÄ»°ÂèÂèÔÙÒ²²»ÓùØÐÄÎÒÃǵİ汾Éý¼¶ÒÔ¼°cssÈßÓàÁË
ÕâÀï´¦Àí½µ¼¶Ê±£¬»á¸øcss¼Óǰ׺£¬ÈçÒ»¸ö×é¼þidΪui£¬ÆäÖеÄcss»á±àÒëΪ
ÓÉÓÚcssÑ¡ÔñÆ÷ÊÇÓÉÓÒÖÁ×óµÄ£¬ÕâÖÖ´úÂë²úÉúµÄËÑË÷ÏûºÄÊÇÒ»¸öȱµã£¬µ«ÊÇÓë³ß´çµÄ½µµÍ±ÈÆðÀ´±ã²»Ëãʲô
ÍøÂçÇëÇó
ÇëÇóÊÇǰ¶ËÓÅ»¯µÄÉúÃü£¬ÓÅ»¯µ½×îºó£¬ÓÅ»¯µ½¼«Ö£¬¶¼»áÔÚÇëÇóÊý¡¢ÇëÇóÁ¿ÉÏ×öÎÄÕ£¬³£Óò¢ÇÒʵÓõÄÊÖ¶ÎÓУº
¢Ù CSS Sprites
¢Ú lazyload
¢Û ºÏ²¢½Å±¾jsÎļþ
¢Ü localsorage
......
ÎÞÂÛCDN»¹ÊÇGzip£¬¶¼ÊÇÔÚ´«ÊäÉÏ×öÎÄÕ£¬½ðÎÞ×ã³à£¬ÔÂÎÞ³£Ô²£¬ÒÔÉϼ¼ÊõÊֶνÔÓÐÆäȱÏÝ£¬ÊÇÐèÒªÑéÖ¤µÄ£¬ÈçºÎÕýÈ·Ç¡µ±µÄʹÓã¬ÎÒÕâÀï̸ÏÂÎÒµÄÀí½â
CSS Sprites
CSS Sprites¿ÉÒÔÓÐЧµÄ¼õµÍÇëÇóÊý£¬Å¼¶û»¹¿ÉÒÔ½µµÍÇëÇóÁ¿£¬µ«ÊÇËæ×Å·¢Õ¹£¬¿ÉÄÜ»áÓÐÒÔÏÂÎÊÌ⣺
¢Ù ÐÂÔöÄÑ£¬ÌرðÊÇcssά»¤¹¤×÷»»È˵ÄÇé¿öÏÂ
¢Ú ɾ³ýÄÑ£¬Õâ¸öÎÊÌâ¸ü¼ÓÃ÷ÏÔ£¬1Äêºó£¬Ç°¶Ë·ç¸ñÒѾ»»ÁËÁ½ÅúÁË£¬ÕâÀïÒªÖªµÀÄÄЩͼ±ê»¹ÔÚÓã¬ÄÄЩûÓñäµÃ·Ç³£À§ÄÑ
¢Û µ÷ÕûÄÑ£¬Ò»¸öͼ±ê¸Õ¿ªÊ¼ÊǺìÉ«£¬Í»È»ÐèÒª±ä³ÉÀ¶É«£¬ÕâÀàÐèÇó»áÈÃÕâ¸ö¹¤×÷±äµÃ²»ÇáËÉ
¢Ü ÏìӦʽ£¬Õâ¸ö¸ü»áµ¼ÖÂÖ¸Êý¼¶µÄÔö³¤£¬±³¾°Í¼ÒªËæ×Å¿í¶ÈËõ·ÅÕâÖÖÐèÇó¸ü¼ÓÌÖÑá
ÕâÀï·ÅÒ»ÕÅ×öµÄºÜºÃµÄͼ£º

ÓÉͼËùʾ£¬ÕâÀïÊǶԳߴç×öÁËÒ»¶¨Çø·ÖµÄ£¬µ«ÊÇÕâÀïÈÔÈ»²»ÊÇ×îÓÅ£¬ÆäʵÒÔÉϺܶàͼ±ê¿ÉÒÔÖ±½ÓÓÉCSS3ʵÏÖ£¬ÕâÀï¾Ù¸ö°¸Àý£º

ÕâÀïÓÅÁÓÖ®·Ö¸÷λ×Ô¼ºÅжϣ¬ÎÒ·´ÕýÍêȫƫÏòÁËCSS3......
ΪʲôҪ½µµÍÇëÇóÊý
ÇëÇóÏûºÄ
ÿ´ÎhttpÇëÇó¶¼»á´øÉÏһЩ¶îÍâÐÅÏ¢£¬±ÈÈçcookieÿ´Î¶¼»á´øÉÏ£¬ÉÏÊöµÄCSS SpritesµÄÒâÒå¾ÍÊÇ£¬µ±ÇëÇóÒ»¸ögzipºó»¹²»µ½1KµÄͼ±ê£¬¸ã²»ºÃÇëÇóÊý¾Ý±Èʵ¼ÊÐèÇóÊý¾Ý»¹´ó
¶øÒ»´Îhttp»¹»áµ¼ÖÂÆäËü¿ªÏú£¬Ã¿´Î¶¼»á¾ÀúÓòÃû½âÎö¡¢¿ªÆôÁ¬½Ó¡¢·¢ËÍÇëÇóµÈ²Ù×÷£¬ÒÔÒ»¸öͼƬÇëÇóÔÚÕý³£ÍøËÙÓë2GÇé¿öÀ´Ëµ£º

¿ÉÒÔ¿´µ½£¬ÔÚÍøËÙÕý³£µÄÇé¿öÏ£¬µÈ´ýÏûºÄµÄʱ¼ä¿ÉÄܱȴ«Ê仹¶à£¬Õâ¸öʱºò£¬CSS SpritesµÄÒâÒå¾ÍÂíÉϳöÀ´ÁË£¬ÕâÀïÔÙ˵һ¸öÎÊÌâ²¢ÐмÓÔØµÄÎÊÌâ¡£
ä¯ÀÀÆ÷²¢·¢Êý
ÎÒ֮ǰÅöµ½Ò»´ÎͼƬ¼ÓÔØ×èÈûjsµÄ°¸Àý£¬Æä³öÏÖÔÒò¾ÍÊÇä¯ÀÀÆ÷²¢·¢ÊýÏÞÖÆ£¬ÕâÀïÒÔÒ»¸öͼΪÀý£º

chromeÔÚÇëÇó×ÊÔ´Ï»áÓÐËùÏÞÖÆ£¬Òƶ¯¶ËµÄÏÞÖÆÆÕ±éÔÚ6¸ö×óÓÒ£¬Õâ¸öʱºòÔÚ²¢·¢Êý±»Õ¼Âúʱ£¬ÄãµÄajax±ã»á±»¸éÖã¬ÕâÔÚwebappÖÐÇé¿ö¸ü¼Ó³£¼û£¬ËùÒÔÍøÂçÏÞÖÆµÄÇé¿öÏÂÇëÇóÊý¿ØÖÆÊDZØÒªµÄ£¬¶øÇÒ¿ÉÒÔ½µµÍ·þÎñÆ÷¶ËµÄѹÁ¦¡£
ÀëÏß´æ´¢
¹¤×÷ÖÐʵ¼ÊʹÓõÄÀëÏß»º´æÓÐlocalstorageÓëApplication cache£¬ÕâÁ½¸ö½ÔÊǺö«Î÷£¬Ò»¸ö³£ÓÃÓÚajaxÇëÇ󻺴棬һ¸ö³£ÓÃÓÚ¾²Ì¬×ÊÔ´»º´æ£¬ÕâÀï¼òµ¥ËµÏÂÎÒµÄһЩÀí½â¡£
localstorage
Ê×ÏÈlocalsorageÓÐ500Íò×Ö·ûµÄÏÞÖÆ£¬»ù±¾À´Ëµ¾ÍÊÇ5M×óÓÒµÄÏÞÖÆ£¬ä¯ÀÀÆ÷¸÷Óв»Í¬£¬Ò²»áÓжÁдµÄÐÔÄÜËðºÄ£¬ËùÒÔ²»ÄܺÁÎÞÏÞÖÆµÄʹÓÃ
localstorage²»±»ÅÀ³æÊ¶±ð£¬²»ÄÜ¿çÓò¹²Ïí£¬ËùÒÔ²»ÒªÓÃÒÔ´æ´¢ÒµÎñ¹Ø¼üÐÅÏ¢£¬¸ü¼Ó²»Òª´æ´¢°²È«ÐÅÏ¢£¬Òª×öµ½ÓУ¬½õÉÏÌí»¨£»ÎÞ£¬ºÁÎÞÓ°Ïì²ÅÐУº
¢Ù 500Íò×Ö·ûÏÞÖÆ
¢Ú Ò»°ã´æ´¢ajaxÇëÇó·µ»ØÊý¾Ý£¬²¢ÇÒÐèÒªÉèÖùýÆÚʱ¼ä
¢Û ¾ßÓÐÇåÀí»úÖÆ£¬½«¹ýÆÚÊý¾ÝÇåÀí
¢Ü ²»´æ´¢Ãô¸ÐÐÅÏ¢
¢Ý ²»´æ´¢SEOÒÀÀµÊý¾Ý£¬ÖÁÉÙ²»ÄÜÑÏÖØÒÀÀµ
¢Þ Òþ˽ģʽlocalstorage²»¿É¶Áд£¬ËùÒÔ²»ÄÜÓÃËüÀ´×öÒ³ÃæÍ¨ÐÅ
¢ß localstorage¶ÁдÓÐÐÔÄÜËðºÄ£¬´óÊý¾Ý¶ÁдҪ±ÜÃâ
Application cache
Application cacheÊÇHTML5ÐÂÔöapi£¬ËäÈ»¶¼ÊÇ´æ´¢£¬È´Óëlocalstorage¡¢cookie²»Ì«Ïàͬ£¬Application
cache´æ´¢µÄÊÇÒ»°ãÊǾ²Ì¬×ÊÔ´£¬ÔÊÐíä¯ÀÀÆ÷ÇëÇóÕâЩ×ÊԴʱ²»±ØÍ¨¹ýÍøÂ磬Éè¼ÆµÃµ±µÄÇé¿ö¿ÉÒÔÈ¡´úHybridµÄ´æ´¢¾²Ì¬×ÊÔ´£¬Ê¹ÓÃApplication
cacheÖ÷ÒªÓŵãÊÇ£º
ʹÓÃApplication cache¿ÉÒÔÌáÉýÍøÕ¾ÔØÈëËÙ¶È£¬Ö÷ÒªÌåÏÖÔÚÇëÇó´«ÊäÉÏ£¬°ÑһЩhttpÇëÇóתΪ±¾µØ¶ÁÈ¡£¬ÓÐЧµØ½µµÍÍøÂçÑÓ³Ù£¬½µµÍhttpÇëÇó£¬Ê¹Óüòµ¥£¬»¹½ÚÔ¼Á÷Á¿ºÎÀÖ¶ø²»Îª£¿
¶øÎÞÂÛʲô´æ´¢¼¼Êõ¶¼»áÓпռäÏÞÖÆ£¨¾Ý˵ÊÇ5M£©£¬ÕâÀï¸üеĻúÖÆÊÇ×îÎªÖØÒªµÄ£¬ÕâÀïÊÇÎÒÃÇʹÓõĽáÂÛ£º
application cacheÊǾø¶ÔÖµµÃʹÓõģ¬ÊÇ¿ÉÒÔ½õÉÏÌí»¨¡£µ«ÔõôÓã¬ÓöàÉÙÊÇÐèÒª¿¼Âǵĵ㡣ÓÉÓÚÔÀíÉÏ£¬application
cacheÊǰÑmanifestÉϵÄ×ÊÔ´Ò»ÆðÏÂÔØÏÂÀ´£¬ËùÒÔmanifestÀïµÄÄÚÈݲ»Ò˹ý¶à£¬Êý¾ÝÁ¿²»Ò˹ý´ó£»ÓÉÓÚmanifestµÄ½âÎöͨ³£ÒÔÒ³ÃæË¢ÐÂΪ´¥·¢µã£¬ÇÒ¸üÐµĻº´æ²»»áÁ¢¼´±»Ê¹Óã¬ËùÒÔ»º´æµÄ×ÊÔ´Ó¦ÒÔ¾²Ì¬×ÊÔ´¡¢¸üÐÂÆµÂʱȽϵ͵Ä×ÊԴΪÖ÷¡£ÁíÍâÒª×öºÃ¶ÔmanifestÎļþµÄ¹ÜÀí£¬ÓÉÓÚÇåµ¥ÄÚÎļþ²»¿É·ÃÎÊ»òmanifest¸üв»¼°Ê±Ôì³ÉµÄһЩÎÊÌâ¡£
¿ìµÄ¼ÙÏó
³ýÁËÕæÊµÊÖ¶ÎÓÅ»¯´úÂë´¦Àí³ß´ç£¬½µµÍÇëÇóÊý£¬ÈÔÈ»ÓÐһЩ´øÓС°ÆÛÆ¡±ÐÔÖʵļ¼Êõ¿ÉÒÔ×öÊ×Ò³¼ÓÔØµÄÓÅ»¯£¬±ÈÈçlazyload¡¢fakeÒ³
lazyload
ÎÒÃdz£ËµµÄÑÓ³Ù¼ÓÔØÊÇͼƬÑÓ³Ù¼ÓÔØ£¬Æäʵ·ÇͼƬҲ¿ÉÑÓ³Ù¼ÓÔØ£¬¿´Êµ¼ÊÐèÇó¼´¿É£¬ÕâÀïµãµ½¼´¿É£¬²»ÔÙ¶à˵¡£
Ϊimg±êÇ©srcÉèÖÃͳһµÄͼƬÁ´½Ó£¬¶ø½«ÕæÊµÁ´½ÓµØÖ·×°ÔÚ×Ô¶¨ÒåÊôÐÔÖС£
ËùÒÔ¿ªÊ¼Ê±ºòͼƬÊDz»»á¼ÓÔØµÄ£¬ÎÒÃǽ«Âú×ãÌõ¼þµÄͼƬµÄsrcÖØÖÃΪ×Ô¶¨ÒåÊôÐÔ±ã¿ÉʵÏÖÑÓ³Ù¼ÓÔØ¹¦ÄÜ
fakeÒ³
ÎÒÃÇÓ¦¸Ã±ÜÃâÒ³Ãæ³¤Ê±¼ä°×Ò³£¬ËùÒÔ»á³öÏÖfakeÒ³µÄ¸ÅÄî£¬Ò³ÃæäÖȾ½ö½öÐèÒªHTMLÒÔ¼°CSS£¬Õâ¸ö±ãÊǵÚÒ»¸öÓÅ»¯µã£¬js¶ÔÓÚÏÔʾ²»ÊDZØÐ룬ajaxÒ²²»ÊÇ¡£
ÈôÊÇÈÎÓÉjs¡¢ajax¼ÓÔØÍê³ÉÔÙäÖÈ¾Ò³Ãæ£¬Óû§ºÜÓпÉÄÜʧȥÄÍÐÄ£¬ËùÒÔ¸ãһЩÄÚǶµÄcssÒÔ¼°Í¨ÓõÄhtmlÔÚÊ×Ò³ËÆºõÊÇÒ»¸ö²»´íµÄÑ¡Ôñ
Ò»¸ö¾²Ì¬HTMLÒ³Ãæ£¬×°ÔØÊׯÁµÄ»ù±¾ÄÚÈÝ£¬ÈÃÊ×Ò³¿ìËÙÏÔʾ£¬È»ºójs¼ÓÔØ½áÊøºó»áÂíÉÏÖØÐÂäÖȾÕû¸öÒ³Ãæ£¬Õâ¸öÑù×Ó£¬Óû§¾Í¿ÉÒԺܿìµÄ¿´µ½Ò³ÃæÏìÓ¦£¬¸øÓû§Ò»¸ö¿ìµÄ´í¾õ
Ô¤¼ÓÔØ
ÕâÀïµÄÔ¤¼ÓÔØÊÇÔÚä¯ÀÀÆ÷¿ÕÏеÄʱºò¼ÓÔØºóÐøÒ³ÃæËùÐè×ÊÔ´£¬ÊÇÒ»ÖÖÀË·ÑÓû§Á÷Á¿µÄÐÐΪ£¬ÊôÓÚÒԿռ任ʱ¼äµÄ×ö·¨£¬µ«ÊÇÕâ¸öʵʩÄѶȱȽϸߡ£
Ô¤¼ÓÔØµÄǰÌáÊDz»Ó°ÏìÖ÷³ÌÐòµÄÇé¿öÏÂ͵͵µÄ¼ÓÔØ£¬Ò²¾ÍÊÇÔÚä¯ÀÀÆ÷¿ÕÏеÄʱºò¼ÓÔØ£¬µ«ÊÇä¯ÀÀÆ÷¿ÕÏÐËÆºõ±äµÃ²»¿É¿ØÖÆ
ä¯ÀÀÆ÷¿ÕÏв»¿ÉÅжϣ¨Èç¹ûÄúÖªµÀÇëÁôÑÔ£©£¬ÎÒÃÇÅжϵıê×¼Êǵ±Ç°Ã»ÓÐdomʼþ²Ù×÷£¬Ã»ÓÐajax
¿ÉÒÔ¿´³ö£¬ÓÉÓÚä¯ÀÀÆ÷ûÓпÕÏеĻص÷£¬ËùÒÔÎÒÃÇÖ»ÄÜ×Ô¼ºÊµÏÖ£¬ÕâÀàµÄʵÏÖ²»Ì«¿¿Æ×£¬ÎÒÃǵÄÔ¤¼ÓÔØ×öµÄ¾ÍºÜ´Ö±©£¬Òª×öÔ¤¼ÓÔØÐèҪעÒâÒÔϼ¸µã£º
¢Ù ä¯ÀÀÆ÷¿ÕÏÐÐèÒªÒ»¸öÅжϻúÖÆ
¢Ú ÿ´Î¿ÕÏÐʱÐèÒªÓÐÒ»¸ö¶ÓÁÐÒ»µãÒ»µãµÄ¼ÓÔØ×ÊÔ´£¬·ñÔòÇëÇóÒ»µ©·¢³öºÜÈÝÒ×Ó°ÏìÖ÷Âß¼
¢Û ×öºÃÔ¤¼ÓÔØ×ÊÔ´¶ÓÁÐµÄÆ¥ÅäËã·¨£¬¿ÉÒÔÊÇÒµÎñÍŶÓÅäÖÃ
ÒÆ¶¯¸ïÃü¡ª¡ªHybrid
Hybrid¼¼Êõ½«Ç°¶ËÍÆµ½ÁËǰËùδÓеĸ߶ȣ¬µ«ÊÇHybrid¿ª·¢Öб¾ÉíÒ²ÓÐһЩÐèҪעÒâµÄµØ·½£¬ÕâÀïÈç¹û³öÏÖÁËÉè¼ÆÉϵÄʧÎó»á¶ÔºóÆÚÒµÎñÍŶӿª·¢´øÎÊÌ⣬Óм¸µã¿ÉÒÔ×¢Òâ
¾Ü¾ønative UI
×î³õµÄappÒ»°ãÊÇnative¿ª·¢µÄ£¬HybridÒÀÈ»ÒÀÀµÓÚnative¿ª·¢ÈËÔ±£¬µ«ÊÇÇëÒ»¶¨¾Ü¾øÈκÎnativeΪwebviewÌṩÈκÎÒµÎñÀàUI£¬Ç¿ÊƵĶÔnative˵²»£¡£¡£¡
×î³£¼ûµÄµÄÇé¿öÊÇ£¬nativeΪǰ¶ËÌṩһ¸önativeµÄÍ·£¬ÏÂÃæÊÇÒ»¸öwebview×°ÔØhtmlÓëcss£¬Õâ¸öÊÇÒ»¼þ·Ç³£¿ÓµÄÊÂÇé
HybridÖÐʹÓÃnativeµÄÍ·£¬ÊÇÎÒ¾õµÃ×îÍ·ÌÛµÄÊÂÇ飡£¡£¡
Ϊʲô»áʹÓÃnativeµÄÍ·ÄØ£¿µ±Ê±½»ÉæµÄ½á¹ûÊÇ£º
¢Ù javascriptÈÝÒ×±¨´í£¬Ò»µ©³ö´í£¬Ò³Ãæ»áÏÝÈë¼ÙËÀ
¢Ú ½øÈëwebviewʱ£¬Ò³ÃæÓÐÒ»¸ö×¼±¸¶¯×÷£¬×ÊÔ´ÓÉnativeÈ¡ºÜ¿ì£¬ÓÉÏßÉÏÈ¡ºÜÂý£»ÎÞÂÛÈçºÎ»á³öÏÖÒ»¶Îʱ¼äµÄ°×Ò³
ÆäʵÉÏÊö½ÔÊÇ¿ÉÒÔ½â¾öµÄ£¬HybridÖÐ»á´æÔÚnativeÍ·µÄÖ÷ÒªÔÒò»¹ÊÇ·ÀÖ¹Ò³ÃæÂÒдjs³ö´í£¬µ«ÊÇÒ»°ãÒâÒåµÄapp²»ÊÇ΢ÐÅÕâÀàÈÝÆ÷Èí¼þ£¬ÀïÃæµÄÒ³ÃæÊÇ¿ª·¢ÈËÔ±¾¹ýÑϸñ²âÊÔд³öÀ´µÄ£¬js³ö´í»á¼ÙËÀ£¬native´úÂë³ö´í»¹»áÉÁÍËÄØ¡£ÎÊÌâÒ»£¬Õ¾²»×¡½Å£¬¶øÇÒÍêÈ«¿ÉÒÔʹÓÃÕâÖÖ·½Ê½´¦Àí£º
<header > <a class="header" href="taobao://wireless">ºóÍË</a> <h1 class="js_title"> ±êÌâ </h1> </header> |
¾ÍËãÊÇjs±¨´í£¬ÎÒÕâÀï¼ÙÉèÒ»À´¾Í±¨´í£¬´¦´¦±¨´í£¬µ«ÒÔÉÏÐÒénativeÊÇÒ»¶¨¿ÉÒÔ²¶×½µÄ£¬jsÕýÈ·µÄÇé¿ö±ãe.preventDefault()£¬´íÎó±ãÌø»ØÊ×Ò³£¬Õâ¸ö²»ÊDz»¿É´¦Àí¡£
ÎÊÌâ¶þÆäʵÓëÎÊÌâÒ»Ò»Ö£¬×î³õ½øÈëµÄʱºòÃ÷Ã÷¿ÉÒÔÓиö¿É¹Ø±ÕµÄnative loading£¬ÔÚwebview¼ÓÔØºÃºóÔÙϵͳ¼¶±ðµÄ¹Ø±Õloading¼´¿É£¬Ã»ÓÐʲô²»Äܽâ¾öµÄ¡£
Ö®ËùÒÔÎÒÕâÀï»áÈç´Ë¼¤ÁҵľܾønativeÌṩµÄÍ·£¬ÊÇÒòΪH5Ò³ÃæÊÇÒ»°ãÊÇÈýÌ×¹²Óã¬H5Õ¾µã£¬ios£¬android£¬¶øH5µÄdom²Ù×÷ǧ±äÍò»¯£¬Í·²¿Ò»Ð©Ææ¹ÖµÄÐèÇóչʾ£¬native¸ù±¾ÎÞ´ÓÖ§³Ö£¬ÕâÀﻹ»áÉæ¼°¿çÍŶӺÏ×÷£¬ËùÒÔHybrid¿ªÊ¼µÄʱºòÒ»¶¨Òª¼á¾öµÖÖÆnative
ÌṩµÄÒµÎñÀàUI£¬²»È»ºóÆÚ½»Á÷ºÜÂé·³¡£
|