13. februar 2001 - 16:11Der er
9 kommentarer og 2 løsninger
Komprimering af tekst til cookie
Jeg har brug for en rutine der kan komprimere alm. ell. escape\'et tekst så det ikke fylder så meget. Teksten anvendes til at gemme informationer om varekøb i cookie i forbindelse med varekurvsfunktion og data må derfor ikke gå tabt.
Komprimeringen skal kunne håndtere æ, ø og å, hvorfor teksten for nuværende gemmes i escape format og de enkelte varepunkter separeret med komma.
Komprimeringsgrad størst mulig men jeg stiler efter ca. 50% afkortning i tekstlængde...
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
En decideret kompresseions algoritme ville blive Meget tung i javascript, så jeg vil anbefale at du snarere konventerere dig om andre former for komprimering, såsom faste formater, brug af varenumere istedet for varebeskrivelser, etc.
Det skulle ikke undre mig om du kan spare 75% bare på det.
Du har 4K plads i en cookie, jeg har svært ved at forestille mig en bruger der vil afgive en så lang ordre i een session.
Med den version af min varekurv, som jeg har for nuværende, vil det svare til et sted mellem 20 og 30 varelinier. Vel ikke så tit det sker men ikke umuligt...
Varelinier skal være brugerdefinerede og jeg kan derfor ikke vide, hvad der faktisk kommer til at stå.
Et evt. alternativ kunne være asp - men det vil ikke være oplagt, da det ikke kan implementeres på standard domain\'s
Her er et udkast til hvordan varekurven kan modificeres så der ikke bruges så meget cookie-plads. På den beskrevne måde vil hver bestillingslinie fylde 7 til 10 tegn i cookien.
Det kræver at brugeren opretter sit varesortiment som beskrevet herunder:
Sig til hvis noget er for uklart eller ubrugeligt :)
der oprettes en ny fil \"sortiment.js\" hvor brugeren indtaster de varer der skal sælges fra siden. // // Her skriver du dit varesortiment. // Du kan godt angive et større udvalg af varer end du giver mulighed for // at bestille på siderne. // Alle varer der kan bestilles skal være beskrevet her. // // For hver vare angives: // varenummer: 1000 til 9999 // beskrivelse: et navn der entydigt beskriver varen // pris: varens pris. // // der skal også oprettes en vare beskrivelse for. // specialtinbud såsom \"køb 2 søer og få en gratis pattegris\" // og kvantumsrabatter \"køb 10 orner for 9 orners pris\" // // funktion opretVare() og andre funktioner på denne side bør defineres // i varekurv.js eller en anden .js fil der hentes FØR denne. // function opretVare ( varenummer, beskrivelse, pris ) { vListe[vListe.length] = new Vare( varenummer, beskrivelse, pris ); }; //end opretVare ( integer, string, beloeb )
var vListe = new Array(); // defineres ligesom adderVare i anden fil.
// // Hver vare beskrivelse skrives i en linie som i eksemplet nedenfor. // Husk at der skal citationstegn om beskrivelsen. // Og at prisen skrives i International form, dvs med punktum istedet // for komma foran ørebeløbet.
function putiKurv ( varenr, antal ) { if ( putiKurv.arguments.length == 1 ) antal = 1; if ( testVare( varenr ) ) { // adder \"&nnnn_nn\" til cookie, enten som nyt varenr eller adderet til gammelt. var liste = getCookie(\"vK???\") liste = liste.split(\"&\"); for (var i=0; i<liste.length; i++) if ( list[i].substring(0,4) == varenr ) break; if ( i == liste.length ) { // adder een til antal linier setCookie(\"vkLinier\", parseInt( getCookie( \'vkLinier\'))+1); } else { var temp = liste[i].split(\"_\"); antal = antal +temp[1]; }; liste[i] = \"\"+varenr+\"_\"+antal liste = liste.join(\"&\"); setCookie(\"vK???\", liste); } else { debug ( \"Det angivne varenummer findes ikke\" ); }; }; //end putiKurv ( Integer, Integer )
function fjernfraKurv ( varenr, antal ) { if ( putiKurv.arguments.length == 1 ) antal = 1; if ( testVare( varenr ) ) { // fjern \"&nnnn_nn\" fra cookie. var liste = getCookie(\"vkKurv\") liste = liste.split(\"&\"); for (var i=0; i<liste.length; i++) if ( list[i].substring(0,4) == varenr ) break; if ( i == liste.length ) { // fejl, der er ikke noget at fjerne } else { var temp = liste[i].split(\"_\"); antal = temp[1] -antal; if ( antal > 0 ) { liste[i] = \"\"+varenr+\"_\"+antal } else { for (var j=i+1; j<liste.length; j++) liste[j-1]=liste[j]; liste.length = liste.length -1; // træk een fra antal linier setCookie(\"vkLinier\", parseInt( getCookie( \'vkLinier\'))-1); } }; liste = liste.join(\"&\"); setCookie(\"vkKurv\", liste); } else { debug ( \"Det angivne varenummer findes ikke\" ); }; }; //end fjernfraKurv ( Integer, Integer )
// nedenstående funktioner erstatter de tilsvarende i varekurv.js
function justerVare( beskrivelse, pris, antal ) var varenr = testBeskPris( beskrivelse, pris ); if ( antal == 0 ) return; if ( varenr > 0 ) { if ( antal>0 ) putiKurv( varenr, antal ) else fjernfraKurv( varenr, antal ); } else { debug ( \"Det er ingen vare med den beskrivelse og pris\" ); }; }; //end justerVare( string, beloeb, integer )
function tilskrivVare(\'Tumlende kravlegrise\',499.25) var varenr = testBeskPris( beskrivelse, pris ); if ( varenr > 0 ) { putiKurv( varenr, 1 ); } else { debug ( \"Det er ingen vare med den beskrivelse og pris\" ); }; }; //end tilskrivVare( string, beloeb )
function fraskrivVare(\'Tumlende kravlegrise\',499.25) var varenr = testBeskPris( beskrivelse, pris ); if ( varenr > 0 ) { fjernfraKurv( varenr, 1 ); } else { debug ( \"Det er ingen vare med den beskrivelse og pris\" ); }; }; //end tilskrivVare( string, beloeb )
// funktionen udskrivKurv er kun antydet for det er en grumme komplex en // at sætte sig ind i :-)) // function udskrivKurv ( ???? ) {
var liste = getCookie(\"vkKurv\"); liste = liste.split(\"&\"); liste.sort(); for (var i=0; i<liste.length; i++) { var tmp = liste[i].split(\"_\"); // tmp[0] == varenummer // tmp[1] == antal bestilte var vr = testVare( tmp[0] ); // vr.varenr == varenr // vr.beskr == beskrivelse // vr.pris == pris per styk // det skulle være hvad du bruger for at skrive den varelinie.
Ideen med den fremlagte varekurv er, at den skal være tilgængelig også for lægmand - eller næsten :-)
Ved at oprette en ekstra fil, hvori varesortimentet er angivet, skal der - egentlig - gøres dobbelt arbejde, idet intensionerne med varekurven ikke længere er opfyldt. I den nuværende udformning af varekurven, skal hver vare kun oprettes og håndteres netop det ene sted (de steder), hvor den bliver præsenteret og det letter opsætningen en hel del. Samtidig bliver varelinien først oprettet i varekurven i det øjeblik den bliver brugt og hvis den fjernes frigives varelinien til en anden vare. Der går altså ikke - urimeligt - meget hukommelse til spilde til information, som ikke måtte være nødvendig.
Din ide giver mere plads i kurven - Ok - men den giver ikke komprimering af cookieteksten.
Hvordan vil din model håndtere 500-1000 varenumre? Så vidt jeg kan se oprettes der ved hver indlæsning et object-array med samtlige varer. Kan browseren håndtere så mange informationer? Hvor lang tid går der med konverteringen?
Ja jeg er også selv lidt loren ved den der \"varesortiment\" fil. Men har også lidt basis for at kalde den en feature istedet for en fejl. 1) en sådan varesortiment fil gør det muligt at bruge varenumrene istedet for at skulle stave beskrivelsen helt rigtigt og ens hver gang 2) sortimentsliten kan bruges til at \"autogenerere\" indkøbslinks i en senere udvidelse. 3) alle seriøse butikker bruger varenumre. Blot en beskrivelse er alt for risikabelt og svært at slå op.
Nej, der bliver kun lagt noget i cookien når der er en bestilling på det varenr (se i fjernfraKurv hvor entry slettes hvis der er <= 0 varer bestilt. Så varekurven ville kunne supportere een enkelt ordre med 300-350 bestilte forskellige varer, uanset hvor stort sortimentet er. ( Men arrayet kan som du påpeger gå hen og blive et problem, 10.000 array elementer fylder i sig selv en hel del. :-)) (hørte et sted 64K max. men Comp RAM skal også tages i ed)
Og dertil kommer at mit forslag snor sig frem og tilbage på kryds og tværs af de interfaces du allerede har. Det ville nok være bedre med en komprimer routine fra kurv[] til cookie og tilbage.
Jep :-) sortimentlisten er oplagt en feature og jeg vil tro, at den - alt til trods - kan håndtere større varemængder end den eksisterende løsning.
Hvorom alting... så har du måske set, at jeg ikke anbefaler modellen med cookies ved større salgssteder?
Jeg er med på, at cookieteksten i din model fylder meget mindre og at der ikke fyldes på, før der er vare(r).
Varekurven sorterer efter tekst i stigende orden og supporterer derfor allerede varenumre - de skal blot angives, som en del af teksten: \'100234-34 - Halvnøgne grise\'.
Din ide er ikke ubrugelig men heller hvad jeg søgte så jeg lader spørgsmålet stå åbent indtil videre. Du skal nok få point som følge af det gode initiv :-)
Jeg lukker af for spørgsmålet. Er der noegn som kommer med et brugbart svar, er der stadig point til en ny oprettelse
/Steen
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.