【小贴士】【stringify神BUG】【localstorage失效】【消灭Safari alert框】【是否延迟加载】【页面10px白屏】
前言
JSON.stringify出BUG啦!
var testObject1 = {
OrderAmount: 0.11
};
JSON.stringify(testObject1) => OrderAmount: null
var json2 = {
type: function (obj) {
if (obj == null) return String(obj);
var h = { '[object Boolean]': 'boolean', '[object Number]': 'number', '[object String]': 'string', '[object Function]': 'function', '[object Array]': 'array', '[object Date]': 'date', '[object RegExp]': 'regexp', '[object Error]': 'error' };
var t = Object.prototype.toString.call(obj);
if (t in h) return h[t];
if (t == '[object Object]') t = obj + '';
var arr = t.match(/^\[object (HTML\w+)\]$/);
if (arr) return arr[1];
return 'object';
},
stringifyJSON: function (obj) {
var str, t = window.JSON;
var rstringifyJSON = /([\n\r\f\\\/\'\"])/g;
var arr = [], i = 0, n, p;
var stringHash = {
'\n': '\\n',
'\r': '\\r',
'\f': '\\f'
};
switch (json2.type(obj)) {
case null:
str = 'null';
break;
case 'undefined':
str = 'undefined';
break;
case 'object':
for (p in obj) {
if (obj.hasOwnProperty(p)) {
arr[i++] = json2.stringifyJSON(p) + ':' + json2.stringifyJSON(obj[p]);
}
}
str = '{' + arr.join(',') + '}';
break;
case 'array':
for (i = 0, n = obj.length; i < n; i++) {
arr[i] = json2.stringifyJSON(obj[i]);
}
str = '[' + arr.join(',') + ']';
break;
case 'string':
str = '\"' + obj.replace(rstringifyJSON, function (a) {
return stringHash[a] || '\\' + a;
}) + '\"';
break;
case 'date':
str = 'new Date(' + obj.getTime() + ')';
break;
case 'number':
case 'boolean':
case 'function':
case 'regexp':
str = obj.toString();
break;
default:
str = 'null';
}
return str;
}
};
JSON.stringify = json2.stringifyJSON;
当然,我这里其实挖掘的不够彻底,我只是定位到了JSON.stringify有问题,却不能再定位里面哪个环节有问题了......
更加优雅的做法:
var stringifyFunc = JSON.stringify
JSON.stringify = function () {
if (arguments.length == 1) {
return stringifyFunc.call(this, arguments[0], function (k, v) {
if (!isNaN(v)) return v + '';
else return v;
})
}
else {
stringifyFunc.apply(this, arguments);
}
}
localstorage读取失效
上面说到了localstorage,这里正好将它拿出来说下,首先有几个必须要牢记的规则
① localstorage最大字符为500多万(5M)
各个手机有所差异,但是不会太大,所以使用localstorage一定要记得清理,不清理可能导致
读取localstorage效率下降,localstorage满了会引发业务逻辑错误
② localstorage读取文件的
所以其性能没有内存读取快,firefox更是会一次性将数据导入内存,想想就觉得吓人啊
③ localstorage不被爬虫识别,所以与SEO相关的关键信息需要避免使用localstorage,否则后续会被坑死
window.onunload = function () { };//不要问我为什么,我也不知道!
最后在开启隐私模式下时,safari的localstorage读写是不可用的,但是qq浏览器却可以,至于原因我就不知道了......
消除链接失效时safari alert框
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta name="viewport" content="width=320.1, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no,minimal-ui">
</head>
<body>
<a href="http://www.baidu.com">百度一下</a>
<a href="taobao://wireless">测试无效URL</a>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta name="viewport" content="width=320.1, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no,minimal-ui">
<script id="others_zepto_10rc1" type="text/javascript" class="library" src="/js/sandbox/other/zepto.min.js"></script>
</head>
<body>
<a href="http://www.baidu.com">百度一下</a> <a href="taobao://wireless">测试无效URL</a>
<script type="text/javascript">
$('a').click(function (e) {
var el = $(e.target);
var url = el.attr('href');
if (url.indexOf('taobao') != -1) {
var ifm = document.createElement('iframe');
ifm.onload = function () {
ifm.contentWindow.document.write('<script>location.href="' + url + '"</' + '' + 'script>');
}
ifm.src = 'about:blank';
document.body.appendChild(ifm);
} else {
window.location = url;
}
e.preventDefault();
});
</script>
</body>
</html>
核心代码在此:
$('a').click(function (e) {
var el = $(e.target);
var url = el.attr('href');
if (url.indexOf('taobao') != -1) {
var ifm = document.createElement('iframe');
ifm.onload = function () {
ifm.contentWindow.document.write('<script>location.href="' + url + '"</' + '' + 'script>');
}
ifm.src = 'about:blank';
document.body.appendChild(ifm);
} else {
window.location = url;
}
e.preventDefault();
其原理就是iframe中url解析错误的话,Safari不太理睬~~~~~~
延迟加载·性能与体验
首屏载入速度
统计代码导致10px白屏
很多大型网站都会具有统计代码,而此类统计代码一般是以img做请求发出,但是他可以导致10px白屏你知道吗?


结语
【小贴士】【stringify神BUG】【localstorage失效】【消灭Safari alert框】【是否延迟加载】【页面10px白屏】的更多相关文章
- Angular2 小贴士 Name
Angular2 正式版已经发布了一个月了,我也是通过各种方式在进行验证是否可以满足我们的需求,今天我就发现了一个问题.现在我们来一起说明一下,这个可能不算是bug,而应该需要我们记住就可以了. 我们 ...
- SVN小贴士
我辛辛苦苦写的到哪里了? SVN小贴士SVN服务器上的代码项目组公用,你的每一个提交都会体现给项目组每个人,所以提交要慎重,要注意避免代码冲突,使用SVN小贴士: 1.提前宣布开发计划,保持项目组成员 ...
- 初识bd时的一些技能小贴士
既然小豆腐如此给力,而且充分的利用主动学习的优势,已经有了迅速脑补,压倒式的优势,不过这只是表面而已,一切才刚刚开始,究竟鹿死谁手,还有待验证. 以上可以看到,小豆腐为什么拼命的要teach我们了么, ...
- 初识bigdata时的一些技能小贴士
既然小豆腐如此给力,而且充分的利用主动学习的优势,已经有了迅速脑补,压倒式的优势,不过这只是表面而已,一切才刚刚开始,究竟鹿死谁手,还有待验证. 以上可以看到,小豆腐为什么拼命的要teach我们了么, ...
- 【小贴士】虚拟键盘与fixed带给移动端的痛!
前言 今天来公司的主要目的就是研究虚拟键盘与fixed的问题,期间因为同事问起闭包与事件委托(阻止冒泡)相关问题,便穿插了一篇别的: [小贴士]工作中的”闭包“与事件委托的”阻止冒泡“,有兴趣的朋友可 ...
- android性能小贴士 翻译
转自http://developer.android.com/training/articles/perf-tips.html 性能小贴士: 这篇文档主要一些微优化可以提升应用程序性能,但是这些改变不 ...
- 小贴士——提高PHP程序在NGINX代理服务器的性能
NGINX本身就是面向最大性能的代理服务器,因此在使用NGINX,并没有性能调整的配置工作.但是却有很多选项可用于定制NGINX的行为,利用底层硬件和操作系统. 下面将介绍用于提供PHP在NGINX的 ...
- jprofiler8使用小贴士
说明:本文的小贴士是针对jprofiler8的,其他版本上可能有不适用的地方 贴士一:使用jpenable监控,无需增加jvm参数和重启 贴士一:使用jpenable监控,无需增加jvm参数和重启 j ...
- 小程序背景图片bug
在pc端调试的时候已经可以看到出现背景图片了,但是在真机调试的时候却发现没有背景图片,那么原因是什么呢?真机调试和vconsole也看不出什么鸟,其实这是小程序的一个bug.另一种说法是:backgr ...
随机推荐
- CRM/ERP 企业管理软件中常见的七种程序设计模式
管理软件中的常见代码设计模式,来自于业务上的需要,有不恰当的地方欢迎批评指正. 1 RE-TRY 重试模式 场景:在连接数据库服务器时,如果SQL Server数据库没有启动或正在启动,我们需要有一 ...
- MVVM框架下 WPF隐藏DataGrid一列
最近的一个项目,需要在部分用户登录的时候,隐藏DataGrid中的一列,但是常规的绑定不好使,在下面举个例子. XAML部分代码 <Window x:Class="DataGridCo ...
- WPF绘制折线
WPF后台绘制折线,填充到一个GRID下 private void btnPreview_Click(object sender, RoutedEventArgs e) { GridImg.Child ...
- 如何使用Xmanager及VNC登录远程桌面
如何调用远程桌面,比较常见的有两种方式:Xmanager及VNC 正好今天鼓捣了一下,特整理如下: Xmanager Xmanager的调用也有两种方式: 一.直接在Xshell中调用 这时需设置会话 ...
- 虚拟目录webconfig的配置
昨天需要新建一个虚拟目录放在以前的一个站点下,新建了应用池,配好了环境置顶路径,虚拟目录页建立成功 ,但是程序一直是报错.这个程序我在测试服务器上是测过的,新建了一个站点是可以正常访问的,排除了程序问 ...
- C# 复制一个Word文档的部分或全部内容到另一个Word文档
C# 复制一个Word文档的部分或全部内容到另一个Word文档 我最近喜欢折腾Office软件相关的东西,想把很多Office软件提供的功能用.NET来实现,如果后期能把它用来开发一点我自己的小应用程 ...
- Hibernate之HQL查询的一些例子
Hibernate配备了一种非常强大的查询语言,就是HQL(hibernate query language),HQL看上去很像sql,但只是语法结构上相似,HQL是一种面向对象的查询,他可以理解继承 ...
- hibernate笔记--组件映射方法
假设我们需要保存学生student的信息,student中有一个address属性,我们知道像这种信息其值可能会有多个,就像一个人会有两个以上的手机号,这种情况在hibernate中应该这样配置: 新 ...
- 【集合框架】JDK1.8源码分析之ArrayList(六)
一.前言 分析了Map中主要的类之后,下面我们来分析Collection下面几种常见的类,如ArrayList.LinkedList.HashSet.TreeSet等.下面通过JDK源码来一起分析Ar ...
- maven 插件
一直没注意看maven执行过程中的打印日志,今天突然发现一段话,说编译以及resource未指定编码,默认gbk.于是,百度了设置编码的方式: <plugin> <groupId&g ...