J'essaie d'insérer plus de 70 000 lignes dans une base de données javascript (en utilisant Chrome 5.0.317.2). Les inserts prennent beaucoup de temps. La page actuelle se charge en quelques secondes, et je peux voir le progrès que le pourcentage augmente très lentement à mesure que chaque ligne est insérée. Il a fallu environ une heure pour terminer l'insertion de tous les enregistrements. Existe-t-il un moyen d'optimiser les insertions, ou d'une manière ou d'une autre de démarrer avec une base de données SQLite préchargée?Base de données JavaScript Insert de masse
<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>
Solution: Du côté de PHP, j'ai fait un tableau associatif et utilisé le code comme clé et un éventail de villes comme la valeur, et je l'ai couru à travers json_encode et passé que le javascript. Du côté javascript j'ai pu obtenir très rapidement une liste des villes pour un code postal particulier en utilisant le code suivant:
var zipcodes = {"55437":["MINNEAPOLIS","BLOOMINGTON"]}; //truncated
alert('Cities in 55437: ' + zipcodes['55437'].join(', '));
J'ai essayé d'utiliser XML/XPath, mais qui était encore trop lent, mais en utilisant JSON, j'ai pu faire un objet géant qui est facile et rapide à rechercher codes ZIP. –
Intéressant de savoir que JSON est plus rapide que XML. Totalement compréhensible. – jpabluz