jQuery手机加载次数
jQuery mobile loading times
我在一个网页上使用一些jQuery来检测哪个菜单选项是当前的,什么时候显示移动菜单,等等——我几乎只是在试验什么是可能的。当我在台式电脑上访问该页面时,代码运行正常,我的移动菜单和选项卡点击后立即加载。
当我在移动设备(S5, Android)上查看页面时,菜单显示的加载时间,标签的更改等需要几秒钟,而不是立即。我不太确定这是否取决于我的代码效率,或者如果我不应该使用特定的函数或其他东西。你知道是什么原因导致了延误吗?
$(document).ready(function() {
function getParam(name) {
name = name.replace(/['[]/, "''[").replace(/[']]/, "'']");
var regex = new RegExp("[''?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/'+/g, " "));
}
var sortElement = currentSort(getParam('sort'));
var itemElement = currentItem(getParam('items'));
$(sortElement.element).addClass('current');
$(itemElement.element).addClass('current');
function currentSort(value) {
var strElement;
switch(value) {
case 'newest' :
strElement = '#newest';
break;
case 'oldest' :
strElement = '#oldest';
break;
case 'alph_desc' :
strElement = '#desc';
break;
case 'alph_asc' :
strElement = '#asc';
break;
case '' :
strElement = '#newest';
break;
} return {
element: strElement
}
}
function currentItem(value) {
var strElement;
switch(value) {
case '10' :
strElement = '#fewer';
break;
case '15' :
strElement = '#few';
break;
case '50' :
strElement = '#more';
break;
case '' :
strElement = '#few';
break;
} return {
element: strElement
}
}
$('#search a').click(function() {
$('#search').html('<form><input class="nav-search" placeholder="Search" type="text" name="search-query"/><input type="submit" value=" "/></form>');
});
function checkWidth() {
var windowSize = $(window).width();
if (windowSize < 1020) {
$('.navigation .container').html('<ul><li class="brand mobile"><a href="/products"></a></li><li class="menu"></li><div class="mobile-menu"><ul><li><a href="/products"><div class="icon product"></div>Products</a></li><!----><li><a href="/personalise"><div class="icon personalise"></div>Personalise</a></li><!----><li id="search"><a><div class="icon search"></div>Search</a></li><!----><li><a href="/basket"><div class="icon basket"></div>Basket</a></li></ul></div></ul>');
$('.mobile-menu').hide();
$('.menu').click(function() {
$('.mobile-menu').slideToggle();
});
} else {
$('.navigation .container').html('<ul><li><a href="/products"><div class="icon product"></div>Products</a></li><!----><li><a href="/personalise"><div class="icon personalise"></div>Personalise</a></li><!----><li class="brand"><a href="/products"></a></li><!----><li id="search"><a><div class="icon search"></div>Search</a></li><!----><li><a href="/basket"><div class="icon basket"></div>Basket</a></li></ul>');
}
}
checkWidth();
$(window).resize(checkWidth);
});
就是一些指针
- 不使用docReady与JQM,使用
mobileInit
(见这里和JQM文档) - 移动浏览器比"桌面"浏览器慢,所以"昂贵"的代码是有代价的。
- 你所做的一切都可以在纯JavaScript中完成,那么为什么要使用jQuery呢
没有时间进行测试,并且包含了许多我永远不会像这样编写的东西,但这应该给你足够的指针:
(function (window, document) {
var search_form, mobile_menu, desktop_menu;
// > don't work with strings, build using documentElement;
// > correct your strings, they are not valid!
search_form = '<form><input class="nav-search" placeholder="Search" type="text" name="search-query"/><input type="submit" value=" "/></form>';
mobile_menu = '<ul><li class="brand mobile"><a href="/products"></a></li><li class="menu"></li><div class="mobile-menu"><ul><li><a href="/products"><div class="icon product"></div>Products</a></li><!----><li><a href="/personalise"><div class="icon personalise"></div>Personalise</a></li><!----><li id="search"><a><div class="icon search"></div>Search</a></li><!----><li><a href="/basket"><div class="icon basket"></div>Basket</a></li></ul></div></ul>';
desktop_menu = '<ul><li><a href="/products"><div class="icon product"></div>Products</a></li><!----><li><a href="/personalise"><div class="icon personalise"></div>Personalise</a></li><!----><li class="brand"><a href="/products"></a></li><!----><li id="search"><a><div class="icon search"></div>Search</a></li><!----><li><a href="/basket"><div class="icon basket"></div>Basket</a></li></ul>';
// > JQM exposes methods to work with URL, look for $.mobile.path
// > declare methods before they are needed
// helper: get url parameter
function getParam(name) {
name = name.replace(/['[]/, "''[").replace(/[']]/, "'']");
var regex = new RegExp("[''?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/'+/g, " "));
}
// helper: get element showing sorting direction
function currentSort(value) {
var snip = value.split("_");
return "#" + (snip[1] || snip[0]);
}
// helper: get element showing number of items
function currentItem(value) {
switch (value) {
case '10': return "#fewer";
case '50': return "#more";
default: return "#few";
}
}
// helper: set menu depending on real-estate available
// ATTENTION: every time you call this you are setting a new binding!!!
function checkWidth() {
var window_size, $container;
window_size = $(window).width();
$container = $('.navigation .container');
if (window_size < 1020) {
$container.html(mobile_menu);
$('.mobile-menu').hide();
$('.menu').click(function() {
$('.mobile-menu').slideToggle(desktop_menu);
});
} else {
$container.html(desktop_menu);
}
}
$(document).on("mobileinit", function () {
var search;
search = document.getElementById("search");
// add classes to sorting and items selectors
$( currentSort(getParam('sort')), currentItem(getParam('items')) ).addClass("current");
// replace link with search form on click
$( search ).on( "click", "a", function () {
search.innerHTML = search_form;
});
// set desktop or mobile menu depending on screen width
checkWidth();
});
}(window, document));
希望这能让你走上正轨!
从我看到你在写什么,我不认为它解释了从桌面到移动的"几秒钟"差异-除非修复你的html strings
帮助(传递jshint/jslint也有帮助…)。
在那之后,你必须找别的地方。
一般来说,始终记住移动端比桌面端慢,在修改DOM、添加大量点击绑定等问题上要三思而后行。我通常在内存中构建预增强的整个页面,并触摸DOM一次(注入它)。
我应该先评论你的问题,但由于我的声誉不够,我将在之后提供答案。您是否尝试使用开关箱而不是sortValue
和itemValue
的开关箱?因为AFAIK,使用if语句会继续检查每个if case,对于切换case提供了更有效的解决方案。检查这个问题
相关文章:
- 如何使用url加载程序在webpack中导入多个图像
- 如何在生成下载文件时显示加载动画
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 无法在通过jQuery的ajax加载的页面中执行javascript
- 点击按钮在手机中加载现有的Android应用程序
- 避免在手机中加载图像
- 将文本文件从手机存储加载到 HTML 文本区域
- 通过手机加载时,画布图像会将图像旋转 90 度
- 在苹果手机野生动物园浏览器中,加载包含href的javascript时收到错误消息
- 如何在科尔多瓦手机上本地加载 base64 音频
- 使用JSON的iPad,平板电脑和手机的图像加载非常缓慢
- 仅为智能手机加载不同的javascript
- 根据设备(手机/平板电脑等)控制元素的加载方式
- 从智能手机(iPhone)加载访问url的资源失败
- Sencha Touch如何加载自定义CSS, JS,如果用户使用PC或平板电脑或智能手机
- 自动点击手机页面加载
- jQuery手机加载次数
- 如何识别手机是否已经加载jquery
- 如何在网站检测到访问者使用手机时自动加载手机页面
- WebView加载URL的速度比手机慢10倍's Chrome浏览器