Avatar billede learner Praktikant
18. september 2010 - 14:14 Der er 18 kommentarer og
1 løsning

Findes der alternativ til GZIP

Jeg har læst at man kan sætte farten betydeligt op på sin sideved at benytte gzip, men min host Surftown der er det ik installeret.
Findes der alternativ, som kan det samme?

På forhånd tak
Avatar billede intenz Novice
18. september 2010 - 19:03 #1
Betydeligt er så meget sagt, men det er typisk en fordel at bruge det, hvis man kan. Alternativet er deflate, men gzip fungerer vist bedre, og understøtter de ikke gzip, understøtter de nok heller ikke deflate.

Hvis dit webhotel ikke understøtter det (gzip), ville jeg ikke bekymre mig mere om det, der er mange andre måder at få ekstra hastighed på.

Her er lidt læsestof, hvis du vil have lidt inspiration :)
http://developer.yahoo.com/performance/rules.html
Avatar billede learner Praktikant
18. september 2010 - 20:35 #2
Hej, ja jeg har kigget lidt på det og dere r en hel masse man kan gøre. mit webhotel har zlib installeret. det er jeg ved at kigge på nu, om det kan bruges
Avatar billede arne_v Ekspert
18. september 2010 - 20:47 #3
gzip er det samme som deflate bare med en header foran data og en trailer efter data (trailer indeholder bl.a. en checksum).
Avatar billede learner Praktikant
19. september 2010 - 03:34 #4
Okay jeg har læst en masse på det og synes det er lidt svært.

arne_v
Vil du evt hjælpe mig med at omskrive det gzip modul jeg har pasted herunder?, så det bruger zlib i stedet for?
Eller give mig hint til hvad jeg skal ændre. Hvis det kan laves. Og om der er noget du mener jeg skal være påpasselig med?


GZIP_LEVEL er defineret til 5

i starten af top.php indsættes:
// if gzip_compression is enabled, start to buffer the output
  if (($ext_zlib_loaded = extension_loaded('zlib')) && (PHP_VERSION >= '4') ) {
    if (($ini_zlib_output_compression = (int)ini_get('zlib.output_compression')) < 1) {
      if (PHP_VERSION >= '4.0.4') {
        ob_start('ob_gzhandler');
      } else {
        include(DIR_WS_FUNCTIONS . 'gzip_compression.php');
        ob_start();
        ob_implicit_flush();
      }
    } else {
      ini_set('zlib.output_compression_level', GZIP_LEVEL);
    }
  }



og helt i bunden af bund.php indsættes:
  if ( ($ext_zlib_loaded == true) && ($ini_zlib_output_compression < 1) ) {
    if ( (PHP_VERSION < '4.0.4') && (PHP_VERSION >= '4') ) {
      tep_gzip_output(GZIP_LEVEL);
    }
  }




<?php // gzip_compression.php indeholder

  function tep_check_gzip() {
    global $HTTP_ACCEPT_ENCODING;

    if (headers_sent() || connection_aborted()) {
      return false;
    }

    if (strpos($HTTP_ACCEPT_ENCODING, 'x-gzip') !== false) return 'x-gzip';

    if (strpos($HTTP_ACCEPT_ENCODING,'gzip') !== false) return 'gzip';

    return false;
  }

/* $level = compression level 0-9, 0=none, 9=max */
  function tep_gzip_output($level = 5) {
    if ($encoding = tep_check_gzip()) {
      $contents = ob_get_contents();
      ob_end_clean();

      header('Content-Encoding: ' . $encoding);

      $size = strlen($contents);
      $crc = crc32($contents);

      $contents = gzcompress($contents, $level);
      $contents = substr($contents, 0, strlen($contents) - 4);

      echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
      echo $contents;
      echo pack('V', $crc);
      echo pack('V', $size);
    } else {
      ob_end_flush();
    }
  }
?>
Avatar billede repox Seniormester
19. september 2010 - 14:23 #5
Prøv lige det her, og så vend tilbage:

<?php

  if( !ob_start("ob_gzhandler"))
    ob_start();

  ... resten af dit indhold...
?>
Avatar billede learner Praktikant
19. september 2010 - 20:17 #6
Jeg har prøvet i starten af top.php :

if (!ob_start("ob_gzhandler"))ob_start();
if (($ext_zlib_loaded = extension_loaded('zlib')) && (PHP_VERSION >= '4') ) {
    if (($ini_zlib_output_compression = (int)ini_get('zlib.output_compression')) < 1) {
      if (PHP_VERSION >= '4.0.4') {
        ob_start('ob_gzhandler');
      } else {
        include(DIR_WS_FUNCTIONS . 'gzip_compression.php');
        ob_start();
        ob_implicit_flush();
      }
    } else {
      ini_set('zlib.output_compression_level', GZIP_LEVEL);
    }
}

Er det sådan du mener?
Det resulterer i en warning at ob_start('ob_gzhandler') ik må gentages
Avatar billede repox Seniormester
19. september 2010 - 20:21 #7
Nej, jeg mente bare de to linier alene... det skulle virke...
Avatar billede learner Praktikant
19. september 2010 - 20:21 #8
og er det ik korrekt at hvis det virker, så er min kildekode tæt pakket?
Avatar billede repox Seniormester
19. september 2010 - 20:29 #9
ob_gzhandler() er en callback function til ob_start().
ob_gzhandler() finder selv ud af om den skal komprimere noget eller ej - grunden til at jeg pakker det ind i en if sætning er at hvis der ikke skal pakkes noget, vil ob_start() i if sætningen evaluere som false - og desværre har folk en tendens til at pakke header-manipulerende funktioner ind på latterlige steder, når de bruger output buffering, hvorfor min if-sætning vil starte output buffering alligevel, hvis komprimering ikke understøttes af klienten.
Avatar billede learner Praktikant
19. september 2010 - 20:36 #10
nåååå okay :o)

Jeg forestiller mig at det skal gøres således:

top.php
  if (GZIP_COMPRESSION == 'true') {
    if (!ob_start("ob_gzhandler"))ob_start();
    include(DIR_WS_FUNCTIONS . 'gzip_compression.php');
  }



bund.php
  if (GZIP_COMPRESSION == 'true') {
    tep_gzip_output(GZIP_LEVEL);
  }


GZIP_LEVEL er sat til 5

Er det helt ved siden af?
Avatar billede repox Seniormester
19. september 2010 - 20:58 #11
Jeg forstår ikke hvorfor det skal være så kompliceret?
<?php

  ini_set('zlib.output_compression_level', 5);
  if (!ob_start("ob_gzhandler"))
    ob_start();
  ...
?>


Simpelt...
Avatar billede learner Praktikant
19. september 2010 - 21:15 #12
Hehe, okay tak, så jeg skal ik have andet med. Jeg har bare ikke forstået hvad der sker, men tak :O)

Måske et dumt spørgsmål, men hvordan kan man se om det virker?
Avatar billede repox Seniormester
20. september 2010 - 08:47 #13
ini_set('zlib.output_compression_level', 5); burde give sig selv - her sætter du dit komprimerings niveau til 5 (som du ønskede - min er sat til 3).

Og resten har du allerede fået svar på, så jeg forstår ikke, hvorfor du ikke forstår hvad der sker?

Du kan se om det virker ved at besøge din side og se hvilke response headers du får (som du kan med firefox web developer addon). I den skal der gerne stå noget med
Content-Encoding: gzip
eller måske en anden Content-encoding - men står den der, så er det komprimeret...
Avatar billede learner Praktikant
22. september 2010 - 11:49 #14
jow jow, det virker ;o)
Content-Encoding: gzip

repox, du skal da ha point :o)

Mange tak for hjælpen
Avatar billede repox Seniormester
22. september 2010 - 12:06 #15
Du får et svar her.

Et lille ord med på vejen; selvom det kan virke som en fordelagtig idé at komprimere sit output, viser det sig ofte at det kun er symptombehandling. Caching, indeksering af databaseresultater, optimering og refaktorering af kode er nogle ting du kan øge afviklingen af dit site på.
Avatar billede arne_v Ekspert
22. september 2010 - 15:18 #16
Det afhaenger jo af om baandbredden eller processing er flaskehalsen.

I nogen tilfaelde kan gzip faktisk give en del. Bl.a. ved stor volume af SOAP kald.
Avatar billede learner Praktikant
22. september 2010 - 15:44 #17
Nu er det en OsCommerce shop og den er rimelig tung, men det går dog nogenlunde.

Men det er lidt en jungel hvad man skal gøre.. Men nu har jeg lavet thumbnails og det betyder meget og gzip kan måske hjælpe lidt og så har jeg samlet så mange js og css filer i færre filer, og inkludere css filer tidligt i head tag'en. så det er nok en god start.

Kunne dog godt tænke mig at lave noget php automatisk minimize af de css og js filer som kaldes. måske at den selv laver en minimized fil hvis den ikke allerede findes, og så lave en "updater alle minimized filer" link

Så tror jeg vist det er ok for min sides vedkommende
Avatar billede learner Praktikant
06. oktober 2010 - 17:52 #18
Hej igen. nu har jeg også minimized css og js filer.

vil høre Jer om I ved om jeg kan lave gzip encoding på mine css og js filer?
Avatar billede learner Praktikant
06. oktober 2010 - 17:54 #19
jeg har læst lidt her
http://stevenmiles.com.au/blog/latest_news/compressing,combining_-and-_caching_css_js.html
er det sådan man skal løse det? eller kan det gøres lettere?
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester