☆─────────────────────────────────────☆
scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 于 (Wed Oct 26 20:35:16 2005) 提到:
我现在, 用XML传数据,然后用dom
再转换成, object array, 好像很慢的样子
直接用json是不是能大幅度提高效率阿?
☆─────────────────────────────────────☆
creese (终于...要进村了) 于 (Wed Oct 26 20:41:48 2005) 提到:
这个事实上就是在eval阿
【 在 scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 的大作中提到: 】
: 我现在, 用XML传数据,然后用dom
: 再转换成, object array, 好像很慢的样子
: 直接用json是不是能大幅度提高效率阿?
: ...................
☆─────────────────────────────────────☆
nukq (悦) 于 (Wed Oct 26 22:03:33 2005) 提到:
【 在 creese (终于...要进村了) 的大作中提到: 】
: 这个事实上就是在eval阿
我感觉速度提高不是很明显. 可能我的数据量不是很大的缘故.
我是50张图片(100x100)和一些图片信息通过xml传过来再dom解析到 obj array中
改用eval(jscode),数据传输量倒是能减少近一半.
但是速度瓶颈其实是显示的页面的时候.
我用的是直接写innerHTML,
IE的速度比FireFox慢很多.
我的cpu是 AMD1800+的, 用同学的 2500+机器倒是瞬间完成的.
在我的机器上,每次显示30张图片的速度还能接受,(小于1s)
☆─────────────────────────────────────☆
creese (终于...要进村了) 于 (Wed Oct 26 22:13:10 2005) 提到:
通过XML传图片的数据?
传的是bin还是地址阿
【 在 nukq (悦) 的大作中提到: 】
: 我感觉速度提高不是很明显. 可能我的数据量不是很大的缘故.
: 我是50张图片(100x100)和一些图片信息通过xml传过来再dom解析到 obj array中
: 改用eval(jscode),数据传输量倒是能减少近一半.
: ...................
☆─────────────────────────────────────☆
nukq (悦) 于 (Wed Oct 26 22:16:39 2005) 提到:
【 在 creese (终于...要进村了) 的大作中提到: 】
: 通过XML传图片的数据?
: 传的是bin还是地址阿
呵呵,是地址, 不好意思,没说清楚.
☆─────────────────────────────────────☆
tbao (土宝~重出) 于 (Wed Oct 26 23:22:13 2005) 提到:
其实s同学的瓶颈也是在显示....
【 在 nukq (悦) 的大作中提到: 】
: 我感觉速度提高不是很明显. 可能我的数据量不是很大的缘故.
: 我是50张图片(100x100)和一些图片信息通过xml传过来再dom解析到 obj array中
: 改用eval(jscode),数据传输量倒是能减少近一半.
: ...................
☆─────────────────────────────────────☆
DavidZhu (听好更di个这) 于 (Wed Oct 26 23:37:46 2005) 提到:
eval……
考虑效率的话,应该尽量减少使用eval
不过在数据量很大的情况下用dom划不来
【 在 nukq (悦) 的大作中提到: 】
: 我感觉速度提高不是很明显. 可能我的数据量不是很大的缘故.
: 我是50张图片(100x100)和一些图片信息通过xml传过来再dom解析到 obj array中
: 改用eval(jscode),数据传输量倒是能减少近一半.
: ...................
☆─────────────────────────────────────☆
scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 于 (Thu Oct 27 09:31:55 2005) 提到:
还不确定了,回头多alert几个时间出来就好了
不过Firefox是明显比IE快多了就是了.
【 在 tbao (土宝~重出) 的大作中提到: 】
: 其实s同学的瓶颈也是在显示....
☆─────────────────────────────────────☆
scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 于 (Thu Oct 27 09:32:29 2005) 提到:
你的意思是json parser速度反而会快很多?
【 在 DavidZhu (听好更di个这) 的大作中提到: 】
: eval……
: 考虑效率的话,应该尽量减少使用eval
: 不过在数据量很大的情况下用dom划不来
: ...................
☆─────────────────────────────────────☆
DavidZhu (听好更di个这) 于 (Thu Oct 27 10:13:44 2005) 提到:
需要找几个用例测试一下,我也还没研究过json
【 在 scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 的大作中提到: 】
: 你的意思是json parser速度反而会快很多?
☆─────────────────────────────────────☆
scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 于 (Thu Oct 27 10:43:04 2005) 提到:
呵呵,先在确定我这的主要矛盾还是
IE里面直接给innerHTML灌一个一千行的大
表以后,自己就要停半天...
【 在 DavidZhu (听好更di个这) 的大作中提到: 】
: 需要找几个用例测试一下,我也还没研究过json
☆─────────────────────────────────────☆
atppp (Big Mouse) 于 (Thu Oct 27 11:09:55 2005) 提到:
http://www.quirksmode.org/dom/innerhtml.html
【 在 scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 的大作中提到: 】
: 呵呵,先在确定我这的主要矛盾还是
: IE里面直接给innerHTML灌一个一千行的大
: 表以后,自己就要停半天...
: ...................
☆─────────────────────────────────────☆
scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 于 (Thu Oct 27 11:29:18 2005) 提到:
看来还是我的表,生成的太大了点.....
【 在 atppp (Big Mouse) 的大作中提到: 】
:
http://www.quirksmode.org/dom/innerhtml.html☆─────────────────────────────────────☆
tbao (土宝~重出) 于 (Thu Oct 27 14:25:52 2005) 提到:
7000行的表唉...
【 在 scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 的大作中提到: 】
: 看来还是我的表,生成的太大了点.....
☆─────────────────────────────────────☆
scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 于 (Thu Oct 27 15:10:16 2005) 提到:
不过貌似json的兼容性,要比XML传数据要好一些。
刚才看了看Opera8, 觉得挺不错的,
就是不知道怎么处理XML数据,
觉得如果换了json, 说不定我的应用在Opera8上也
能正常运行起来了:)
【 在 tbao (土宝~重出) 的大作中提到: 】
: 7000行的表唉...
☆─────────────────────────────────────☆
atppp (Big Mouse) 于 (Thu Oct 27 15:38:25 2005) 提到:
opera8处理xml有bug, xmlhttprequest也不太行。
8.5貌似大部分没问题了。
【 在 scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 的大作中提到: 】
: 不过貌似json的兼容性,要比XML传数据要好一些。
: 刚才看了看Opera8, 觉得挺不错的,
: 就是不知道怎么处理XML数据,
: ...................
☆─────────────────────────────────────☆
nukq (悦) 于 (Thu Oct 27 16:06:02 2005) 提到:
【 在 atppp (Big Mouse) 的大作中提到: 】
: opera8处理xml有bug, xmlhttprequest也不太行。
: 8.5貌似大部分没问题了。
看到一个用Java实现的 xmlhttprequest for Opera 呵呵.
/*
Cross-Browser XMLHttpRequest v1.1
=================================
Emulate Gecko 'XMLHttpRequest()' functionality in IE and Opera. Opera requires
the Sun Java Runtime Environment <
http://www.java.com/>.
by Andrew Gregory
http://www.scss.com.au/family/andrew/webdesign/xmlhttprequest/
This work is licensed under the Creative Commons Attribution License. To view a
copy of this license, visit
http://creativecommons.org/licenses/by/1.0/ or send
a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305,
USA.
Not Supported in Opera
----------------------
* user/password authentication
* responseXML data member
Not Fully Supported in Opera
----------------------------
* async requests
* abort()
* getAllResponseHeaders(), getAllResponseHeader(header)
*/
// IE support
if (window.ActiveXObject && !window.XMLHttpRequest) {
window.XMLHttpRequest = function() {
return new ActiveXObject((navigator.userAgent.toLowerCase().indexOf('msie 5') != -1) ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP');
};
}
// Gecko support
/* ;-) */
// Opera support
global_fakeOperaXMLHttpRequestSupport = false;
if (window.opera && ( !window.XMLHttpRequest || ! (new window.XMLHttpRequest()).setRequestHeader )) {
global_fakeOperaXMLHttpRequestSupport = true;
window.XMLHttpRequest = function() {
this.readyState = 0; // 0=uninitialized,1=loading,2=loaded,3=interactive,4=complete
this.status = 0; // HTTP status codes
this.statusText = '';
this._headers = [];
this._aborted = false;
this._async = true;
this.abort = function() {
this._aborted = true;
};
this.getAllResponseHeaders = function() {
return this.getAllResponseHeader('*');
};
this.getAllResponseHeader = function(header) {
var ret = '';
for (var i = 0; i < this._headers.length; i++) {
if (header == '*' || this._headers[i].h == header) {
ret += this._headers[i].h + ': ' + this._headers[i].v + '\n';
}
}
return ret;
};
this.setRequestHeader = function(header, value) {
this._headers[this._headers.length] = {h:header, v:value};
};
this.open = function(method, url, async, user, password) {
this.method = method;
this.url = url;
this._async = true;
this._aborted = false;
if (arguments.length >= 3) {
this._async = async;
}
if (arguments.length > 3) {
// user/password support requires a custom Authenticator class
opera.postError('XMLHttpRequest.open() - user/password not supported');
}
this._headers = [];
this.readyState = 1;
if (this.onreadystatechange) {
this.onreadystatechange();
}
};
this.send = function(data) {
if (!navigator.javaEnabled()) {
alert("XMLHttpRequest.send() - Java must be installed and enabled.");
return;
}
if (this._async) {
setTimeout(this._sendasync, 0, this, data);
// this is not really asynchronous and won't execute until the current
// execution context ends
} else {
this._sendsync(data);
}
}
this._sendasync = function(req, data) {
if (!req._aborted) {
req._sendsync(data);
}
};
this._sendsync = function(data) {
this.readyState = 2;
if (this.onreadystatechange) {
this.onreadystatechange();
}
// open connection
var url = new java.net.URL(new java.net.URL(window.location.href), this.url);
var conn = url.openConnection();
for (var i = 0; i < this._headers.length; i++) {
conn.setRequestProperty(this._headers[i].h, this._headers[i].v);
}
this._headers = [];
if (this.method == 'POST') {
// POST data
conn.setDoOutput(true);
var wr = new java.io.OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
wr.close();
}
// read response headers
// NOTE: the getHeaderField() methods always return nulls for me :(
var gotContentEncoding = false;
var gotContentLength = false;
var gotContentType = false;
var gotDate = false;
var gotExpiration = false;
var gotLastModified = false;
for (var i = 0; ; i++) {
var hdrName = conn.getHeaderFieldKey(i);
var hdrValue = conn.getHeaderField(i);
if (hdrName == null && hdrValue == null) {
break;
}
if (hdrName != null) {
this._headers[this._headers.length] = {h:hdrName, v:hdrValue};
switch (hdrName.toLowerCase()) {
case 'content-encoding': gotContentEncoding = true; break;
case 'content-length' : gotContentLength = true; break;
case 'content-type' : gotContentType = true; break;
case 'date' : gotDate = true; break;
case 'expires' : gotExpiration = true; break;
case 'last-modified' : gotLastModified = true; break;
}
}
}
// try to fill in any missing header information
var val;
val = conn.getContentEncoding();
if (val != null && !gotContentEncoding) this._headers[this._headers.length] = {h:'Content-encoding', v:val};
val = conn.getContentLength();
if (val != -1 && !gotContentLength) this._headers[this._headers.length] = {h:'Content-length', v:val};
val = conn.getContentType();
if (val != null && !gotContentType) this._headers[this._headers.length] = {h:'Content-type', v:val};
val = conn.getDate();
if (val != 0 && !gotDate) this._headers[this._headers.length] = {h:'Date', v:(new Date(val)).toUTCString()};
val = conn.getExpiration();
if (val != 0 && !gotExpiration) this._headers[this._headers.length] = {h:'Expires', v:(new Date(val)).toUTCString()};
val = conn.getLastModified();
if (val != 0 && !gotLastModified) this._headers[this._headers.length] = {h:'Last-modified', v:(new Date(val)).toUTCString()};
// read response data
var reqdata = '';
var stream = conn.getInputStream();
if (stream) {
var reader = new java.io.BufferedReader(new java.io.InputStreamReader(stream));
var line;
while ((line = reader.readLine()) != null) {
if (this.readyState == 2) {
this.readyState = 3;
if (this.onreadystatechange) {
this.onreadystatechange();
}
}
reqdata += line + '\n';
}
reader.close();
this.status = 200;
this.statusText = 'OK';
this.responseText = reqdata;
this.readyState = 4;
if (this.onreadystatechange) {
this.onreadystatechange();
}
if (this.onload) {
this.onload();
}
} else {
// error
this.status = 404;
this.statusText = 'Not Found';
this.responseText = '';
this.readyState = 4;
if (this.onreadystatechange) {
this.onreadystatechange();
}
if (this.onerror) {
this.onerror();
}
}
};
};
}
// ActiveXObject emulation
if (!window.ActiveXObject && window.XMLHttpRequest) {
window.ActiveXObject = function(type) {
switch (type.toLowerCase()) {
case 'microsoft.xmlhttp':
case 'msxml2.xmlhttp':
return new XMLHttpRequest();
}
return null;
};
}
☆─────────────────────────────────────☆
atppp (Big Mouse) 于 (Thu Oct 27 16:07:40 2005) 提到:
opera 7.x时代就是用这个办法对付opera的,那个时候好命苦的,55
【 在 nukq (悦) 的大作中提到: 】
: 看到一个用Java实现的 xmlhttprequest for Opera 呵呵.
: /*
: Cross-Browser XMLHttpRequest v1.1
: ...................
☆─────────────────────────────────────☆
scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 于 (Thu Oct 27 16:16:51 2005) 提到:
这个我看过了,
我讨厌java, 所以BS完了就没有用
【 在 nukq (悦) 的大作中提到: 】
: 看到一个用Java实现的 xmlhttprequest for Opera 呵呵.
: /*
: Cross-Browser XMLHttpRequest v1.1
: ...................
☆─────────────────────────────────────☆
scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 于 (Thu Oct 27 16:19:56 2005) 提到:
Opera 8.5很不错啊,速度那个真是
超快啊!!!!!!, 都不用做啥优化了.....
所以吧xml换成JSON还是很合算的,
虽然本身没啥性能提高,不过至少是支持Opera了:)
还好我这个冬冬也只是内部用用,要求装个
Opera也不算太过分的要求.
【 在 atppp (Big Mouse) 的大作中提到: 】
: opera 7.x时代就是用这个办法对付opera的,那个时候好命苦的,55
☆─────────────────────────────────────☆
nukq (悦) 于 (Thu Oct 27 16:24:15 2005) 提到:
问一下, Opera 下现在不能解析 xml 吗?
我在做的东西只在IE 和FireFox上测试,没考虑过Opera
【 在 scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 的大作中提到: 】
: Opera 8.5很不错啊,速度那个真是
: 超快啊!!!!!!, 都不用做啥优化了.....
: 所以吧xml换成JSON还是很合算的,
: ...................
☆─────────────────────────────────────☆
scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 于 (Thu Oct 27 16:29:01 2005) 提到:
呵呵,我是不知道怎么在Opera上load XML数据。
google了半天也没啥结果......
如果方便, 而且不考虑别的前端的话, 可以试试Json吧
至少对于Python来说,用Json要比用XML传数据方便许多了.
【 在 nukq (悦) 的大作中提到: 】
: 问一下, Opera 下现在不能解析 xml 吗?
: 我在做的东西只在IE 和FireFox上测试,没考虑过Opera
☆─────────────────────────────────────☆
atppp (Big Mouse) 于 (Thu Oct 27 17:12:07 2005) 提到:
9beta出了好象,我没用过。
opera8开始确实算个能用的浏览器了
【 在 scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 的大作中提到: 】
: Opera 8.5很不错啊,速度那个真是
: 超快啊!!!!!!, 都不用做啥优化了.....
: 所以吧xml换成JSON还是很合算的,
: ...................
☆─────────────────────────────────────☆
atppp (Big Mouse) 于 (Thu Oct 27 17:13:44 2005) 提到:
哦?不行?娃哈哈我做过一个ajax一开始选的就是json数据传输。opera8没啥问题。
压根没想过opera居然不能解析xml...
ps google有大部分地方用的都是json把,或者类似的。
【 在 scaner (ec8030f7-c20a-464f-9b0e-13a3a9e97384) 的大作中提到: 】
: 呵呵,我是不知道怎么在Opera上load XML数据。
: google了半天也没啥结果......
: 如果方便, 而且不考虑别的前端的话, 可以试试Json吧
: ...................