我想插入超过70,000行到JavaScript数据库(使用Chrome 5.0.317.2)。插入物需要很长时间。实际的页面会在几秒钟内加载,而且我可以看到进度,因为插入每行的百分比增长非常缓慢。花了大约一个小时完成插入所有记录。有没有办法优化插入,或者以某种方式从预加载的SQLite数据库开始?Javascript数据库大量插入
<script src="jquery.1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">
// Truncated to 1 row for example. There are really 76547 rows.
var zipcodes = var zipcodes = [{"city_name":"AMHERST","city_alias":"AMHERST","zipcode":"01002"}];
var db;
function openMyDatabase() {
var shortName = 'mydb';
var version = '1.0';
var displayName = 'mydb';
var maxSize = 65536;
db = openDatabase(shortName, version, displayName, maxSize);
db.transaction(
function(transaction) {
transaction.executeSql(
'CREATE TABLE IF NOT EXISTS zipcode ' +
' (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +
' city_name TEXT NOT NULL, ' +
' city_alias TEXT NOT NULL, ' +
' zipcode TEXT NOT NULL)'
);
}
);
$.each(zipcodes, function(i, zipcode) {
insertZipcode(zipcode.city_name, zipcode.city_alias, zipcode.zipcode, i);
});
}
function errorHandler(transaction, error) {
alert('Oops. Error was '+error.message+' (Code '+error.code+')');
return true;
}
function insertZipcode(cityName, cityAlias, zipcode, i) {
db.transaction(
function(transaction) {
transaction.executeSql(
'INSERT INTO zipcode (city_name, city_alias, zipcode) VALUES (?, ?, ?);',
[cityName, cityAlias, zipcode],
function(){
$('#counter').html((100 * i/zipcodes.length) + '%');
},
errorHandler
);
}
);
return false;
}
$(function() {
openMyDatabase();
});
</script>
解决方案:在PHP侧,我提出的关联数组和所用的邮政编码作为键和城市作为值的阵列,并且我跑它通过json_encode和通过了给JavaScript。在JavaScript端我能够通过使用下面的代码很快得到城市特定邮政编码的列表:
var zipcodes = {"55437":["MINNEAPOLIS","BLOOMINGTON"]}; //truncated
alert('Cities in 55437: ' + zipcodes['55437'].join(', '));
我使用XML/XPath的尝试,但仍然过于缓慢,但是通过使用JSON,我是能够使一个巨大的物体,很容易和快速地搜索邮政编码。 – 2010-02-09 16:23:07
有趣的是知道JSON比XML快。完全可以理解。 – jpabluz 2010-02-09 18:10:57