W3 Total Cache - Version 0.6

Version Description

  • Improved error message notifications
  • FAQ and installation instructions corrections/adjustments
  • Added "Debug Mode" listing all settings and queries with statistics
  • Resolved bug in minification of feeds
  • Support for multiple wordpress installations added
  • Improved cache stability for large objects
Download this release

Release Info

Developer fredericktownes
Plugin Icon 128x128 W3 Total Cache
Version 0.6
Comparing to
See all releases

Code changes from version 0.5 to 0.6

Files changed (151) hide show
  1. inc/css/options.css +7 -6
  2. inc/css/popup.css +146 -142
  3. inc/define.php +172 -29
  4. inc/js/options.js +20 -7
  5. inc/js/popup.js +180 -27
  6. inc/options/about.phtml +30 -30
  7. inc/options/cdn.phtml +153 -141
  8. inc/options/common/footer.phtml +1 -1
  9. inc/options/common/header.phtml +31 -31
  10. inc/options/dbcache.phtml +22 -23
  11. inc/options/faq.phtml +450 -455
  12. inc/options/general.phtml +122 -112
  13. inc/options/install.phtml +162 -161
  14. inc/options/minify.phtml +112 -113
  15. inc/options/pgcache.phtml +71 -68
  16. inc/popup/cdn_export_file.phtml +38 -34
  17. inc/popup/cdn_export_library.phtml +34 -0
  18. inc/popup/cdn_export_table.phtml +0 -26
  19. inc/popup/cdn_import_library.phtml +54 -0
  20. inc/popup/cdn_queue.phtml +59 -59
  21. inc/popup/common/footer.phtml +2 -2
  22. inc/popup/common/header.phtml +42 -42
  23. lib/Minify/UPGRADING.txt +1 -1
  24. lib/Minify/min/README.txt +2 -2
  25. lib/Minify/min/builder/ocCheck.php +2 -2
  26. lib/Minify/min/index.php +5 -4
  27. lib/Minify/min/lib/HTTP/Encoder.php +24 -24
  28. lib/Minify/min/lib/Minify.php +1 -1
  29. lib/Minify/min/lib/Minify/CSS.php +75 -75
  30. lib/Minify/min/lib/Minify/CSS/Compressor.php +250 -250
  31. lib/Minify/min/lib/Minify/CSS/UriRewriter.php +10 -10
  32. lib/Minify/min/lib/Minify/Cache/File.php +33 -33
  33. lib/Minify/min/lib/Minify/Controller/Page.php +1 -1
  34. lib/Minify/min/lib/Minify/Javascript.php +0 -31
  35. lib/Minify/min/lib/Minify/Lines.php +4 -4
  36. lib/Minify/min/lib/MyMin.php +0 -289
  37. lib/Minify/min/pageBuffer.php +92 -0
  38. lib/Minify/min/pageConfig.php +82 -0
  39. lib/Minify/min/test/_inc.php +182 -0
  40. lib/Minify/min/test/index.php +161 -0
  41. lib/Minify/min/test/pageBuffer.php +96 -0
  42. lib/Minify/min_extras/README.txt +15 -0
  43. lib/Minify/min_extras/ab_tests/README.txt +10 -0
  44. lib/Minify/min_extras/ab_tests/_delimiter +3 -0
  45. lib/Minify/min_extras/ab_tests/ideal_php/before.php +25 -0
  46. lib/Minify/min_extras/ab_tests/minify/before.js +3408 -0
  47. lib/Minify/min_extras/ab_tests/minify/test_Files.php +15 -0
  48. lib/Minify/min_extras/ab_tests/minify/test_Files_Memcache.php +35 -0
  49. lib/Minify/min_extras/ab_tests/minify/test_Groups.php +15 -0
  50. lib/Minify/min_extras/ab_tests/minify/test_Version1.php +13 -0
  51. lib/Minify/min_extras/ab_tests/minify/test_memcache.php +19 -0
  52. lib/Minify/min_extras/ab_tests/mod_deflate/.htaccess-dev +30 -0
  53. lib/Minify/min_extras/ab_tests/mod_deflate/before.js +374 -0
  54. lib/Minify/min_extras/ab_tests/results_summary.txt +37 -0
  55. lib/Minify/min_extras/ab_tests/test_all.bat +67 -0
  56. lib/Minify/min_extras/ab_tests/test_memcache.bat +13 -0
  57. lib/Minify/min_extras/ab_tests/type-map/.htaccess-dev +40 -0
  58. lib/Minify/min_extras/ab_tests/type-map/before.js +374 -0
  59. lib/Minify/min_extras/ab_tests/type-map/before.js.var +14 -0
  60. lib/Minify/min_extras/ab_tests/type-map/before.js.zc +0 -0
  61. lib/Minify/min_extras/ab_tests/type-map/before.js.zd +0 -0
  62. lib/Minify/min_extras/ab_tests/type-map/before.js.zg +0 -0
  63. lib/Minify/min_extras/ab_tests/v1.0/minify.php +500 -0
  64. lib/Minify/min_extras/config.php +11 -0
  65. lib/Minify/min_extras/examples/1/_groupsSources.php +11 -0
  66. lib/Minify/min_extras/examples/1/index.php +50 -0
  67. lib/Minify/min_extras/examples/1/m.php +14 -0
  68. lib/Minify/min_extras/examples/2/_groupsSources.php +11 -0
  69. lib/Minify/min_extras/examples/2/index.php +94 -0
  70. lib/Minify/min_extras/examples/2/m.php +14 -0
  71. lib/Minify/min_extras/examples/index.php +3 -0
  72. lib/Minify/min_extras/examples/lib.js +6 -0
  73. lib/Minify/min_extras/examples/test space.js +5 -0
  74. lib/Minify/min_extras/examples/test.css +41 -0
  75. lib/Minify/min_extras/tools/encodeFile.php +34 -0
  76. lib/Minify/min_extras/tools/minifyFile.php +50 -0
  77. lib/Minify/min_extras/tools/minifyTextarea.php +98 -0
  78. lib/Minify/min_extras/tools/minifyUrl.php +166 -0
  79. lib/Minify/min_extras/tools/testRewriteUri.php +59 -0
  80. lib/Minify/min_unit_tests/HTTP_ConditionalGet/3.php +1 -1
  81. lib/Minify/min_unit_tests/HTTP_ConditionalGet/_include.php +1 -1
  82. lib/Minify/min_unit_tests/HTTP_ConditionalGet/index.php +1 -1
  83. lib/Minify/min_unit_tests/README.txt +4 -0
  84. lib/Minify/min_unit_tests/_test_files/css/hacks.css +66 -66
  85. lib/Minify/min_unit_tests/_test_files/css/issue62.css +889 -889
  86. lib/Minify/min_unit_tests/_test_files/css/paths_prepend.css +11 -11
  87. lib/Minify/min_unit_tests/_test_files/css/selectors.css +37 -37
  88. lib/Minify/min_unit_tests/_test_files/css/subsilver.css +433 -433
  89. lib/Minify/min_unit_tests/_test_files/css/unusual_strings.css +10 -10
  90. lib/Minify/min_unit_tests/_test_files/html/before.html +1 -1
  91. lib/Minify/min_unit_tests/_test_files/html/before2.html +1 -1
  92. lib/Minify/min_unit_tests/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE +348 -0
  93. lib/Minify/min_unit_tests/simpletest/LICENSE +502 -0
  94. lib/Minify/min_unit_tests/simpletest/README +108 -0
  95. lib/Minify/min_unit_tests/simpletest/TODO.xml +176 -0
  96. lib/Minify/min_unit_tests/simpletest/VERSION +1 -0
  97. lib/Minify/min_unit_tests/simpletest/authentication.php +238 -0
  98. lib/Minify/min_unit_tests/simpletest/autorun.php +87 -0
  99. lib/Minify/min_unit_tests/simpletest/browser.php +1098 -0
  100. lib/Minify/min_unit_tests/simpletest/collector.php +122 -0
  101. lib/Minify/min_unit_tests/simpletest/compatibility.php +173 -0
  102. lib/Minify/min_unit_tests/simpletest/cookies.php +380 -0
  103. lib/Minify/min_unit_tests/simpletest/default_reporter.php +133 -0
  104. lib/Minify/min_unit_tests/simpletest/detached.php +96 -0
  105. lib/Minify/min_unit_tests/simpletest/docs/en/docs.css +121 -0
  106. lib/Minify/min_unit_tests/simpletest/docs/fr/docs.css +84 -0
  107. lib/Minify/min_unit_tests/simpletest/docs/lastcraft/README +1 -0
  108. lib/Minify/min_unit_tests/simpletest/docs/onpk/README +1 -0
  109. lib/Minify/min_unit_tests/simpletest/docs/pkg/README +1 -0
  110. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/README +1 -0
  111. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/favicon.ico +0 -0
  112. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/book-domain-driven-design.jpg +0 -0
  113. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/book-guide-to-php-design-patterns.jpg +0 -0
  114. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/book-the-php-anthology-object-oriented-php-solutions.jpg +0 -0
  115. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/quote.png +0 -0
  116. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/simpletest-contribute.png +0 -0
  117. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/simpletest-download.png +0 -0
  118. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/simpletest-external-bottom.png +0 -0
  119. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/simpletest-external-middle.png +0 -0
  120. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/simpletest-external-top.png +0 -0
  121. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/simpletest-internal-bottom.png +0 -0
  122. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/simpletest-internal-middle.png +0 -0
  123. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/simpletest-internal-top.png +0 -0
  124. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/simpletest-logo.png +0 -0
  125. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/simpletest-start-testing.png +0 -0
  126. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/simpletest-support.png +0 -0
  127. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/test-in-cli.png +0 -0
  128. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/test-with-1-fail.png +0 -0
  129. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/images/test-with-1-pass.png +0 -0
  130. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/index.html +188 -0
  131. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/js/jquery-1.2.1.pack.js +11 -0
  132. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/js/jquery-speakers_coaches_consultants.js +30 -0
  133. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/simpletest.css +39 -0
  134. lib/Minify/min_unit_tests/simpletest/docs/simpletest.org/views/photos_stream.php +36 -0
  135. lib/Minify/min_unit_tests/simpletest/docs/source/en/about.xml +116 -0
  136. lib/Minify/min_unit_tests/simpletest/docs/source/en/authentication_documentation.xml +317 -0
  137. lib/Minify/min_unit_tests/simpletest/docs/source/en/books_website.xml +73 -0
  138. lib/Minify/min_unit_tests/simpletest/docs/source/en/boundary_classes_tutorial.xml +407 -0
  139. lib/Minify/min_unit_tests/simpletest/docs/source/en/browser_documentation.xml +263 -0
  140. lib/Minify/min_unit_tests/simpletest/docs/source/en/coding_standards.xml +82 -0
  141. lib/Minify/min_unit_tests/simpletest/docs/source/en/display_subclass_tutorial.xml +274 -0
  142. lib/Minify/min_unit_tests/simpletest/docs/source/en/download_website.xml +100 -0
  143. lib/Minify/min_unit_tests/simpletest/docs/source/en/expectation_documentation.xml +339 -0
  144. lib/Minify/min_unit_tests/simpletest/docs/source/en/experimental_autorun.xml +209 -0
  145. lib/Minify/min_unit_tests/simpletest/docs/source/en/experimental_dom_tester.xml +231 -0
  146. lib/Minify/min_unit_tests/simpletest/docs/source/en/experimental_intro.xml +54 -0
  147. lib/Minify/min_unit_tests/simpletest/docs/source/en/experimental_recorder.xml +170 -0
  148. lib/Minify/min_unit_tests/simpletest/docs/source/en/extension_eclipse.xml +279 -0
  149. lib/Minify/min_unit_tests/simpletest/docs/source/en/first_test_tutorial.xml +443 -0
  150. lib/Minify/min_unit_tests/simpletest/docs/source/en/form_testing_documentation.xml +299 -0
  151. lib/Minify/min_unit_tests/simpletest/docs/source/en/gain_control_tutorial.xml +296 -0
inc/css/options.css CHANGED
@@ -1,22 +1,22 @@
1
  #icon-w3tc-logo {
2
  background:url(../images/logo.png) no-repeat;
3
  float:left;
4
- height:36px;
5
  width:36px
6
  }
7
  .w3tc-options-menu-selected {
8
  font-weight:bold
9
  }
10
  .w3tc-enabled {
11
- color:#090;
12
  font-weight:bold
13
  }
14
  .w3tc-disabled {
15
- color:#f00;
16
  font-weight:bold
17
  }
18
  .w3tc-empty {
19
- font-weight:bold;
20
  font-style:italic
21
  }
22
  .w3tc-success {
@@ -35,7 +35,6 @@
35
  list-style-type:disc;
36
  list-style-position:inside
37
  }
38
- /* FAQ BEGIN */
39
  #w3tc blockquote {
40
  font-style:italic;
41
  width:700px
@@ -84,4 +83,6 @@
84
  padding:10px;
85
  width:760px
86
  }
87
- /* FAQ END */
 
 
1
  #icon-w3tc-logo {
2
  background:url(../images/logo.png) no-repeat;
3
  float:left;
4
+ height: 36px;
5
  width:36px
6
  }
7
  .w3tc-options-menu-selected {
8
  font-weight:bold
9
  }
10
  .w3tc-enabled {
11
+ color: #090;
12
  font-weight:bold
13
  }
14
  .w3tc-disabled {
15
+ color: #f00;
16
  font-weight:bold
17
  }
18
  .w3tc-empty {
19
+ font-weight: bold;
20
  font-style:italic
21
  }
22
  .w3tc-success {
35
  list-style-type:disc;
36
  list-style-position:inside
37
  }
 
38
  #w3tc blockquote {
39
  font-style:italic;
40
  width:700px
83
  padding:10px;
84
  width:760px
85
  }
86
+ #w3tc #about, #w3tc #install {
87
+ width: 760px;
88
+ }
inc/css/popup.css CHANGED
@@ -1,142 +1,146 @@
1
- * {
2
- margin: 0;
3
- padding: 0;
4
- color: #464646;
5
- }
6
- html,body {
7
- height: 100%;
8
- }
9
- body {
10
- line-height: 1;
11
- background: #f9f9f9;
12
- }
13
- body,td,textarea,input,select {
14
- font-family: "Lucida Grande", Verdana, Arial;
15
- font-size: 13px;
16
- }
17
- p {
18
- margin: 1em 0;
19
- }
20
- h1 {
21
- font-family: Georgia, "Times New Roman", "Bitstream Charter";
22
- font-size: 24px;
23
- font-style: italic;
24
- font-weight: normal;
25
- line-height: 35px;
26
- margin-bottom: 0.8em 0;
27
- text-shadow: 0 1px 0 #fff;
28
- }
29
- a {
30
- color: #21759B;
31
- }
32
- a:hover {
33
- color: #D54E21;
34
- }
35
- #content {
36
- padding: 40px 50px;
37
- }
38
- .clear {
39
- clear: both;
40
- }
41
- .button,input[type="button"],input[type="submit"] {
42
- font-size: 11px;
43
- line-height: 16px;
44
- background: #F2F2F2 url(/wp-admin/images/white-grad.png) repeat-x scroll
45
- left top;
46
- border: 1px solid #bbb;
47
- color: #464646;
48
- text-shadow: 0 1px 0 #fff;
49
- cursor: pointer;
50
- padding: 2px 8px;
51
- -moz-background-clip: border;
52
- -moz-background-inline-policy: continuous;
53
- -moz-background-origin: padding;
54
- -moz-border-radius: 11px;
55
- -moz-box-sizing: content-box;
56
- }
57
- .button:hover,input[type="button"]:hover,input[type="submit"]:hover {
58
- border-color: #666;
59
- color: #000;
60
- }
61
- .button:active,input[type="button"]:active,input[type="submit"]:active {
62
- background: #F2F2F2 url(/wp-admin/images/white-grad-active.png) repeat-x
63
- scroll left top;
64
- }
65
- .progress {
66
- background: #fff;
67
- border: 1px solid #464646;
68
- padding: 1px;
69
- margin: 1em 0;
70
- position: relative;
71
- }
72
- .progress-value {
73
- position: absolute;
74
- line-height: 30px;
75
- font-size: 16px;
76
- font-weight: bold;
77
- color: #000;
78
- text-align: center;
79
- width: 100%;
80
- }
81
- .progress-bar {
82
- float: left;
83
- width: 0;
84
- height: 30px;
85
- background: #fc2;
86
- }
87
- .log {
88
- border: 1px solid #464646;
89
- height: 298px;
90
- overflow: auto;
91
- }
92
- .log div {
93
- padding: 3px;
94
- border-bottom: 1px solid #464646;
95
- }
96
- .log-success {
97
- background: #bfb;
98
- }
99
- .log-error {
100
- background: #f99;
101
- }
102
- .empty {
103
- font-weight: bold;
104
- font-style: italic;
105
- }
106
- .table {
107
- width: 100%;
108
- border-collapse: collapse;
109
- }
110
- .table td,th {
111
- border: 1px solid #ccc;
112
- padding: 3px 2px;
113
- }
114
- .table th {
115
- background: #eee;
116
- }
117
- .updated,.error {
118
- -moz-border-radius-bottomleft: 3px;
119
- -moz-border-radius-bottomright: 3px;
120
- -moz-border-radius-topleft: 3px;
121
- -moz-border-radius-topright: 3px;
122
- border-style: solid;
123
- border-width: 1px;
124
- padding: 0 0.6em;
125
- margin: 0.5em 0;
126
- }
127
- .updated {
128
- background: #FFFFE0;
129
- border-color: #E6DB55;
130
- }
131
- .error {
132
- background-color: #FFEBE8;
133
- border-color: #CC0000;
134
- }
135
- .updated p,.error p {
136
- line-height: 1;
137
- margin: 0.5em 0;
138
- padding: 2px;
139
- }
140
- .tab-selected {
141
- font-weight: bold;
142
- }
 
 
 
 
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ color: #464646;
5
+ }
6
+ html,body {
7
+ height: 100%;
8
+ }
9
+ body {
10
+ line-height: 1;
11
+ background: #f9f9f9;
12
+ }
13
+ body,td,textarea,input,select {
14
+ font-family: "Lucida Grande", Verdana, Arial;
15
+ font-size: 13px;
16
+ }
17
+ p {
18
+ margin: 1em 0;
19
+ }
20
+ h1 {
21
+ font-family: Georgia, "Times New Roman", "Bitstream Charter";
22
+ font-size: 24px;
23
+ font-style: italic;
24
+ font-weight: normal;
25
+ line-height: 35px;
26
+ margin-bottom: 0.8em 0;
27
+ text-shadow: 0 1px 0 #fff;
28
+ }
29
+ a {
30
+ color: #21759B;
31
+ }
32
+ a:hover {
33
+ color: #D54E21;
34
+ }
35
+ #content {
36
+ padding: 40px 50px;
37
+ }
38
+ .clear {
39
+ clear: both;
40
+ }
41
+ .button,input[type="button"],input[type="submit"] {
42
+ font-size: 11px;
43
+ line-height: 16px;
44
+ background: #F2F2F2 url(/wp-admin/images/white-grad.png) repeat-x scroll
45
+ left top;
46
+ border: 1px solid #bbb;
47
+ color: #464646;
48
+ text-shadow: 0 1px 0 #fff;
49
+ cursor: pointer;
50
+ padding: 2px 8px;
51
+ -moz-background-clip: border;
52
+ -moz-background-inline-policy: continuous;
53
+ -moz-background-origin: padding;
54
+ -moz-border-radius: 11px;
55
+ -moz-box-sizing: content-box;
56
+ }
57
+ .button:hover,input[type="button"]:hover,input[type="submit"]:hover {
58
+ border-color: #666;
59
+ color: #000;
60
+ }
61
+ .button:active,input[type="button"]:active,input[type="submit"]:active {
62
+ background: #F2F2F2 url(/wp-admin/images/white-grad-active.png) repeat-x
63
+ scroll left top;
64
+ }
65
+ .progress {
66
+ background: #fff;
67
+ border: 1px solid #464646;
68
+ padding: 1px;
69
+ margin: 1em 0;
70
+ position: relative;
71
+ }
72
+ .progress-value {
73
+ position: absolute;
74
+ line-height: 30px;
75
+ font-size: 16px;
76
+ font-weight: bold;
77
+ color: #000;
78
+ text-align: center;
79
+ width: 100%;
80
+ }
81
+ .progress-bar {
82
+ float: left;
83
+ width: 0;
84
+ height: 30px;
85
+ background: #fc2;
86
+ }
87
+ .log {
88
+ border: 1px solid #464646;
89
+ height: 298px;
90
+ overflow: auto;
91
+ }
92
+ .log div {
93
+ padding: 3px;
94
+ border-bottom: 1px solid #464646;
95
+ }
96
+ .log-success {
97
+ background: #bfb;
98
+ }
99
+ .log-error {
100
+ background: #f99;
101
+ }
102
+ .empty {
103
+ font-weight: bold;
104
+ font-style: italic;
105
+ }
106
+ .table {
107
+ width: 100%;
108
+ border-collapse: collapse;
109
+ }
110
+ .table td,th {
111
+ border: 1px solid #ccc;
112
+ padding: 3px 2px;
113
+ }
114
+ .table th {
115
+ background: #eee;
116
+ }
117
+ .updated,.error {
118
+ -moz-border-radius-bottomleft: 3px;
119
+ -moz-border-radius-bottomright: 3px;
120
+ -moz-border-radius-topleft: 3px;
121
+ -moz-border-radius-topright: 3px;
122
+ border-style: solid;
123
+ border-width: 1px;
124
+ padding: 0 0.6em;
125
+ margin: 0.5em 0;
126
+ }
127
+ .updated {
128
+ background: #FFFFE0;
129
+ border-color: #E6DB55;
130
+ }
131
+ .error {
132
+ background-color: #FFEBE8;
133
+ border-color: #CC0000;
134
+ }
135
+ .updated p,.error p {
136
+ line-height: 1;
137
+ margin: 0.5em 0;
138
+ padding: 2px;
139
+ }
140
+ .tab-selected {
141
+ font-weight: bold;
142
+ }
143
+ .rules {
144
+ width: 100%;
145
+ font-size: 9px;
146
+ }
inc/define.php CHANGED
@@ -1,29 +1,172 @@
1
- <?php
2
-
3
- if (! defined('W3_PLUGIN_POWERED_BY')) {
4
- define('W3_PLUGIN_POWERED_BY', 'W3 Total Cache/0.5');
5
- }
6
-
7
- if (! defined('WP_CONTENT_DIR')) {
8
- define('WP_CONTENT_DIR', dirname(__FILE__) . '/../../../');
9
- }
10
-
11
- if (! defined('W3_PLUGIN_DIR')) {
12
- define('W3_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins/w3-total-cache');
13
- }
14
-
15
- if (! defined('W3_PLUGIN_CONTENT_DIR')) {
16
- define('W3_PLUGIN_CONTENT_DIR', W3_PLUGIN_DIR . '/wp-content');
17
- }
18
-
19
- if (! defined('W3_PLUGIN_FILE')) {
20
- define('W3_PLUGIN_FILE', 'w3-total-cache/w3-total-cache.php');
21
- }
22
-
23
- if (! defined('W3_CONFIG_PATH')) {
24
- define('W3_CONFIG_PATH', WP_CONTENT_DIR . '/uploads/w3-total-cache-config.php');
25
- }
26
-
27
- if (! defined('W3_CONFIG_DEFAULT_PATH')) {
28
- define('W3_CONFIG_DEFAULT_PATH', W3_PLUGIN_DIR . '/w3-total-cache-config-default.php');
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if (! defined('W3_PLUGIN_VERSION')) {
4
+ define('W3_PLUGIN_VERSION', '0.6');
5
+ }
6
+
7
+ if (! defined('W3_PLUGIN_POWERED_BY')) {
8
+ define('W3_PLUGIN_POWERED_BY', 'W3 Total Cache/' . W3_PLUGIN_VERSION);
9
+ }
10
+
11
+ if (! defined('WP_CONTENT_DIR')) {
12
+ define('WP_CONTENT_DIR', dirname(__FILE__) . '/../../../');
13
+ }
14
+
15
+ if (! defined('W3_PLUGIN_DIR')) {
16
+ define('W3_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins/w3-total-cache');
17
+ }
18
+
19
+ if (! defined('W3_PLUGIN_CONTENT_DIR')) {
20
+ define('W3_PLUGIN_CONTENT_DIR', W3_PLUGIN_DIR . '/wp-content');
21
+ }
22
+
23
+ if (! defined('W3_PLUGIN_FILE')) {
24
+ define('W3_PLUGIN_FILE', 'w3-total-cache/w3-total-cache.php');
25
+ }
26
+
27
+ if (! defined('W3_CONFIG_PATH')) {
28
+ define('W3_CONFIG_PATH', WP_CONTENT_DIR . '/w3-total-cache-config.php');
29
+ }
30
+
31
+ if (! defined('W3_CONFIG_DEFAULT_PATH')) {
32
+ define('W3_CONFIG_DEFAULT_PATH', W3_PLUGIN_DIR . '/w3-total-cache-config-default.php');
33
+ }
34
+
35
+ /**
36
+ * W3 writable error
37
+ *
38
+ * @param string $path
39
+ * @param boolean $die
40
+ * @return string
41
+ */
42
+ function w3_writable_error($path, $die = true)
43
+ {
44
+ $error = sprintf('<strong>%s</strong> could not be created, please run following command:<br /><strong style="color: #f00;">chmod 777 %s</strong><br />then re-activate plugin.', $path, dirname($path));
45
+
46
+ if ($die) {
47
+ die($error);
48
+ }
49
+
50
+ return $error;
51
+ }
52
+
53
+ /**
54
+ * Returns current microtime
55
+ *
56
+ * @return float
57
+ */
58
+ function w3_microtime()
59
+ {
60
+ list ($usec, $sec) = explode(" ", microtime());
61
+ return ((float) $usec + (float) $sec);
62
+ }
63
+
64
+ /**
65
+ * Check if URL is valid
66
+ *
67
+ * @param string $url
68
+ * @return boolean
69
+ */
70
+ function w3_is_url($url)
71
+ {
72
+ return preg_match('~^https?://~', $url);
73
+ }
74
+
75
+ if (! function_exists('gzdecode')) {
76
+ /**
77
+ * Decodes gzip-encoded string
78
+ *
79
+ * @param string $data
80
+ * @return string
81
+ */
82
+ function gzdecode($data)
83
+ {
84
+ $flags = ord(substr($data, 3, 1));
85
+ $headerlen = 10;
86
+ $extralen = 0;
87
+
88
+ if ($flags & 4) {
89
+ $extralen = unpack('v', substr($data, 10, 2));
90
+ $extralen = $extralen[1];
91
+ $headerlen += 2 + $extralen;
92
+ }
93
+
94
+ if ($flags & 8) {
95
+ $headerlen = strpos($data, chr(0), $headerlen) + 1;
96
+ }
97
+
98
+ if ($flags & 16) {
99
+ $headerlen = strpos($data, chr(0), $headerlen) + 1;
100
+ }
101
+
102
+ if ($flags & 2) {
103
+ $headerlen += 2;
104
+ }
105
+
106
+ $unpacked = gzinflate(substr($data, $headerlen));
107
+
108
+ if ($unpacked === FALSE) {
109
+ $unpacked = $data;
110
+ }
111
+
112
+ return $unpacked;
113
+ }
114
+ }
115
+
116
+ /**
117
+ * Creates thumbnail
118
+ *
119
+ * @param string $file
120
+ * @param integer $max_w
121
+ * @param integer $max_h
122
+ * @param boolean $crop
123
+ * @param string $suffix
124
+ * @param string $dest_path
125
+ * @param integer $jpeg_quality
126
+ * @return string
127
+ */
128
+ function w3_create_thumbnail($file, $max_w, $max_h, $crop = false, $suffix = null, $dest_path = null, $jpeg_quality = 90)
129
+ {
130
+ $thumbpath = image_resize($file, $max_w, $max_h, $crop, $suffix, $dest_path, $jpeg_quality);
131
+
132
+ return apply_filters('wp_create_thumbnail', $thumbpath);
133
+ }
134
+
135
+ /**
136
+ * Recursive creates directory
137
+ *
138
+ * @param string $path
139
+ * @param integer $mask
140
+ * @return boolean
141
+ */
142
+ function w3_mkdir($path, $mask = 0777)
143
+ {
144
+ $dirs = preg_split('~[\\/]+~', $path);
145
+ $curr_path = '';
146
+ foreach ($dirs as $dir) {
147
+ if (empty($dir)) {
148
+ return false;
149
+ }
150
+ $curr_path .= $dir;
151
+ if (! is_dir($curr_path)) {
152
+ if (@mkdir($curr_path, $mask)) {
153
+ @chmod($curr_path, $mask);
154
+ } else {
155
+ return false;
156
+ }
157
+ }
158
+ $curr_path .= DIRECTORY_SEPARATOR;
159
+ }
160
+ return true;
161
+ }
162
+
163
+ /**
164
+ * Check if content is HTML or XML
165
+ *
166
+ * @param string $content
167
+ * @return boolean
168
+ */
169
+ function w3_is_xml($content)
170
+ {
171
+ return (stristr($content, '<?xml') !== false || stristr($content, '<html') !== false);
172
+ }
inc/js/options.js CHANGED
@@ -1,6 +1,13 @@
1
- function w3tc_popup(url, name)
2
  {
3
- return window.open(url, name, 'width=800,height=600,status=no,toolbar=no,menubar=no,scrollbars=yes');
 
 
 
 
 
 
 
4
  }
5
 
6
  jQuery(function($) {
@@ -32,11 +39,13 @@ jQuery(function($) {
32
  if (enabled) {
33
  $(this).next(':hidden').remove();
34
  } else {
35
- var me = $(this);
36
- me.after($('<input />').attr({
37
- type: 'hidden',
38
- name: me.attr('name'),
39
- }).val(me.val()));
 
 
40
  }
41
  });
42
  }
@@ -185,6 +194,10 @@ jQuery(function($) {
185
  w3tc_popup('options-general.php?page=w3-total-cache/w3-total-cache.php&w3tc_action=cdn_export_library', 'cdn_export_library');
186
  });
187
 
 
 
 
 
188
  $('#cdn_queue').click(function() {
189
  w3tc_popup('options-general.php?page=w3-total-cache/w3-total-cache.php&w3tc_action=cdn_queue', 'cdn_queue');
190
  });
1
+ function w3tc_popup(url, name, width, height)
2
  {
3
+ if (width === undefined) {
4
+ width = 800;
5
+ }
6
+ if (height === undefined) {
7
+ height = 600;
8
+ }
9
+
10
+ return window.open(url, name, 'width=' + width + ',height=' + height +',status=no,toolbar=no,menubar=no,scrollbars=yes');
11
  }
12
 
13
  jQuery(function($) {
39
  if (enabled) {
40
  $(this).next(':hidden').remove();
41
  } else {
42
+ var me = $(this), t = me.attr('type');
43
+ if ((t != 'radio' && t != 'checkbox') || this.checked) {
44
+ me.after($('<input />').attr({
45
+ type: 'hidden',
46
+ name: me.attr('name')
47
+ }).val(me.val()));
48
+ }
49
  }
50
  });
51
  }
194
  w3tc_popup('options-general.php?page=w3-total-cache/w3-total-cache.php&w3tc_action=cdn_export_library', 'cdn_export_library');
195
  });
196
 
197
+ $('#cdn_import_library').click(function() {
198
+ w3tc_popup('options-general.php?page=w3-total-cache/w3-total-cache.php&w3tc_action=cdn_import_library', 'cdn_import_library');
199
+ });
200
+
201
  $('#cdn_queue').click(function() {
202
  w3tc_popup('options-general.php?page=w3-total-cache/w3-total-cache.php&w3tc_action=cdn_queue', 'cdn_queue');
203
  });
inc/js/popup.js CHANGED
@@ -26,11 +26,16 @@ var Cdn_Export_File = {
26
  jQuery('#cdn_export_file_start').val(text);
27
  },
28
 
29
- log: function(path, result, error)
30
  {
31
  jQuery('#cdn_export_file_log').prepend('<div class="log-' + (result == 1 ? 'success' : 'error') + '">' + path + ' <strong>' + error + '</strong></div>');
32
  },
33
 
 
 
 
 
 
34
  process: function()
35
  {
36
  if (this.paused) {
@@ -59,7 +64,7 @@ var Cdn_Export_File = {
59
  {
60
  var failed = false;
61
  for (var i = 0; i < data.results.length; i++) {
62
- this.log(data.results[i].remote_path, data.results[i].result, data.results[i].error);
63
  if (data.results[i].result == -1) {
64
  failed = true;
65
  break;
@@ -87,7 +92,7 @@ var Cdn_Export_File = {
87
  }
88
  },
89
 
90
- init: function(files) {
91
  if (files === undefined) {
92
  files = [];
93
  }
@@ -101,6 +106,9 @@ var Cdn_Export_File = {
101
  me.set_button_text('Resume');
102
  me.set_status('paused');
103
  } else {
 
 
 
104
  me.paused = 0;
105
  me.set_button_text('Pause');
106
  me.set_status('processing');
@@ -109,43 +117,47 @@ var Cdn_Export_File = {
109
  me.process();
110
  });
111
  }
112
- }
113
 
114
- var Cdn_Export_Table = {
115
- action: '',
116
  paused: 0,
117
  limit: 25,
118
  offset: 0,
119
 
120
  set_progress: function(percent)
121
  {
122
- jQuery('#cdn_export_table_progress .progress-bar').width(percent + '%');
123
- jQuery('#cdn_export_table_progress .progress-value').html(percent + '%');
124
  },
125
 
126
  set_status: function(status)
127
  {
128
- jQuery('#cdn_export_table_status').html(status);
129
  },
130
 
131
  set_processed: function(processed)
132
  {
133
- jQuery('#cdn_export_table_processed').html(processed);
134
  },
135
 
136
  set_total: function(total)
137
  {
138
- jQuery('#cdn_export_table_total').html(total);
139
  },
140
 
141
  set_button_text: function(text)
142
  {
143
- jQuery('#cdn_export_table_start').val(text);
 
 
 
 
 
144
  },
145
 
146
- log: function(path, result, error)
147
  {
148
- jQuery('#cdn_export_table_log').prepend('<div class="log-' + (result == 1 ? 'success' : 'error') + '">' + path + ' <strong>' + error + '</strong></div>');
149
  },
150
 
151
  process: function()
@@ -157,7 +169,7 @@ var Cdn_Export_Table = {
157
  var me = this;
158
  jQuery.post('options-general.php', {
159
  page: 'w3-total-cache/w3-total-cache.php',
160
- w3tc_action: this.action,
161
  limit: this.limit,
162
  offset: this.offset
163
  }, function(data) {
@@ -175,7 +187,7 @@ var Cdn_Export_Table = {
175
 
176
  var failed = false;
177
  for (var i = 0; i < data.results.length; i++) {
178
- this.log(data.results[i].remote_path, data.results[i].result, data.results[i].error);
179
  if (data.results[i].result == -1) {
180
  failed = true;
181
  break;
@@ -199,20 +211,166 @@ var Cdn_Export_Table = {
199
  }
200
  },
201
 
202
- init: function(action) {
203
- if (action === undefined) {
204
- action = 'cdn_export_table';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
205
  }
206
 
207
- this.action = action;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
 
209
  var me = this;
210
- jQuery('#cdn_export_table_start').click(function() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
211
  if (this.value == 'Pause') {
212
  me.paused = 1;
213
  me.set_button_text('Resume');
214
  me.set_status('paused');
215
  } else {
 
 
 
 
216
  me.paused = 0;
217
  me.set_button_text('Pause');
218
  me.set_status('processing');
@@ -221,7 +379,7 @@ var Cdn_Export_Table = {
221
  me.process();
222
  });
223
  }
224
- }
225
 
226
  jQuery(function($) {
227
  $('.tab').click(function() {
@@ -238,9 +396,4 @@ jQuery(function($) {
238
  $('.cdn_queue_empty').click(function() {
239
  return confirm('Are you sure you want to empty the queue?');
240
  });
241
-
242
- Cdn_Export_Table.init('cdn_export_library_process');
243
- if (typeof files !== 'undefined') {
244
- Cdn_Export_File.init(files);
245
- }
246
  });
26
  jQuery('#cdn_export_file_start').val(text);
27
  },
28
 
29
+ add_log: function(path, result, error)
30
  {
31
  jQuery('#cdn_export_file_log').prepend('<div class="log-' + (result == 1 ? 'success' : 'error') + '">' + path + ' <strong>' + error + '</strong></div>');
32
  },
33
 
34
+ clear_log: function()
35
+ {
36
+ jQuery('#cdn_export_library_log').val('');
37
+ },
38
+
39
  process: function()
40
  {
41
  if (this.paused) {
64
  {
65
  var failed = false;
66
  for (var i = 0; i < data.results.length; i++) {
67
+ this.add_log(data.results[i].remote_path, data.results[i].result, data.results[i].error);
68
  if (data.results[i].result == -1) {
69
  failed = true;
70
  break;
92
  }
93
  },
94
 
95
+ init: function(files, cdn_url) {
96
  if (files === undefined) {
97
  files = [];
98
  }
106
  me.set_button_text('Resume');
107
  me.set_status('paused');
108
  } else {
109
+ if (this.value == 'Start') {
110
+ me.clear_log();
111
+ }
112
  me.paused = 0;
113
  me.set_button_text('Pause');
114
  me.set_status('processing');
117
  me.process();
118
  });
119
  }
120
+ };
121
 
122
+ var Cdn_Export_Library = {
 
123
  paused: 0,
124
  limit: 25,
125
  offset: 0,
126
 
127
  set_progress: function(percent)
128
  {
129
+ jQuery('#cdn_export_library_progress .progress-bar').width(percent + '%');
130
+ jQuery('#cdn_export_library_progress .progress-value').html(percent + '%');
131
  },
132
 
133
  set_status: function(status)
134
  {
135
+ jQuery('#cdn_export_library_status').html(status);
136
  },
137
 
138
  set_processed: function(processed)
139
  {
140
+ jQuery('#cdn_export_library_processed').html(processed);
141
  },
142
 
143
  set_total: function(total)
144
  {
145
+ jQuery('#cdn_export_library_total').html(total);
146
  },
147
 
148
  set_button_text: function(text)
149
  {
150
+ jQuery('#cdn_export_library_start').val(text);
151
+ },
152
+
153
+ add_log: function(path, result, error)
154
+ {
155
+ jQuery('#cdn_export_library_log').prepend('<div class="log-' + (result == 1 ? 'success' : 'error') + '">' + path + ' <strong>' + error + '</strong></div>');
156
  },
157
 
158
+ clear_log: function()
159
  {
160
+ jQuery('#cdn_export_library_log').html('');
161
  },
162
 
163
  process: function()
169
  var me = this;
170
  jQuery.post('options-general.php', {
171
  page: 'w3-total-cache/w3-total-cache.php',
172
+ w3tc_action: 'cdn_export_library_process',
173
  limit: this.limit,
174
  offset: this.offset
175
  }, function(data) {
187
 
188
  var failed = false;
189
  for (var i = 0; i < data.results.length; i++) {
190
+ this.add_log(data.results[i].remote_path, data.results[i].result, data.results[i].error);
191
  if (data.results[i].result == -1) {
192
  failed = true;
193
  break;
211
  }
212
  },
213
 
214
+ init: function() {
215
+ var me = this;
216
+ jQuery('#cdn_export_library_start').click(function() {
217
+ if (this.value == 'Pause') {
218
+ me.paused = 1;
219
+ me.set_button_text('Resume');
220
+ me.set_status('paused');
221
+ } else {
222
+ if (this.value == 'Start') {
223
+ me.clear_log();
224
+ }
225
+ me.paused = 0;
226
+ me.set_button_text('Pause');
227
+ me.set_status('processing');
228
+ }
229
+
230
+ me.process();
231
+ });
232
+ }
233
+ };
234
+
235
+ var Cdn_Import_Library = {
236
+ paused: 0,
237
+ limit: 5,
238
+ offset: 0,
239
+ cdn_host: '',
240
+
241
+ set_progress: function(percent)
242
+ {
243
+ jQuery('#cdn_import_library_progress .progress-bar').width(percent + '%');
244
+ jQuery('#cdn_import_library_progress .progress-value').html(percent + '%');
245
+ },
246
+
247
+ set_status: function(status)
248
+ {
249
+ jQuery('#cdn_import_library_status').html(status);
250
+ },
251
+
252
+ set_processed: function(processed)
253
+ {
254
+ jQuery('#cdn_import_library_processed').html(processed);
255
+ },
256
+
257
+ set_total: function(total)
258
+ {
259
+ jQuery('#cdn_import_library_total').html(total);
260
+ },
261
+
262
+ set_button_text: function(text)
263
+ {
264
+ jQuery('#cdn_import_library_start').val(text);
265
+ },
266
+
267
+ is_redirect_permanent: function()
268
+ {
269
+ return (jQuery('#cdn_import_library_redirect_permanent:checked').size() > 0);
270
+ },
271
+
272
+ is_redirect_cdn: function()
273
+ {
274
+ return (jQuery('#cdn_import_library_redirect_cdn:checked').size() > 0);
275
+ },
276
+
277
+ add_log: function(path, result, error)
278
+ {
279
+ jQuery('#cdn_import_library_log').prepend('<div class="log-' + (result == 1 ? 'success' : 'error') + '">' + path + ' <strong>' + error + '</strong></div>');
280
+ },
281
+
282
+ clear_log: function()
283
+ {
284
+ jQuery('#cdn_import_library_log').html('');
285
+ },
286
+
287
+ add_rule: function(src, dst)
288
+ {
289
+ if (/^https?:\/\//.test(src)) {
290
+ return;
291
  }
292
 
293
+ if (this.is_redirect_cdn()) {
294
+ dst = 'http://' + this.cdn_host + '/' + dst;
295
+ } else {
296
+ dst = '/' + dst;
297
+ }
298
+
299
+ var rules = jQuery('#cdn_import_library_rules');
300
+ rules.val(rules.val() + 'Redirect ' + (this.is_redirect_permanent() ? '302 ' : '') + '/' + src + ' ' + dst + '\r\n');
301
+ },
302
+
303
+ clear_rules: function()
304
+ {
305
+ jQuery('#cdn_import_library_rules').val('');
306
+ },
307
+
308
+ process: function()
309
+ {
310
+ if (this.paused) {
311
+ return;
312
+ }
313
 
314
  var me = this;
315
+ jQuery.post('options-general.php', {
316
+ page: 'w3-total-cache/w3-total-cache.php',
317
+ w3tc_action: 'cdn_import_library_process',
318
+ limit: this.limit,
319
+ offset: this.offset
320
+ }, function(data) {
321
+ me.process_callback(data);
322
+ }, 'json');
323
+ },
324
+
325
+ process_callback: function(data)
326
+ {
327
+ this.offset += data.count;
328
+
329
+ this.set_total(data.total);
330
+ this.set_processed(this.offset);
331
+ this.set_progress((this.offset * 100 / data.total).toFixed(0));
332
+
333
+ var failed = false;
334
+ for (var i = 0; i < data.results.length; i++) {
335
+ this.add_log(data.results[i].src, data.results[i].result, data.results[i].error);
336
+ if (data.results[i].result == 1) {
337
+ this.add_rule(data.results[i].src, data.results[i].dst);
338
+ } else if (data.results[i].result == -1) {
339
+ failed = true;
340
+ break;
341
+ }
342
+ }
343
+
344
+ if (failed) {
345
+ this.offset = 0;
346
+ this.set_progress(0);
347
+ this.set_processed(1);
348
+ this.set_status('failed');
349
+ this.set_button_text('Start');
350
+ } else {
351
+ if (this.offset < data.total) {
352
+ this.process();
353
+ } else {
354
+ this.offset = 0;
355
+ this.set_status('done');
356
+ this.set_button_text('Start');
357
+ }
358
+ }
359
+ },
360
+
361
+ init: function(cdn_host) {
362
+ var me = this;
363
+ this.cdn_host = cdn_host;
364
+ jQuery('#cdn_import_library_start').click(function() {
365
  if (this.value == 'Pause') {
366
  me.paused = 1;
367
  me.set_button_text('Resume');
368
  me.set_status('paused');
369
  } else {
370
+ if (this.value == 'Start') {
371
+ me.clear_log();
372
+ me.clear_rules();
373
+ }
374
  me.paused = 0;
375
  me.set_button_text('Pause');
376
  me.set_status('processing');
379
  me.process();
380
  });
381
  }
382
+ };
383
 
384
  jQuery(function($) {
385
  $('.tab').click(function() {
396
  $('.cdn_queue_empty').click(function() {
397
  return confirm('Are you sure you want to empty the queue?');
398
  });
 
 
 
 
 
399
  });
inc/options/about.phtml CHANGED
@@ -1,31 +1,31 @@
1
- <h3 id="about">About</h3>
2
- <div id="about" class="w3tc">
3
- <p>User experience is an important aspect of every web site and all web sites can benefit from effective caching and file size reduction. We have applied web site optimization methods typically used with high traffic sites and simplified their implementation. Coupling these methods either <a href="http://www.danga.com/memcached/" target="_blank">memcached</a> and/or <a href="http://pecl.php.net/package/APC" target="_blank"><acronym title="Alternative PHP Cache">APC</acronym></a> and the <acronym title="Content Delivery Network">CDN</acronym> of your choosing to provide the following benefits:</p>
4
- <ul>
5
- <li>Improved progressive render (non-blocking <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> embedding)</li>
6
- <li>Transparent content delivery network (<acronym title="Content Delivery Network">CDN</acronym>) support with automated media library import</li>
7
- <li>Bandwidth savings via Minify and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression (<acronym title="GNU zip">gzip</acronym> / deflate) for <acronym title="Hypertext Markup Language">HTML</acronym>, <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym></li>
8
- <li>Minification (concatenation, white space removal) of inline, external or 3rd party <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> with scheduled updates</li>
9
- <li>Caching of <acronym title="Really Simple Syndication">RSS</acronym>/Atom Feeds (comments, page and site), <acronym title="Uniform Resource Identifier">URI</acronym>s with query string variables (like search result pages), database objects, pages, posts, <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> in memory via <a href="http://pecl.php.net/apc">APC</a> or <a href="http://www.danga.com/memcached/">memcached</a> or both</li>
10
- <li>Increased web server concurrency and reduced resource consumption, increased scale</li>
11
- <li>Reduced <acronym title="Hypertext Transfer Protocol">HTTP</acronym> Transactions, <acronym title="Domain Name System">DNS</acronym> lookups, reduced document load time</li>
12
- <li>Complete header management including <a href="http://en.wikipedia.org/wiki/HTTP_ETag">Etags</a></li>
13
- <li>Optional embedding of <acronym title="JavaScript">JS</acronym> just above &lt;/body&gt;</li>
14
- </ul>
15
- <p>Your users have less data to download, you can now handle more requests with your existing equipment and you don't have to change how you do anything; just set it and forget it.</p>
16
- <p><strong>Who do I thank for all of this?</strong><br />
17
- It's quite difficult to recall all of the innovators that have shared their thoughts, code and experiences in the blogosphere over the years, but here are some names to get you started:</p>
18
- <ul>
19
- <li><a href="http://mrclay.org/" target="_blank">Steve Clay</a></li>
20
- <li><a href="http://wonko.com/" target="_blank">Ryan Grove</a></li>
21
- <li><a href="http://www.nczonline.net/blog/2009/06/23/loading-javascript-without-blocking/" target="_blank">Nicholas Zakas</a> </li>
22
- <li><a href="http://stevesouders.com/" target="_blank">Steve Souders</a></li>
23
- <li><a href="http://rtdean.livejournal.com/" target="_blank">Ryan Dean</a></li>
24
- <li><a href="http://gravitonic.com/" target="_blank">Andrei Zmievski</a></li>
25
- <li>George Schlossnagle</li>
26
- <li>Daniel Cowgill</li>
27
- <li><a href="http://toys.lerdorf.com/" target="_blank">Rasmus Lerdorf</a></li>
28
- <li><a href="http://t3.dotgnu.info/" target="_blank">Gopal Vijayaraghavan</a></li>
29
- </ul>
30
- <p>Please reach out to all of these people and support their projects if you're so inclined.</p>
31
  </div>
1
+ <div id="about">
2
+ <h3>About</h3>
3
+
4
+ <p>User experience is an important aspect of every web site and all web sites can benefit from effective caching and file size reduction. We have applied web site optimization methods typically used with high traffic sites and simplified their implementation. Coupling these methods either <a href="http://www.danga.com/memcached/" target="_blank">memcached</a> and/or <a href="http://pecl.php.net/package/APC" target="_blank"><acronym title="Alternative PHP Cache">APC</acronym></a> and the <acronym title="Content Delivery Network">CDN</acronym> of your choosing to provide the following benefits:</p>
5
+ <ul>
6
+ <li>Improved progressive render (non-blocking <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> embedding)</li>
7
+ <li>Transparent content delivery network (<acronym title="Content Delivery Network">CDN</acronym>) support with automated media library import</li>
8
+ <li>Bandwidth savings via Minify and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression (<acronym title="GNU zip">gzip</acronym> / deflate) for <acronym title="Hypertext Markup Language">HTML</acronym>, <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym></li>
9
+ <li>Minification (concatenation, white space removal) of inline, external or 3rd party <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> with scheduled updates</li>
10
+ <li>Caching of <acronym title="Really Simple Syndication">RSS</acronym>/Atom Feeds (comments, page and site), <acronym title="Uniform Resource Identifier">URI</acronym>s with query string variables (like search result pages), database objects, pages, posts, <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> in memory via <a href="http://pecl.php.net/apc">APC</a> or <a href="http://www.danga.com/memcached/">memcached</a> or both</li>
11
+ <li>Increased web server concurrency and reduced resource consumption, increased scale</li>
12
+ <li>Reduced <acronym title="Hypertext Transfer Protocol">HTTP</acronym> Transactions, <acronym title="Domain Name System">DNS</acronym> lookups, reduced document load time</li>
13
+ <li>Complete header management including <a href="http://en.wikipedia.org/wiki/HTTP_ETag">Etags</a></li>
14
+ <li>Optional embedding of <acronym title="JavaScript">JS</acronym> just above &lt;/body&gt;</li>
15
+ </ul>
16
+ <p>Your users have less data to download, you can now handle more requests with your existing equipment and you don't have to change how you do anything; just set it and forget it.</p>
17
+ <p><strong>Who do I thank for all of this?</strong><br />It's quite difficult to recall all of the innovators that have shared their thoughts, code and experiences in the blogosphere over the years, but here are some names to get you started:</p>
18
+ <ul>
19
+ <li><a href="http://mrclay.org/" target="_blank">Steve Clay</a></li>
20
+ <li><a href="http://wonko.com/" target="_blank">Ryan Grove</a></li>
21
+ <li><a href="http://www.nczonline.net/blog/2009/06/23/loading-javascript-without-blocking/" target="_blank">Nicholas Zakas</a> </li>
22
+ <li><a href="http://stevesouders.com/" target="_blank">Steve Souders</a></li>
23
+ <li><a href="http://rtdean.livejournal.com/" target="_blank">Ryan Dean</a></li>
24
+ <li><a href="http://gravitonic.com/" target="_blank">Andrei Zmievski</a></li>
25
+ <li>George Schlossnagle</li>
26
+ <li>Daniel Cowgill</li>
27
+ <li><a href="http://toys.lerdorf.com/" target="_blank">Rasmus Lerdorf</a></li>
28
+ <li><a href="http://t3.dotgnu.info/" target="_blank">Gopal Vijayaraghavan</a></li>
29
+ </ul>
30
+ <p>Please reach out to all of these people and support their projects if you're so inclined.</p>
31
  </div>
inc/options/cdn.phtml CHANGED
@@ -1,143 +1,155 @@
1
  <h3><acronym title="Content Delivery Network">CDN</acronym> Settings</h3>
2
- <div id="w3tc">
3
- <p><acronym title="Content Delivery Network">CDN</acronym> support is currently <span class="w3tc-<?php if ($config->get_boolean('cdn.enabled')): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
- <p>
6
- You can
7
- <input id="cdn_export_library" class="button" type="button" value="export media library to CDN" /> or
8
- <!--<input id="cdn_import_library" class="button" type="button" value="emport post files to media library &amp; CDN" /> or -->
9
- <input id="cdn_queue" class="button" type="button" value="view unsuccessfullt transfers" /> now.
10
- </p>
11
-
12
- <form action="options-general.php?page=<?php echo urldecode(W3_PLUGIN_FILE); ?>&amp;tab=<?php echo $tab; ?>" method="post">
13
- <!-- <p>
14
- <a href="#cdn_ftp" class="w3tc-tab" rel="#cdn_ftp"><acronym title="File Transfer Protocol">FTP</acronym> settings</a> |
15
- <a href="#cdn_cf" class="w3tc-tab" rel="#cdn_cf">Amazon CloudFront settings</a> |
16
- <a href="#cdn_s3" class="w3tc-tab" rel="#cdn_s3">Amazon S3 settings</a>
17
- </p> -->
18
-
19
- <div id="cdn_ftp" class="w3tc-tab-content">
20
- <table class="form-table">
21
- <tr>
22
- <th><label for="cdn_ftp_host"><acronym title="File Transfer Protocol">FTP</acronym> Hostname:</label></th>
23
- <td>
24
- <input id="cdn_ftp_host" type="text" name="cdn.ftp.host" value="<?php echo htmlspecialchars($config->get_string('cdn.ftp.host')); ?>" size="30" />
25
- </td>
26
- </tr>
27
- <tr>
28
- <th><label for="cdn_ftp_user"><acronym title="File Transfer Protocol">FTP</acronym> Username:</label></th>
29
- <td>
30
- <input id="cdn_ftp_user" type="text" name="cdn.ftp.user" value="<?php echo htmlspecialchars($config->get_string('cdn.ftp.user')); ?>" size="30" />
31
- </td>
32
- </tr>
33
- <tr>
34
- <th><label for="cdn_ftp_pass"><acronym title="File Transfer Protocol">FTP</acronym> Password:</label></th>
35
- <td>
36
- <input id="cdn_ftp_pass" type="text" name="cdn.ftp.pass" value="<?php echo htmlspecialchars($config->get_string('cdn.ftp.pass')); ?>" size="30" />
37
- </td>
38
- </tr>
39
- <tr>
40
- <th><label for="cdn_ftp_path"><acronym title="File Transfer Protocol">FTP</acronym> Path:</label></th>
41
- <td>
42
- <input id="cdn_ftp_path" type="text" name="cdn.ftp.path" value="<?php echo htmlspecialchars($config->get_string('cdn.ftp.path')); ?>" size="30" />
43
- </td>
44
- </tr>
45
- <tr>
46
- <th colspan="2">
47
- <input type="hidden" name="cdn.ftp.pasv" value="0" />
48
- <label><input type="checkbox" name="cdn.ftp.pasv" value="1"<?php checked($config->get_boolean('cdn.ftp.pasv')); ?> /> Use Passive <acronym title="File Transfer Protocol">FTP</acronym> Mode</label>
49
- </th>
50
- </tr>
51
- </table>
52
- <p>
53
- <input id="test_ftp" class="button" type="button" value="Test FTP server" /> <span id="test_ftp_status" class="w3tc-cdn-status w3tc-process"></span>
54
- </p>
55
- </div>
56
- <div id="cdn_cf" class="w3tc-tab-content" style="display: none;">
57
- to do...
58
- <p>
59
- <input class="button" type="button" value="Test CloudFront server" />
60
- </p>
61
- </div>
62
- <div id="cdn_s3" class="w3tc-tab-content" style="display: none;">
63
- to do...
64
- <p>
65
- <input class="button" type="button" value="Test S3 server" />
66
- </p>
67
- </div>
68
-
69
- <table class="form-table">
70
- <tr>
71
- <th style="width: 300px;"><label for="cdn_domain">Replace domain in <acronym title="Uniform Resource Locator">URL</acronym> with:</label></th>
72
- <td>
73
- <input id="cdn_domain" type="text" name="cdn.domain" value="<?php echo htmlspecialchars($config->get_string('cdn.domain')); ?>" size="40" />
74
- </td>
75
- </tr>
76
- <tr>
77
- <th><label for="cdn_limit_queue">Re-transfer cycle limit:</label></th>
78
- <td>
79
- <input id="cdn_limit_queue" type="text" name="cdn.limit.queue" value="<?php echo htmlspecialchars($config->get_integer('cdn.limit.queue')); ?>" size="10" /><br />
80
- <span class="description">Number of files processed per cycle.</span>
81
- </td>
82
- </tr>
83
- <tr>
84
- <th>
85
- <input type="hidden" name="cdn.process.includes" value="0" />
86
- <label><input type="checkbox" name="cdn.process.includes" value="1"<?php checked($config->get_boolean('cdn.process.includes')); ?> /> Host wp-includes/ files</label>
87
- </th>
88
- <td>
89
- <input class="button cdn_export" type="button" name="includes" value="Upload includes files" />
90
- </td>
91
- </tr>
92
- <tr>
93
- <th>
94
- <input type="hidden" name="cdn.process.theme" value="0" />
95
- <label><input type="checkbox" name="cdn.process.theme" value="1"<?php checked($config->get_boolean('cdn.process.theme')); ?> /> Host active theme files</label>
96
- </th>
97
- <td>
98
- <input class="button cdn_export" type="button" name="theme" value="Upload theme files" />
99
- </td>
100
- </tr>
101
- <tr>
102
- <th>
103
- <input type="hidden" name="cdn.process.minify" value="0" />
104
- <label><input type="checkbox" name="cdn.process.minify" value="1"<?php checked($config->get_boolean('cdn.process.minify')); ?> /> Host minified <acronym title="Cascading Style Sheets">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files</label>
105
- </th>
106
- <td>
107
- <input class="button cdn_export" type="button" name="minify" value="Upload minify files" />
108
- </td>
109
- </tr>
110
- <tr>
111
- <th>
112
- <input type="hidden" name="cdn.process.custom" value="0" />
113
- <label><input type="checkbox" name="cdn.process.custom" value="1"<?php checked($config->get_boolean('cdn.process.custom')); ?> /> Host custom files</label>
114
- </th>
115
- <td>
116
- <input class="button cdn_export" type="button" name="custom" value="Upload custom files" />
117
- </td>
118
- </tr>
119
- <tr>
120
- <th><label for="cdn_files_includes">Search wp-includes/ directory for files:</label></th>
121
- <td>
122
- <input id="cdn_files_includes" type="text" name="cdn.files.includes" value="<?php echo htmlspecialchars($config->get_string('cdn.files.includes')); ?>" size="40" />
123
- </td>
124
- </tr>
125
- <tr>
126
- <th><label for="cdn_files_theme">Search current theme directory for files:</label></th>
127
- <td>
128
- <input id="cdn_files_theme" type="text" name="cdn.files.theme" value="<?php echo htmlspecialchars($config->get_string('cdn.files.theme')); ?>" size="40" />
129
- </td>
130
- </tr>
131
- <tr>
132
- <th valign="top"><label for="cdn_files_custom">Custom file list:</label></th>
133
- <td>
134
- <textarea id="cdn_files_custom" name="cdn.files.custom" cols="30" rows="5"><?php echo htmlspecialchars(implode("\r\n", $config->get_array('cdn.files.custom'))); ?></textarea>
135
- </td>
136
- </tr>
137
- </table>
138
-
139
- <p class="submit">
140
- <input type="submit" name="Submit" class="button-primary" value="Save changes" />
141
- </p>
142
- </form>
143
- </div>
1
  <h3><acronym title="Content Delivery Network">CDN</acronym> Settings</h3>
2
+
3
+ <p><acronym title="Content Delivery Network">CDN</acronym> support is currently <span class="w3tc-<?php if ($config->get_boolean('cdn.enabled')): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.</p>
4
+
5
+ <p>
6
+ You can
7
+ <input id="cdn_export_library" class="button" type="button" value="export media library to CDN" /> or
8
+ <input id="cdn_import_library" class="button" type="button" value="import post files to media library &amp; CDN" /> or
9
+ <input id="cdn_queue" class="button" type="button" value="view unsuccessfull transfers" /> now.
10
+ </p>
11
+
12
+ <form action="options-general.php?page=<?php echo urldecode(W3_PLUGIN_FILE); ?>&amp;tab=<?php echo $tab; ?>" method="post">
13
+
14
+ <!-- <p>
15
+ <a href="#cdn_ftp" class="w3tc-tab" rel="#cdn_ftp"><acronym title="File Transfer Protocol">FTP</acronym> settings</a> |
16
+ <a href="#cdn_cf" class="w3tc-tab" rel="#cdn_cf">Amazon CloudFront settings</a> |
17
+ <a href="#cdn_s3" class="w3tc-tab" rel="#cdn_s3">Amazon S3 settings</a>
18
+ </p> -->
19
 
20
+ <div id="cdn_ftp" class="w3tc-tab-content">
21
+ <table class="form-table">
22
+ <tr>
23
+ <th><label for="cdn_ftp_host"><acronym title="File Transfer Protocol">FTP</acronym> Hostname:</label></th>
24
+ <td>
25
+ <input id="cdn_ftp_host" type="text" name="cdn.ftp.host" value="<?php echo htmlspecialchars($config->get_string('cdn.ftp.host')); ?>" size="30" />
26
+ </td>
27
+ </tr>
28
+ <tr>
29
+ <th><label for="cdn_ftp_user"><acronym title="File Transfer Protocol">FTP</acronym> Username:</label></th>
30
+ <td>
31
+ <input id="cdn_ftp_user" type="text" name="cdn.ftp.user" value="<?php echo htmlspecialchars($config->get_string('cdn.ftp.user')); ?>" size="30" />
32
+ </td>
33
+ </tr>
34
+ <tr>
35
+ <th><label for="cdn_ftp_pass"><acronym title="File Transfer Protocol">FTP</acronym> Password:</label></th>
36
+ <td>
37
+ <input id="cdn_ftp_pass" type="text" name="cdn.ftp.pass" value="<?php echo htmlspecialchars($config->get_string('cdn.ftp.pass')); ?>" size="30" />
38
+ </td>
39
+ </tr>
40
+ <tr>
41
+ <th><label for="cdn_ftp_path"><acronym title="File Transfer Protocol">FTP</acronym> Path:</label></th>
42
+ <td>
43
+ <input id="cdn_ftp_path" type="text" name="cdn.ftp.path" value="<?php echo htmlspecialchars($config->get_string('cdn.ftp.path')); ?>" size="30" />
44
+ </td>
45
+ </tr>
46
+ <tr>
47
+ <th colspan="2">
48
+ <input type="hidden" name="cdn.ftp.pasv" value="0" />
49
+ <label><input type="checkbox" name="cdn.ftp.pasv" value="1"<?php checked($config->get_boolean('cdn.ftp.pasv')); ?> /> Use Passive <acronym title="File Transfer Protocol">FTP</acronym> Mode</label>
50
+ </th>
51
+ </tr>
52
+ </table>
53
+ <p>
54
+ <input id="test_ftp" class="button" type="button" value="Test FTP server" /> <span id="test_ftp_status" class="w3tc-cdn-status w3tc-process"></span>
55
+ </p>
56
+ </div>
57
+ <div id="cdn_cf" class="w3tc-tab-content" style="display: none;">
58
+ to do...
59
+ <p>
60
+ <input class="button" type="button" value="Test CloudFront server" />
61
+ </p>
62
+ </div>
63
+ <div id="cdn_s3" class="w3tc-tab-content" style="display: none;">
64
+ to do...
65
+ <p>
66
+ <input class="button" type="button" value="Test S3 server" />
67
+ </p>
68
+ </div>
69
+
70
+ <table class="form-table">
71
+ <tr>
72
+ <th style="width: 300px;"><label for="cdn_domain">Replace domain in <acronym title="Uniform Resource Locator">URL</acronym> with:</label></th>
73
+ <td>
74
+ <input id="cdn_domain" type="text" name="cdn.domain" value="<?php echo htmlspecialchars($config->get_string('cdn.domain')); ?>" size="40" />
75
+ </td>
76
+ </tr>
77
+ <tr>
78
+ <th><label for="cdn_limit_queue">Re-transfer cycle limit:</label></th>
79
+ <td>
80
+ <input id="cdn_limit_queue" type="text" name="cdn.limit.queue" value="<?php echo htmlspecialchars($config->get_integer('cdn.limit.queue')); ?>" size="10" /><br />
81
+ <span class="description">Number of files processed per cycle.</span>
82
+ </td>
83
+ </tr>
84
+ <tr>
85
+ <th>
86
+ <input type="hidden" name="cdn.includes.enable" value="0" />
87
+ <label><input type="checkbox" name="cdn.includes.enable" value="1"<?php checked($config->get_boolean('cdn.includes.enable')); ?> /> Host wp-includes/ files</label>
88
+ </th>
89
+ <td>
90
+ <input class="button cdn_export" type="button" name="includes" value="Upload includes files" />
91
+ </td>
92
+ </tr>
93
+ <tr>
94
+ <th>
95
+ <input type="hidden" name="cdn.theme.enable" value="0" />
96
+ <label><input type="checkbox" name="cdn.theme.enable" value="1"<?php checked($config->get_boolean('cdn.theme.enable')); ?> /> Host active theme files</label>
97
+ </th>
98
+ <td>
99
+ <input class="button cdn_export" type="button" name="theme" value="Upload theme files" />
100
+ </td>
101
+ </tr>
102
+ <tr>
103
+ <th>
104
+ <input type="hidden" name="cdn.minify.enable" value="0" />
105
+ <label><input type="checkbox" name="cdn.minify.enable" value="1"<?php checked($config->get_boolean('cdn.minify.enable')); ?> /> Host minified <acronym title="Cascading Style Sheets">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files</label>
106
+ </th>
107
+ <td>
108
+ <input class="button cdn_export" type="button" name="minify" value="Upload minify files" />
109
+ </td>
110
+ </tr>
111
+ <tr>
112
+ <th>
113
+ <input type="hidden" name="cdn.custom.enable" value="0" />
114
+ <label><input type="checkbox" name="cdn.custom.enable" value="1"<?php checked($config->get_boolean('cdn.custom.enable')); ?> /> Host custom files</label>
115
+ </th>
116
+ <td>
117
+ <input class="button cdn_export" type="button" name="custom" value="Upload custom files" />
118
+ </td>
119
+ </tr>
120
+ <tr>
121
+ <th><label for="cdn_includes_files">Search wp-includes/ directory for files:</label></th>
122
+ <td>
123
+ <input id="cdn_includes_files" type="text" name="cdn.includes.files" value="<?php echo htmlspecialchars($config->get_string('cdn.includes.files')); ?>" size="40" />
124
+ </td>
125
+ </tr>
126
+ <tr>
127
+ <th><label for="cdn_theme_files">Search current theme directory for files:</label></th>
128
+ <td>
129
+ <input id="cdn_theme_files" type="text" name="cdn.theme.files" value="<?php echo htmlspecialchars($config->get_string('cdn.theme.files')); ?>" size="40" />
130
+ </td>
131
+ </tr>
132
+ <tr>
133
+ <th valign="top"><label for="cdn_custom_files">Custom file list:</label></th>
134
+ <td>
135
+ <textarea id="cdn_custom_files" name="cdn.custom.files" cols="30" rows="5"><?php echo htmlspecialchars(implode("\r\n", $config->get_array('cdn.custom.files'))); ?></textarea>
136
+ </td>
137
+ </tr>
138
+ <tr>
139
+ <th colspan="2">
140
+ <input type="hidden" name="cdn.import.external" value="0" />
141
+ <label><input type="checkbox" name="cdn.import.external" value="1"<?php checked($config->get_boolean('cdn.import.external')); ?> /> Import external files</label>
142
+ </th>
143
+ </tr>
144
+ <tr>
145
+ <th><label for="cdn_import_files">Import files:</label></th>
146
+ <td>
147
+ <input id="cdn_import_files" type="text" name="cdn.import.files" value="<?php echo htmlspecialchars($config->get_string('cdn.import.files')); ?>" size="40" />
148
+ </td>
149
+ </tr>
150
+ </table>
151
+
152
+ <p class="submit">
153
+ <input type="submit" name="Submit" class="button-primary" value="Save changes" />
154
+ </p>
155
+ </form>
 
 
 
inc/options/common/footer.phtml CHANGED
@@ -1 +1 @@
1
- </div>
1
+ </div>
inc/options/common/header.phtml CHANGED
@@ -1,31 +1,31 @@
1
- <div class="wrap">
2
- <?php screen_icon('w3tc-logo'); ?>
3
-
4
- <h2>W3 Total Cache</h2>
5
-
6
- <?php if (count($errors)): ?>
7
- <div id="message" class="error">
8
- <?php foreach ($errors as $error): ?>
9
- <p><?php echo $error; ?></p>
10
- <?php endforeach; ?>
11
- </div>
12
- <?php endif; ?>
13
-
14
- <?php if (count($notes)): ?>
15
- <div id="message" class="updated fade">
16
- <?php foreach ($notes as $note): ?>
17
- <p><?php echo $note; ?></p>
18
- <?php endforeach; ?>
19
- </div>
20
- <?php endif; ?>
21
-
22
- <p id="w3tc-options-menu">
23
- <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=general"<?php if ($tab == 'general'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>General Settings</a> |
24
- <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=pgcache"<?php if ($tab == 'pgcache'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Page Cache Settings</a> |
25
- <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=minify"<?php if ($tab == 'minify'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Minify Settings</a> |
26
- <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=dbcache"<?php if ($tab == 'dbcache'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Database Cache Settings</a> |
27
- <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=cdn"<?php if ($tab == 'cdn'): ?> class="w3tc-options-menu-selected"<?php endif; ?>><acronym title="Content Delivery Network">CDN</acronym> Settings</a> |
28
- <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=faq"<?php if ($tab == 'faq'): ?> class="w3tc-options-menu-selected"<?php endif; ?>><acronym title="Frequently Asked Questions">FAQ</acronym></a> |
29
- <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=install"<?php if ($tab == 'install'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Installation</a> |
30
- <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=about"<?php if ($tab == 'about'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>About</a>
31
- </p>
1
+ <div class="wrap" id="w3tc">
2
+ <?php screen_icon('w3tc-logo'); ?>
3
+
4
+ <h2>W3 Total Cache</h2>
5
+
6
+ <?php if (count($errors)): ?>
7
+ <div id="message" class="error">
8
+ <?php foreach ($errors as $error): ?>
9
+ <p><?php echo $error; ?></p>
10
+ <?php endforeach; ?>
11
+ </div>
12
+ <?php endif; ?>
13
+
14
+ <?php if (count($notes)): ?>
15
+ <div id="message" class="updated fade">
16
+ <?php foreach ($notes as $note): ?>
17
+ <p><?php echo $note; ?></p>
18
+ <?php endforeach; ?>
19
+ </div>
20
+ <?php endif; ?>
21
+
22
+ <p id="w3tc-options-menu">
23
+ <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=general"<?php if ($tab == 'general'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>General Settings</a> |
24
+ <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=pgcache"<?php if ($tab == 'pgcache'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Page Cache Settings</a> |
25
+ <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=minify"<?php if ($tab == 'minify'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Minify Settings</a> |
26
+ <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=dbcache"<?php if ($tab == 'dbcache'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Database Cache Settings</a> |
27
+ <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=cdn"<?php if ($tab == 'cdn'): ?> class="w3tc-options-menu-selected"<?php endif; ?>><acronym title="Content Delivery Network">CDN</acronym> Settings</a> |
28
+ <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=faq"<?php if ($tab == 'faq'): ?> class="w3tc-options-menu-selected"<?php endif; ?>><acronym title="Frequently Asked Questions">FAQ</acronym></a> |
29
+ <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=install"<?php if ($tab == 'install'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>Installation</a> |
30
+ <a href="?page=<?php echo W3_PLUGIN_FILE; ?>&amp;tab=about"<?php if ($tab == 'about'): ?> class="w3tc-options-menu-selected"<?php endif; ?>>About</a>
31
+ </p>
inc/options/dbcache.phtml CHANGED
@@ -1,24 +1,23 @@
1
  <h3>Database Caching Settings</h3>
2
- <div id="w3tc">
3
- <p>Database caching is currently <span class="w3tc-<?php if ($config->get_boolean('dbcache.enabled')): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.</p>
4
-
5
- <form action="options-general.php?page=<?php echo urldecode(W3_PLUGIN_FILE); ?>&amp;tab=<?php echo $tab; ?>" method="post">
6
- <table class="form-table">
7
- <tr>
8
- <th style="width: 250px;"><label for="dbcache_memcached_servers">Memcached Hostname:Port / IP:Port:</label></th>
9
- <td>
10
- <input id="dbcache_memcached_servers" type="text" name="dbcache.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $config->get_array('dbcache.memcached.servers'))); ?>" size="100" /><br />
11
- <span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
12
- </td>
13
- </tr>
14
- <tr>
15
- <th><label for="dbcache_lifetime_default">Maximum lifetime of cache objects:</label></th>
16
- <td><input id="dbcache_lifetime_default" type="text" name="dbcache.lifetime.default" value="<?php echo $config->get_integer('dbcache.lifetime.default'); ?>" size="8" /> seconds</td>
17
- </tr>
18
- </table>
19
-
20
- <p class="submit">
21
- <input type="submit" name="Submit" class="button-primary" value="Save changes" />
22
- </p>
23
- </form>
24
- </div>
1
  <h3>Database Caching Settings</h3>
2
+
3
+ <p>Database caching is currently <span class="w3tc-<?php if ($config->get_boolean('dbcache.enabled')): ?>enabled">enabled<?php else: ?>disabled">disabled<?php endif; ?></span>.</p>
4
+
5
+ <form action="options-general.php?page=<?php echo urldecode(W3_PLUGIN_FILE); ?>&amp;tab=<?php echo $tab; ?>" method="post">
6
+ <table class="form-table">
7
+ <tr>
8
+ <th style="width: 250px;"><label for="dbcache_memcached_servers">Memcached Hostname:Port / IP:Port:</label></th>
9
+ <td>
10
+ <input id="dbcache_memcached_servers" type="text" name="dbcache.memcached.servers" value="<?php echo htmlspecialchars(implode(',', $config->get_array('dbcache.memcached.servers'))); ?>" size="100"<?php if ($config->get_string('dbcache.engine', 'memcached') != 'memcached'): ?> disabled="disabled"<?php endif; ?> /><br />
11
+ <span class="description">Multiple servers may be used and seperated by a comma; e.g. 192.168.1.100:11211, domain.com:22122</span>
12
+ </td>
13
+ </tr>
14
+ <tr>
15
+ <th><label for="dbcache_lifetime_default">Maximum lifetime of cache objects:</label></th>
16
+ <td><input id="dbcache_lifetime_default" type="text" name="dbcache.lifetime.default" value="<?php echo $config->get_integer('dbcache.lifetime.default'); ?>" size="8" /> seconds</td>
17
+ </tr>
18
+ </table>
19
+
20
+ <p class="submit">
21
+ <input type="submit" name="Submit" class="button-primary" value="Save changes" />
22
+ </p>
23
+ </form>
 
inc/options/faq.phtml CHANGED
@@ -1,483 +1,478 @@
1
- <h3 id="fqq"><acronym title="Frequently Asked Questions">FAQ</acronym></h3>
2
- <div id="frequently-asked-questions" class="w3tc">
3
- <h4>Table of Contents</h4>
4
- <div id="toc">
5
- <ul>
6
- <li class="col">
7
- <h5>GENERAL:</h5>
8
- <ul>
9
- <li><a href="#q1">Who is this plugin for?</a></li>
10
- <li><a href="#q2">Umm, why?</a></li>
11
- <li><a href="#q3">So give me the skinny, what are the highlights?</a></li>
12
- <li><a href="#q4">I've never heard of any of this stuff; my blog is fine, no one complains about the speed. Why should I install this?</a></li>
13
- <li><a href="#q5">But even Matt Mullenweg doesn't agree that additional caching is so important, why bother?</a></li>
14
- <li><a href="#q6">And how many years of university do I need to use this thing?</a></li>
15
- <li><a href="#q7">Ok, so the benefits are clear. What exactly is so special about *how* this plugin works?</a></li>
16
- <li><a href="#q8">Why would I want to cache my feeds?</a></li>
17
- <li><a href="#q9">Why would I want to put my <acronym title="JavaScript">JS</acronym> at the bottom of the page?</a></li>
18
- <li><a href="#q10">What's an Etag and why do I need one?</a></li>
19
- <li><a href="#q11">So let me get this straight; you're telling me this plugin is designed to improve performance of any WordPress blog?</a></li>
20
- <li><a href="#q12">This is too good to be true, how can I test the results?</a></li>
21
- <li><a href="#q13">Does this plugin work with WordPress <acronym title="Multi-User">MU</acronym>?</a></li>
22
- <li><a href="#q14">Does this plugin work with BuddyPress (bbPress)?</a></li>
23
- <li><a href="#q15">Which WordPress versions are supported?</a></li>
24
- <li><a href="#q16">I understand the database caching and the page caching, but what's minify all about?</a></li>
25
- <li><a href="#q17">What do you use to minify?</a></li>
26
- <li><a href="#q18">What's the point of downloading and caching 3rd party files (e.g. <acronym title="JavaScript">JS</acronym>)?</a></li>
27
- <li><a href="#q19">Will you support other memory or opcode caches</a>?</li>
28
- <li><a href="#q20">Will this plugin break my theme by changing the order of conditional statements or the like?</a></li>
29
- <li><a href="#q21">Will this speed up <acronym title="WordPress">WP</acronym> Admin?</a></li>
30
- <li><a href="#q22">Does this plugin modify how the WordPress core works?</a></li>
31
- <li><a href="#q23">Does it really matter if I remove the line breaks from my code?</a></li>
32
- <li><a href="#q24">What's the benefit of removing <acronym title="Hypertext Markup Language">HTML</acronym> comments from my code?</a></li>
33
- <li><a href="#q25">Why is &lt;link&gt; used to embed <acronym title="Cascading Style Sheet">CSS</acronym> instead of &lt;style&gt;?</a></li>
34
- <li><a href="#q26">Why do I care of <acronym title="JavaScript">JS</acronym> or <acronym title="Cascading Style Sheet">CSS</acronym> is "blocking" or not?</a></li>
35
- <li><a href="#q27">What does this plugin do to inline <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym>?</a></li>
36
- <li><a href="#q28">Ok I get it, this all sounds nice and everything, but is this perfect?</a></li>
37
- <li><a href="#q29">Seriously, tell me what the downside is, there must be something?</a></li>
38
- <li><a href="#q30">If this plugin does everything you claim, why would you give it away free? Cui Bono?</a></li>
39
- <li><a href="#q31">Who in the world uses memcached or <acronym title="Alternative PHP Cache">APC</acronym> etc anyway?</a></li>
40
- <li><a href="#q32">I don't understand what a <acronym title="Content Delivery Network">CDN</acronym> has to do with caching, that's completely different, no?</a></li>
41
- <li><a href="#q33">We run many blogs on many servers here at my company, is this plugin still for me?</a></li>
42
- <li><a href="#q34">So you appear to know what you're talking about, will there be any negative effect on my SEO rankings?</a></li>
43
- <li><a href="#q35">Will the plugin interfere with other plugins or widgets?</a></li>
44
- <li><a href="#q36">What about my robots.txt, sitemap.xml and all my site verification files etc, what happens with those?</a></li>
45
- <li><a href="#q37">Do you have any tricks for "post-loading", "lazy-loading" and other render optimizations in this plugin?</a></li>
46
- <li><a href="#q38">I want to obfuscate my <acronym title="JavaScript">JS</acronym>, does the plugin do that? Will it ever?</a></li>
47
- <li><a href="#q39">Can I use packed or obfuscated <acronym title="JavaScript">JS</acronym> with this plugin?</a></li>
48
- <li><a href="#q40">I have some ideas for more features, can I write my own add-ons for your plugin?</a></li>
49
- <li><a href="#q41">Who do I thank for all of this?</a></li>
50
- </ul>
51
- </li>
52
- <li class="col">
53
- <h5>USAGE:</h5>
54
- <ul>
55
- <li><a href="#q42">So how do I find the <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> to optimize them with this plugin?</a></li>
56
- <li><a href="#q43">I've used the plugin to optimize all my theme's <acronym title="JavaScript">JS</acronym> and plugins <acronym title="JavaScript">JS</acronym>, but there are some function calls, where do those go?</a></li>
57
- <li><a href="#q44">Can I use scripts that generate <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> with this plugin?</a></li>
58
- <li><a href="#q45">In the past, I always had to modify my theme to run dynamic code. Don't I need to do that again for this plugin?</a></li>
59
- <li><a href="#q46">How fast will the cache be updated?</a></li>
60
- <li><a href="#q47">How do I make some specific pages stay dynamic?</a></li>
61
- <li><a href="#q48">What about comments? Does the plugin slow down the rate at which comments appear?</a></li>
62
- <li><a href="#q49">What if I accidentally specify an incorrect path to a <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> file?</a></li>
63
- <li><a href="#q50">Does the plugin automatically remove duplicate <acronym title="JavaScript">JS</acronym>?</a></li>
64
- <li><a href="#q51">I've been using the plugin for some time, I updated one of my other plugins and now it doesn't work anymore. What's up?</a></li>
65
- <!--<li><a href="#q52">I have some <acronym title="Cascading Style Sheet">CSS</acronym> classes with declarations being overwritten or <acronym title="JavaScript">JS</acronym> with dependencies, do I really have to copy and paste all my <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> file settings around?</a></li>-->
66
- <li><a href="#q53">Why does your plugin change the order of my &lt;script&gt; and &lt;link&gt; tags (in the &lt;head&gt;)?</a></li>
67
- <li><a href="#q54">I can't read this minified <acronym title="Hypertext Markup Language">HTML</acronym>; can you give me a break please?</a></li>
68
- <li><a href="#q55">When are you going to translate this plugin into more languages?</a></li>
69
- <li><a href="#q56">I'm not a hardcore developer, can you explain to me how this // and / stuff works and how I should specify the paths for <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files?</a></li>
70
- <li><a href="#q57">What about Etags?</a></li>
71
- <li><a href="#q58">Which encodings do you support?</a></li>
72
- <li><a href="#q59">What's this thing doing? Where are the statistics?</a></li>
73
- <li><a href="#q60">How can I tell if it's working? Aren't there any statistics at all?</a></li>
74
- <li><a href="#q61">I'm an advanced theme developer and I want to have different combinations of <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> files on different types of pages in my theme; how is this done?</a></li>
75
- <li><a href="#q62">Which features can I use if I haven't yet installed <acronym title="Alternative PHP Cache">APC</acronym> or memcached?</a></li>
76
- <li><a href="#q63">How can I serve my favicon from the <acronym title="Content Delivery Network">CDN</acronym>?</a></li>
77
- <li><a href="#q64">Why do you set the value of the media attribute of &lt;link&gt; to all?</a></li>
78
- <li><a href="#q65">Why can't I specify other &lt;script&gt; types or encoding?</a></li>
79
- <li><a href="#q66">My theme doesn't call wp_head() or wp_footer(), how do I set this plugin up?</a></li>
80
- <li><a href="#q67">Is this plugin compatible with other popular caching plugins?</a></li>
81
- <li><a href="#q68">Some WordPress caching plugins fail when markup is not well-formed, is this plugin similar?</a></li>
82
- <li><a href="#q69">Won't various 3rd parties who's <acronym title="JavaScript">JS</acronym> I download and cache be concerned?</a></li>
83
- <li><a href="#q70">Google already minified and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compressed jQuery (and other libraries ) for me, why can't I just use their bandwidth and embed other code after it?</a></li>
84
- <li><a href="#q71">I wanted to use a different version jQuery with my theme, how do I replace WordPress' jQuery with Google's minified version using your plugin?</a></li>
85
- <li><a href="#q72">What about the wp-includes files, can those be served from the <acronym title="Content Delivery Network">CDN</acronym>?</a></li>
86
- <li><a href="#q73">What if I don't want to work with a <acronym title="Content Delivery Network">CDN</acronym> right now, is there any other use for this feature?</a></li>
87
- <li><a href="#q74">Are minified files uploaded to my <acronym title="Content Delivery Network">CDN</acronym> provider?</a></li>
88
- <li><a href="#q75">Who do you recommend as a <acronym title="Content Delivery Network">CDN</acronym> provider?</a></li>
89
- <li><a href="#q76">Hang on, don't I need to modify my <acronym title="Cascading Style Sheet">CSS</acronym> files so they'll work on the <acronym title="Content Delivery Network">CDN</acronym>?</a></li>
90
- <li><a href="#q77">I don't have time to deal with this, but I know I need it. Will you help me?</a></li>
91
- </ul>
92
- </li>
93
- <li class="col">
94
- <h5>WEB HOSTING &amp; REQUIREMENTS:</h5>
95
- <ul>
96
- <li><a href="#q78">Which web servers do you support?</a></li>
97
- <li><a href="#q79">Do I need to enable mod_gzip, mod_rewrite or install any <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression software on my server?</a></li>
98
- <li><a href="#q80">Is this plugin compatible with varnish or squid?</a></li>
99
- <li><a href="#q81">My server is state of the art with 15,000 <acronym title="Rotations per Minute">RPM</acronym> <acronym title="Redundant Array of Independent Disks">RAID</acronym>, why do I need to cache anything in memory?</a></li>
100
- <li><a href="#q82">Why would I choose <acronym title="Alternative PHP Cache">APC</acronym> over memcached or vice versa?</a></li>
101
- <li><a href="#q83">I already use <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression on my server, why does it matter if I minify my code?</a></li>
102
- <li><a href="#q84">How much memory (<acronym title="Random Access Memory">RAM</acronym>) do I need to delegate to caching?</a></li>
103
- <li><a href="#q85">What version of <acronym title="Hypertext Preprocessor">PHP</acronym> do I need for this thing?</a></li>
104
- <li><a href="#q86">What version of mySQL is needed?</a></li>
105
- <li><a href="#q87">And I need mod_rewrite (or equivalent for my web server) installed too, no?</a></li>
106
- <li><a href="#q88">How much hardware do I have to throw at something like this before I see a benefit?</a></li>
107
- <li><a href="#q89">Is this plugin server cluster and load balancer friendly?</a></li>
108
- <li><a href="#q90">I'm a web hosting provider and I heard about this plugin from my clients, is this plugin safe for a shared hosting environment?</a></li>
109
- <li><a href="#q91">What is the intended impact of this plugin on the web hosting landscape?</a></li>
110
- </ul>
111
- </li>
112
- </ul>
113
- </div>
114
- <div id="qa">
115
- <hr />
116
- <p id="q1"><strong>Who is this plugin for?</strong><br />
117
- Anyone that wants to provide an optimal user experience to their readers.</p>
118
- <p align="right"><a href="#toc">back to top</a></p>
119
- <p id="q2"><strong>Umm, why?</strong><br />
120
- We needed an elegant remedy to common performance issues we spent countless hours addressing on various blogs we work with. They all suffered from similar issues and we found that same remedies would sort all of them. Issues like <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transaction reduction, object size reduction and blocking objects are performance killers and have been remedied with this plugin. Rather than release our various plugins individually (and support them independently) we saw an opportunity to demonstrate how all of this functionality is intertwined and combines to realize far more than the sum of its parts.</p>
121
- <p>One of the WordPress community's strengths is also its weakness; we found that numerous plugins are very handy and save some development time in a pinch, but the maintenance and performance penalties blogs suffer from as a result contribute to a poor user experience, which is never acceptable.</p>
122
- <p>Experience has shown that fast loading web sites have (at least) the following characteristics:</p>
123
- <ul>
124
- <li>Reduced <a href="http://en.wikipedia.org/wiki/Customer_attrition" target="_blank">attrition</a></li>
125
- <li>Higher conversion rates for e-commerce / affiliate etc sites</li>
126
- <li>Increased time on site /more page views per visitor</li>
127
- </ul>
128
- <p><em>In fact, if wordpress.com (for example) applied some of the techniques used in this plugin, we imagine they'd realize ~10% performance improvement on the <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> and <acronym title="Hypertext Markup Language">HTML</acronym> (respectively) on the millions of blogs they host.</em></p>
 
129
  <p>As a practical matter, Akamai and JupiterResearch did a study on <a href="http://www.akamai.com/html/about/press/releases/2006/press_110606.html" target="_blank">acceptable wait time for retail web sites</a> to load back in late 2006 concluding that users may leave after 4 seconds of waiting. That was several years ago now, even before 3G was available for mobile devices, what do you think web users expect today? <a href="http://blogs.zdnet.com/BTL/?p=3925" target="_blank">According to Marissa Mayer</a> of Google, as she stated the same year as Akamai, improving the speed of sites/applications reduces the learning curve for applications and contributes to higher use. It's time to bring the performance major corporations enjoy to the blogosphere.</p>
130
- <p>As an aside, don't you think your site's <acronym title="Key Performance Indicators">KPI</acronym> would be more meaningful if you could be confident that all users were having the exact same performance experience with your site? It's too early to say for sure, but we feel that the statistics and metrics we all use to track our progress and results will be more realistic when W3 Total Cache is actively removing bottlenecks from our blogs.</p>
131
- <p><a href="mailto:wordpressexperts@w3-edge.com">Please let us know</a> what kind of mileage you have.</p>
132
- <p align="right"><a href="#toc">back to top</a></p>
133
- <p id="q3"><strong>So give me the skinny, what are the highlights?</strong><br />
134
- W3 Total Cache is a suite of functionality designed to optimize the performance of all WordPress blogs. Features and benefits include:</p>
135
- <ul>
136
- <li>Improved progressive render (non-blocking <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> embedding)</li>
137
- <li>Reduced <acronym title="Hypertext Transfer Protocol">HTTP</acronym> Transactions, <acronym title="Domain Name System">DNS</acronym> lookups, reduced document load time</li>
138
- <li>Transparent content delivery network (<acronym title="Content Delivery Network">CDN</acronym>) support with automated media library import</li>
139
  <li>Bandwidth savings via <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression (<acronym title="GNU zip">gzip</acronym> / deflate) for <acronym title="Hypertext Markup Language">HTML</acronym>, <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym></li>
140
- <li>Minification (concatenation, white space removal) of inline, external or 3rd party <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> with scheduled updates</li>
141
- <li>Optional embedding of <acronym title="JavaScript">JS</acronym> just above &lt;/body&gt;</li>
142
  <li>Support for caching pages, posts, feeds, database objects, <acronym title="Cascading Style Sheet">CSS</acronym>, <acronym title="JavaScript">JS</acronym> in memory with <acronym title="Alternative PHP Cache">APC</acronym> or memcached or both</li>
143
- <li>Caching of RSS/Atom Feeds (Comments, Page and site), URIs with query string variables (like search result pages), Database queries, Pages, Posts, <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym></li>
144
- <li>Complete header management including Etags</li>
145
- <li>Increased web server concurrency and reduced resource consumption, increased scale</li>
146
- </ul>
147
- <p>In essence, anything that can be automated to squeeze out every bit of server performance and minimize bandwidth utilization has been done, leaving your readers with an optimized user experience.</p>
148
- <p align="right"><a href="#toc">back to top</a></p>
149
- <p id="q4"><strong>I've never heard of any of this stuff; my blog is fine, no one complains about the speed. Why should I install this?<br />
150
- </strong>Rarely do readers take the time to complain. They typically just stop browsing earlier than you'd prefer and may not return altogether. It's in every web site owner's best interest is to make sure that the performance of your blog is not hindering its success.</p>
151
- <p align="right"><a href="#toc">back to top</a></p>
152
- <p id="q5"><strong>But even Matt Mullenweg doesn't agree that additional caching is so important, why bother?</strong><br />
153
- You're right, <a href="http://ma.tt/2008/03/wordpress-is-open-source/#comment-439787" target="_blank">Matt did say that</a>. However, this plugin provides more than just "caching". Because he is correct, the web is dynamic and must remain so. But as we explain throughout this FAQ, our goal is to improve the performance of any blog. Furthermore, some techniques we use are well documented from past <a href="http://www.slideshare.net/bazza/high-performance-wordpress" target="_blank">WordCamp presentations</a>; we combined them in a way that we have found stands up to the highest traffic spikes.</p>
154
- <p align="right"><a href="#toc">back to top</a></p>
155
- <p id="q6"><strong>And how many years of university do I need to use this thing?</strong><br />
156
- -4 &mdash; That's right; a youngster in junior high school can get started with this plugin. Seriously, if you did your own WordPress install or have ever installed a plugin before you're in good shape. If you need help, <a href="mailto:wordpressexperts@w3-edge.com">let us know</a> or perhaps we'll make some videos or the like.</p>
157
- <p align="right"><a href="#toc">back to top</a></p>
158
- <p id="q7"><strong>Ok, so the benefits are clear. What exactly is so special about *how* this plugin works?</strong><br />
159
- Thanks for asking. We just decided not try to use the typical WordPress hooks and methodologies to implement our features, instead we take the normal output and perform optimizations to it before we send it to the user agent using a method they support and then cache the result afterwards. This concept is applied to objects you decide to cache.</p>
160
- <p align="right"><a href="#toc">back to top</a></p>
161
- <p id="q8"><strong>Why would I want to cache my feeds?</strong><br />
162
- We feel that caching objects after the first request and checking for updates before responding subsequent requests (which is kind of how web browsers work too) creates more opportunities for interesting applications and mashups where the blogosphere doesn't require institutional investment to be able to handle developers making hundreds of requests every day the same way we use Google, Twitter and Facebook (for example) APIs today. Think about it, even when major search engines crawl your site, they have to be "gentle" so they don't bring it down, let's turn the paradigm around so that every blog can deliver content in real-time in various formats.</p>
163
- <p align="right"><a href="#toc">back to top</a></p>
164
- <p id="q9"><strong>Why would I want to put my <acronym title="JavaScript">JS</acronym> at the bottom of the page?</strong><br />
165
- First let me point out that in many cases we suggest putting all the <acronym title="JavaScript">JS</acronym> that's not required for interactivity with your site at the bottom of the document. Anything <acronym title="JavaScript">JS</acronym> that makes the site work as intended we suggested embedding in the &lt;head&gt;. Depending on your specific situation, having the majority of your <acronym title="JavaScript">JS</acronym> at the bottom of the document will mean that your visitors won't have to download things they don't want to begin interacting with your site or reading it's content. Quite often the additional <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transaction is worthwhile.</p>
166
- <p align="right"><a href="#toc">back to top</a></p>
167
- <p id="q10"><strong>What's an Etag and why do I need one?</strong><br />
168
- Etags were created to add more reliability to client side caching my providing a simple method for a browser to verify that a file had not changed since last it was downloaded. Using them enables your server to return 304 or "not modified" responses instead of other responses which are much much slower. The result is a visitor viewing multiple pages of your site would have that "instant loading" experience that we all definitely enjoy. Don't worry we don't use inodes to create our Etags so this solution is reliable for multi server hosting solutions.</p>
169
- <p align="right"><a href="#toc">back to top</a></p>
170
- <p id="q11"><strong>So let me get this straight; you're telling me this plugin is designed to improve performance of any WordPress blog?</strong><br />
171
- Precisely, that is unless you don't write any posts in your blog nor have any readers. If you're someone that's always into the latest web development technique or plugin, now you can "have it all" without making your readers suffer.</p>
172
- <p align="right"><a href="#toc">back to top</a></p>
173
- <p id="q12"><strong>This is too good to be true, how can I test the results?</strong><br />
174
- You will be able to see it instantly on each page load, but for tangible metrics, consider the following tools:</p>
175
- <ul>
176
- <li><a href="http://www.mozilla.com/firefox/" target="_blank">Firefox</a> + <a href="http://getfirebug.com/" target="_blank">Firebug</a> + <a href="http://developer.yahoo.com/yslow/" target="_blank">Yahoo! YSlow</a></li>
177
- <li><a href="http://www.websiteoptimization.com/services/analyze/" target="_blank">Web Page Analyzer</a></li>
178
- <li><a href="http://www.port80software.com/tools/compresscheck.asp" target="_blank">Port80 Compression Check</a> (requires <acronym title="Microsoft Internet Explorer">MSIE</acronym>6 support to be enabled)</li>
179
- <li><a href="http://www.gomez.com/instant-test-pro/" target="_blank">Gomez Instant Test Pro</a></li>
180
- <li><a href="http://www.gidnetwork.com/tools/gzip-test.php" target="_blank">A simple online web page compression / deflate / <acronym title="GNU zip">gzip</acronym> test tool</a></li>
181
- </ul>
182
- <p align="right"><a href="#toc">back to top</a></p>
 
183
  <p id="q13"><strong>Does this plugin work with WordPress <acronym title="Multi-User">MU</acronym>?</strong><br />
184
- Indeed it does.</p>
185
- <p align="right"><a href="#toc">back to top</a></p>
186
- <p id="q14"><strong>Does this plugin work with BuddyPress (bbPress)?</strong><br />
187
- Not sure, we'll get to that soon.</p>
188
- <p align="right"><a href="#toc">back to top</a></p>
189
- <p id="q15"><strong>Which WordPress versions are supported?</strong><br />
190
- To use all features in the suite, a minimum of version 2.5 is required. Earlier versions will benefit from our Media Library Importer to get them back on the upgrade path and into a <acronym title="Content Delivery Network">CDN</acronym> of their choosing.</p>
191
- <p align="right"><a href="#toc">back to top</a></p>
192
- <p id="q16"><strong>I understand the database caching and the page caching, but what's minify all about?</strong><br />
193
  We'll just quote the fine folks at yahoo on this one:</p>
194
- <blockquote>
195
  <p>"Minification is the practice of removing unnecessary characters from code to reduce its size thereby improving load times. When code is minified all comments are removed, as well as unneeded white space characters (space, newline, and tab). In the case of JavaScript, this improves response time performance because the size of the downloaded file is reduced. Two popular tools for minifying JavaScript code are <a href="http://www.crockford.com/javascript/jsmin.html" target="_blank"><acronym title="JavaScript">JS</acronym>Min</a> and <a href="http://developer.yahoo.com/yui/compressor/" target="_blank"><acronym title="Yahoo! User Interface">YUI</acronym> Compressor</a>. The <acronym title="Yahoo! User Interface">YUI</acronym> compressor can also minify <acronym title="Cascading Style Sheet">CSS</acronym>.</p>
196
- <p>Obfuscation is an alternative optimization that can be applied to source code. It's more complex than minification and thus more likely to generate bugs as a result of the obfuscation step itself. In a survey of ten top U.S. web sites, minification achieved a 21% size reduction versus 25% for obfuscation. Although obfuscation has a higher size reduction, minifying JavaScript is less risky.</p>
197
  <p>In addition to minifying external scripts and styles, inline &lt;script&gt; and &lt;style&gt; blocks can and should also be minified. Even if you <acronym title="GNU zip">gzip</acronym> your scripts and styles, minifying them will still reduce the size by 5% or more. As the use and size of JavaScript and <acronym title="Cascading Style Sheet">CSS</acronym> increases so will the savings gained by minifying your code."</p>
198
  <cite><a href="http://developer.yahoo.com/performance/rules.html#minify" target="_blank">developer.yahoo.com</a></cite> </blockquote>
199
- <p align="right"><a href="#toc">back to top</a></p>
200
- <p id="q17"><strong>What do you use to minify?</strong><br />
201
  We use: <a href="http://code.google.com/p/minify/" target="_blank">minify</a> but may support various engines in the future. Based on <a href="http://ejohn.org/" target="_blank">John Resig's</a> suggestion we're currently looking at <a href="http://yuilibrary.com/projects/yuicompressor/wiki" target="_blank"><acronym title="Yahoo! User Interface">YUI</acronym> Compressor</a> also.</p>
202
- <p align="right"><a href="#toc">back to top</a></p>
203
- <p id="q18"><strong>What's the point of downloading and caching 3rd party files (e.g. <acronym title="JavaScript">JS</acronym>)?</strong><br />
204
- With the various hosted 3rd party applications available (from web site statistics to social media sharing widgets), the problems we've noticed are: additional <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transactions, <acronym title="Domain Name System">DNS</acronym> lookups and latencies from busy servers that we can't control and often un-minified files with no <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression all add up to a very slow page load and poor user experience. With your own copy of external files, updated as frequently as you wish, none of these problems exist.</p>
205
- <p align="right"><a href="#toc">back to top</a></p>
206
- <p id="q19"><strong>Will you support other memory or </strong><a href="http://en.wikipedia.org/wiki/PHP_accelerator" target="_blank"><strong>opcode caches</strong></a><strong>?</strong><br />
207
- Possibly, we just <a href="mailto:wordpressexperts@w3-edge.com">need to know which</a> others are popular in the WordPress community and we will address them.</p>
208
- <p align="right"><a href="#toc">back to top</a></p>
209
- <p id="q20"><strong>Will this plugin break my theme by changing the order of conditional statements or the like?</strong><br />
210
- No, the plugin looks for conditional statements in your markup used for <acronym title="Cascading Style Sheet">CSS</acronym> (and sometimes <acronym title="JavaScript">JS</acronym>) and makes sure that the minified files precede it, so keep that in mind.</p>
211
- <p align="right"><a href="#toc">back to top</a></p>
212
- <p id="q21"><strong>Will this speed up <acronym title="WordPress">WP</acronym> Admin?</strong><br />
213
- Yes, indirectly &mdash; if you have a lot of bloggers working with you, you will find that it feels like you have a server dedicated only to <acronym title="WordPress">WP</acronym> Admin once this plugin is enabled; the result, increased productivity.</p>
214
- <p align="right"><a href="#toc">back to top</a></p>
215
- <p id="q22"><strong>Does this plugin modify how the WordPress core works?</strong><br />
216
- No. No theme changes, special files, WordPress core file modifications or special permissions need to be set.</p>
217
- <p align="right"><a href="#toc">back to top</a></p>
218
- <p id="q23"><strong>Does it really matter if I remove the line breaks from my code?</strong><br />
219
  Definitely. Removing white space from your files make <acronym title="GNU zip">gzip</acronym> and deflate (<acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression) more effective.</p>
220
- <p align="right"><a href="#toc">back to top</a></p>
221
- <p id="q24"><strong>What's the benefit of removing <acronym title="Hypertext Markup Language">HTML</acronym> comments from my code?</strong><br />
222
- Many developers like to have comments in the code for various reasons, however these comments add no value from the blog readers (or search engine for that matter) point of view and only contribute to increased load time and wasted bandwidth as a result. Now only you can use them and view them in your site (as a logged in administrator viewing the page source), which is really what (we assume) you intended.</p>
223
- <p align="right"><a href="#toc">back to top</a></p>
224
- <p id="q25"><strong>Why is &lt;link&gt; used to embed <acronym title="Cascading Style Sheet">CSS</acronym> instead of &lt;style&gt;?</strong><br />
225
- &lt;link&gt; is a non-blocking method to embed <acronym title="Cascading Style Sheet">CSS</acronym> into a document. We recommend this approach for optimal performance.</p>
226
- <p align="right"><a href="#toc">back to top</a></p>
227
- <p id="q26"><strong>Why do I care of <acronym title="JavaScript">JS</acronym> or <acronym title="Cascading Style Sheet">CSS</acronym> is "blocking" or not?</strong><br />
228
- In the case of objects (files) you don't host yourself, this could add several seconds to your page's load time as the <acronym title="Domain Name System">DNS</acronym> lookups, <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transaction roundtrip times and wait times add up. Even when all the scripts are hosted locally, the same adversities exist. Since all objects in the &lt;head&gt; of a document have to be ready before the page can be rendered, having them load in a parallel fashion as opposed to linear (or near linear) gives night and day results.</p>
229
- <p align="right"><a href="#toc">back to top</a></p>
230
- <p id="q27"><strong>What does this plugin do to inline <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym>?</strong><br />
231
- Nothing yet. We're evaluating use cases to deal with common issues (like inline <acronym title="Cascading Style Sheet">CSS</acronym> for tag clouds for example).</p>
232
- <p align="right"><a href="#toc">back to top</a></p>
233
- <p id="q28"><strong>Ok I get it, this all sounds nice and everything, but is this perfect?</strong><br />
234
- Pretty much. If you monetize your blog with ads you will want to spend some time making sure that the ad code works well with your optimization settings. There are also the occasional pieces of code that conflict with the others and have to be in a specific order to work well, but that's not a problem that this plugin introduces.</p>
235
- <p align="right"><a href="#toc">back to top</a></p>
236
- <p id="q29"><strong>Seriously, tell me what the downside is, there must be something?</strong><br />
237
- Well, no there isn't. Installing the server side software might be challenging for some, but <a href="mailto:wordpressexperts@w3-edge.com">we can assist</a> with that if you ask. Other than that, unless you enjoy frequently upgrading your server plan or buying more servers and paying for bandwidth overages or wincing every time you add another "must have" plugin to your blog, we cannot find any reason to deter you from the use of this one.</p>
238
- <p align="right"><a href="#toc">back to top</a></p>
239
- <p id="q30"><strong>If this plugin does everything you claim, why would you give it away free? Cui Bono?</strong><br />
240
- Who benefits? Everyone. Of the numerous, here are the three the most important reasons we share with the WordPress community:</p>
241
- <ul>
242
- <li>WordPress is free and high quality, plugins should be too.</li>
243
- <li>There's no reason your blog shouldn't be able to perform as well as well as any major corporation's web site/application.</li>
244
- <li><a href="http://code.google.com/speed/articles/" target="_blank">Google</a> and <a href="http://developer.yahoo.com/yui/" target="_blank">Yahoo</a> offer quite a bit, but they did not offer a WordPress solution yet. This is our contribution to speeding up the web (starting with the blogosphere).</li>
245
- </ul>
246
- <p align="right"><a href="#toc">back to top</a></p>
247
  <p id="q31"><strong>Who in the world uses memcached or <acronym title="Alternative PHP Cache">APC</acronym> etc anyway?</strong><br />
248
- Great question! Basically anyone that needs to make their application scale. For example, <a href="http://www.wordpress.com/" target="_blank">WordPress.com</a>, <a href="http://twitter.com" target="_blank">Twitter</a>, <a href="http://www.facebook.com/" target="_blank">Facebook</a>, LiveJournal (the inventors of the software) and so on all use some sort of memory cache to increase application performance.</p>
249
- <p align="right"><a href="#toc">back to top</a></p>
250
- <p id="q32"><strong>I don't understand what a <acronym title="Content Delivery Network">CDN</acronym> has to do with caching, that's completely different, no?</strong><br />
251
- Technically no, a <acronym title="Content Delivery Network">CDN</acronym> is a high performance cache that stores static assets (your theme files, media library etc) in various locations throughout the world in order to provide low latency access to them by readers in those regions. So indeed a <acronym title="Content Delivery Network">CDN</acronym> is a high performance cache, many of which actually store your frequently requested assets in memory for fastest possible response.</p>
252
- <p align="right"><a href="#toc">back to top</a></p>
253
- <p id="q33"><strong>We run many blogs on many servers here at my company, is this plugin still for me?</strong><br />
254
  Yes, especially if you have a cluster and many WordPress installations or a WordPress <acronym title="Multi-User">MU</acronym> installation, then plugin is for you. It will allow you to move easily from multiple installations to WordPress <acronym title="Multi-User">MU</acronym> and continue to use multiple <acronym title="Hypertext Transfer Protocol">HTTP</acronym>, Database, Network Attached Storage etc servers in any configuration you wish. You can also specify as many memcached servers as you wish, although you cannot yet delegate a memcached server to a specific type of caching, i.e. there's no pool management yet.</p>
255
- <p align="right"><a href="#toc">back to top</a></p>
256
- <p id="q34"><strong>So you appear to know what you're talking about, will there be any negative effect on my SEO rankings?</strong><br />
257
- To answer, first we must assume that you're using all of the options we offer: <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression, minify etc. Having said that, we are only sending compressed data to user agents that support it; even <a href="http://www.google.com/search?q=search+engine+crawler+http+compression" target="_blank">most search engine crawlers do</a>. As for minified <acronym title="Hypertext Markup Language">HTML</acronym>, this is essentially how crawlers see your page anyway when they download it. So no, there's no penalty or compromise.</p>
258
  <p>Fact of the matter, there was a time when the semantics and size of your <acronym title="Hypertext Markup Language">HTML</acronym> file (code-to-content ratio), was a factor in a more favorable ranking. <a href="http://microformats.org/wiki/posh" target="_blank"><acronym title="Plain Old Semantic HTML">POSH</acronym></a> <acronym title="Hypertext Markup Language">HTML</acronym> has always been preferred by search engines. In some markets this may still be true, so give the search engines what they want.</p>
259
- <p align="right"><a href="#toc">back to top</a></p>
260
- <p id="q35"><strong>Will the plugin interfere with other plugins or widgets?</strong><br />
261
- No, on the contrary if you use the minify settings you will improve their performance by several times.</p>
262
- <p align="right"><a href="#toc">back to top</a></p>
263
- <p id="q36"><strong>What about my robots.txt, sitemap.xml and all my site verification files etc, what happens with those?</strong><br />
264
- If you're concerned about what happens with these when the <acronym title="Content Delivery Network">CDN</acronym> functionality is active, nothing does. You do not want or need these files moved from their original locations and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression (or minification for that matter) is of no consequence in most cases.</p>
265
- <p align="right"><a href="#toc">back to top</a></p>
266
- <p id="q37"><strong>Do you have any tricks for "post-loading", "lazy-loading" and other render optimizations in this plugin?</strong><br />
267
- Yes we do, we're currently evaluating if they are best introduced into this plugin or as standalones. Feel free to <a href="mailto:wordpressexperts@w3-edge.com">chime in</a>.</p>
268
- <p align="right"><a href="#toc">back to top</a></p>
269
- <p id="q38"><strong>I want to obfuscate my <acronym title="JavaScript">JS</acronym>, does the plugin do that? Will it ever?</strong><br />
270
- No the plugin will not do that and it's unlikely that we'll support that.</p>
271
- <p align="right"><a href="#toc">back to top</a></p>
272
- <p id="q39"><strong>Can I use packed or obfuscated <acronym title="JavaScript">JS</acronym> with this plugin?</strong><br />
273
  Yes and no. In general, packed <acronym title="JavaScript">JS</acronym> cannot be minified reliably. Obfuscated <acronym title="JavaScript">JS</acronym> also is hit or miss. A minified and <acronym title="GNU zip">gzip</acronym>ped <acronym title="JavaScript">JS</acronym> file will be smaller than a packed file in any case, so using the (uncompressed, unpacked or un obfuscated) developer versions of your plugins is no longer a concern when using this plugin. Alternatively, you can use the non-blocking embed option to continue to use your packed or obfuscated file without minification.</p>
274
- <p align="right"><a href="#toc">back to top</a></p>
275
- <p id="q40"><strong>I have some ideas for more features, can I write my own add-ons for your plugin?</strong><br />
276
- Not yet, we are considering support for add-ons. Meanwhile, please <a href="mailto:wordpressexperts@w3-edge.com">reach out to us</a> and let us know what you think would benefit the community.</p>
277
- <p align="right"><a href="#toc">back to top</a></p>
278
- <p id="q41"><strong>Who do I thank for all of this?</strong><br />
279
  It's quite difficult to recall all of the innovators that have shared their thoughts, code and experiences in the blogosphere over the years, but here are some names to get you started:</p>
280
- <ul>
281
- <li><a href="http://mrclay.org/" target="_blank">Steve Clay</a></li>
282
- <li><a href="http://wonko.com/" target="_blank">Ryan Grove</a></li>
283
- <li><a href="http://www.nczonline.net/blog/2009/06/23/loading-javascript-without-blocking/" target="_blank">Nicholas Zakas</a> </li>
284
- <li><a href="http://stevesouders.com/" target="_blank">Steve Souders</a></li>
285
- <li><a href="http://rtdean.livejournal.com/" target="_blank">Ryan Dean</a></li>
286
- <li><a href="http://gravitonic.com/" target="_blank">Andrei Zmievski</a></li>
287
- <li>George Schlossnagle</li>
288
- <li>Daniel Cowgill</li>
289
- <li><a href="http://toys.lerdorf.com/" target="_blank">Rasmus Lerdorf</a></li>
290
- <li><a href="http://t3.dotgnu.info/" target="_blank">Gopal Vijayaraghavan</a></li>
291
- </ul>
292
- <p>Please reach out to all of these people and support their projects if you're so inclined.</p>
293
- <p align="right"><a href="#toc">back to top</a></p>
294
- <p id="q42"><strong>So how do I find the <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> to optimize them with this plugin?</strong><br />
295
- View your page source in your browser and search for any &lt;style&gt;, &lt;link&gt; or &lt;script&gt; tags that contain external <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> files and one by one add them to the minify settings page. Do not include any <acronym title="Cascading Style Sheet">CSS</acronym> in conditional statements (unless you know what you are doing) like:</p>
296
  <p>&lt;!--[if lte IE 8]&gt;&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/wp-content/themes/default/lte.css&quot; media=&quot;screen,projection&quot; /&gt;&lt;![endif]--&gt;</p>
297
- <p>The plugin will concatenate, minify, <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compress and check for updates to these files automatically from now on. If you have any <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> that are inline consider making them external files so that you can use them with minify.</p>
298
- <p align="right"><a href="#toc">back to top</a></p>
299
- <p id="q43"><strong>I've used the plugin to optimize all my theme's <acronym title="JavaScript">JS</acronym> and plugins <acronym title="JavaScript">JS</acronym>, but there are some function calls, where do those go?</strong><br />
300
- Just place them above &lt;/head&gt; if that's where your embed is done or above &lt;/body&gt; if that's where you need them. Wherever they need to be to be called after the <acronym title="JavaScript">JS</acronym> that needs them, it'll be fine.</p>
301
- <p align="right"><a href="#toc">back to top</a></p>
302
- <p id="q44"><strong>Can I use scripts that generate <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> with this plugin?</strong><br />
303
- Yes you can, but since there are numerous ways to do so, so be sure to test your results carefully. Having said that we do encourage it as it will mean that less processing has to be done to deliver your pages.</p>
304
- <p align="right"><a href="#toc">back to top</a></p>
305
- <p id="q45"><strong>In the past, I always had to modify my theme to run dynamic code. Don't I need to do that again for this plugin?</strong><br />
306
- Absolutely not. This plugin doesn't require you to do anything differently to develop or maintain your blog. You'll want to remove any special calls you had in place for your old plugins, although they will be ignored by our plugin in any case.</p>
307
- <p align="right"><a href="#toc">back to top</a></p>
308
- <p id="q46"><strong>How fast will the cache be updated?</strong><br />
309
- Items expire from the cache at a rate that you specify. As far as how fast changes appear to your visitors, they appear instantly in most cases and if you're an administrator who's logged in they will always be immediately visible.</p>
310
- <p align="right"><a href="#toc">back to top</a></p>
311
- <p id="q47"><strong>How do I make some specific pages stay dynamic?</strong><br />
312
- They never stop being dynamic, we just don't create pages that have not been changed. If you have a page that updated frequently in your blog before, it will still remain up-to-date at all times.</p>
313
- <p align="right"><a href="#toc">back to top</a></p>
314
- <p id="q48"><strong>What about comments? Does the plugin slow down the rate at which comments appear?</strong><br />
315
- On the contrary, as with any other action a user can perform on a site, faster performance will encourage more of it. The cache is so quickly rebuilt in memory that it's no trouble to show visitors the most current version of a post that's experiencing Digg, Slashdot, Drudge Report, Yahoo Buzz or Twitter effect.</p>
316
- <p align="right"><a href="#toc">back to top</a></p>
317
- <p id="q49"><strong>What if I accidentally specify an incorrect path to a <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> file?</strong><br />
318
- Unfortunately a 400 bad request error may be generated. So use the "Check URI" button to make sure that you have entered the correct URI or path to the file.</p>
319
- <p align="right"><a href="#toc">back to top</a></p>
320
- <p id="q50"><strong>Does the plugin automatically remove duplicate <acronym title="JavaScript">JS</acronym>?</strong><br />
321
- No. If you include a script in the minfy settings twice or it already exists in your theme we do not automatically remove the extra code. That's tricky business and it's better for us to just let you make the decisions conscientiously.</p>
322
- <p align="right"><a href="#toc">back to top</a></p>
323
- <p id="q51"><strong>I've been using the plugin for some time, I updated one of my other plugins and now it doesn't work anymore. What's up?</strong><br />
324
- It's likely the plugin author modified the <acronym title="JavaScript">JS</acronym> or <acronym title="Cascading Style Sheet">CSS</acronym> in the new release and any old <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> you optimized with our plugin has introduced duplicate code as a result (creating a conflict). Simply check out the source code, identify any new <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> and update your <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> optimizations our plugin and you're good to go.</p>
325
- <!--
326
  <p id="q52" align="right"><a href="#toc">back to top</a></p>
327
  <p><strong>I have some <acronym title="Cascading Style Sheet">CSS</acronym> classes with declarations being overwritten or <acronym title="JavaScript">JS</acronym> with dependencies, do I really have to copy and paste all my <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> file settings around?</strong><br />
328
  No, you can drag and drop them into the desired order on the minify settings page.</p>-->
329
- <p align="right"><a href="#toc">back to top</a></p>
330
- <p id="q53"><strong>Why does your plugin change the order of my &lt;script&gt; and &lt;link&gt; tags (in the &lt;head&gt;)?</strong><br />
331
- Steve Souders <a href="http://www.youtube.com/watch?v=oaxZtKAlLRk" target="_blank">identified</a> that placing inline scripts between <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> embeds creates a blocking situation, so we're try to help you avoid that. If you'd like to experiment with various scenarios related specifically to your blog, we recommend Steve's tool, <a href="http://stevesouders.com/cuzillion/" target="_blank">Cuzillion</a>. Have some beneficial input on other common cases for WordPress users? <a href="mailto:wordpressexperts@w3-edge.com">Reach out to us</a>.</p>
332
- <p align="right"><a href="#toc">back to top</a></p>
333
- <p id="q54"><strong>I can't read this minified <acronym title="Hypertext Markup Language">HTML</acronym>; can you give me a break please?</strong><br />
334
- Happy to! Login as an administrator, go to the Minify Settings page and check off "Show un-minified pages to administrators" and save the changes. Now stay logged in as an administrator in the same browser you used to change the settings and now when you view the source of a given page in the site, the source will not be minified.</p>
335
- <p align="right"><a href="#toc">back to top</a></p>
336
- <p id="q55"><strong>When are you going to translate this plugin into more languages?</strong><br />
337
- When you help us! :-) Localization is tricky and we're happy to work with those willing to support the WordPress community. We will most likely follow the <a href="http://en.wordpress.com/stats/" target="_blank">trends of WordPress</a> itself to determine which languages are addressed first.</p>
338
- <p align="right"><a href="#toc">back to top</a></p>
339
- <p id="q56"><strong>I'm not a hardcore developer, can you explain to me how this // and / stuff works and how I should specify the paths for <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> files?</strong><br />
340
- You mean on the minify settings page right? Ok, it's simple:<br />
341
- // tells the plugin to search for the file with the provided path from the document root, e.g.: //wp-includes/JS/jquery/jquery.<acronym title="JavaScript">JS</acronym><br />
342
- / tells the plugin to search for the file with the provided path from the server root, e.g. /wp-includes/JS/jquery/jquery.<acronym title="JavaScript">JS</acronym></p>
343
- <p>In most cases providing an absolute path is sufficient and most reliable. You can of course use relative paths, but we discourage it unless you really know what you are doing.</p>
344
- <p align="right"><a href="#toc">back to top</a></p>
345
- <p id="q57"><strong>What about Etags?</strong><br />
346
- Yes, we have Etags covered. Even if you have a clustered hosting environment, your <a href="http://en.wikipedia.org/wiki/HTTP_ETag" target="_blank">Etags</a> will be consistent (across multiple servers in your cluster) so you don't have to worry about using special session cookies when you introduce our plugin. If you would like to specify headers for various reasons, you can do that as well.</p>
347
- <p align="right"><a href="#toc">back to top</a></p>
348
- <p id="q58"><strong>Which encodings do you support?</strong><br />
349
- We recommend UTF-8, but we do not modify the encoding in any files, instead we simply return the code as it is provided.</p>
350
- <p align="right"><a href="#toc">back to top</a></p>
351
- <p id="q59"><strong>What's this thing doing? Where are the statistics?</strong><br />
352
  Right now we do not show the statistics in <acronym title="WordPress">WP</acronym> Admin, but soon we will provide graphs of: Page Cache Memory Use, Page Cache Hits/Misses, <acronym title="Database">DB</acronym> Cache Memory Use, <acronym title="Database">DB</acronym> Hits/Misses, Average Page Compression Savings, Average <acronym title="Cascading Style Sheet">CSS</acronym> Compression Savings, Average <acronym title="JavaScript">JS</acronym> Compression Savings, Average Requests per Second, and Average Page Execution Time.</p>
353
- <p align="right"><a href="#toc">back to top</a></p>
354
- <p id="q60"><strong>How can I tell if it's working? Aren't there any statistics at all?</strong><br />
355
- Well yes actually there are. If you're logged in as an administrator they will be appended to the bottom of the source code. Keep in mind that there's a bit of work to show the stats so effort to produce the pages for the visitors is a bit less.</p>
356
- <p align="right"><a href="#toc">back to top</a></p>
357
- <p id="q61"><strong>I'm an advanced theme developer and I want to have different combinations of <acronym title="Cascading Style Sheet">CSS</acronym> or <acronym title="JavaScript">JS</acronym> files on different types of pages in my theme; how is this done?</strong><br />
358
- Great question, we understand the use case all too well. Right now you cannot create different groups of <acronym title="JavaScript">JS</acronym> and <acronym title="Cascading Style Sheet">CSS</acronym> files for your home, page, post, archive or 404 etc. This feature is coming soon; it did not make the first cut.</p>
359
- <p align="right"><a href="#toc">back to top</a></p>
360
  <p id="q62"><strong>Which features can I use if I haven't yet installed <acronym title="Alternative PHP Cache">APC</acronym> or memcached?</strong><br />
361
  Memory caching will not be possible. However you will be able to use minify as well <acronym title="Content Delivery Network">CDN</acronym> functionality without issue. Remember that W3 Total Cache is not compatible with other caching plugins, so you'll want to install <acronym title="Alternative PHP Cache">APC</acronym> and/or memcached as soon as possible.</p>
362
- <p align="right"><a href="#toc">back to top</a></p>
363
- <p id="q63"><strong>How can I serve my favicon from the <acronym title="Content Delivery Network">CDN</acronym>?</strong><br />
364
- If the file exists in your document root (i.e. http://domain.com/favicon.ico), the plugin can take care of that for you using custom upload options. If the file is in your theme directory you can also have the plugin uploaded from there.</p>
365
- <p align="right"><a href="#toc">back to top</a></p>
366
- <p id="q64"><strong>Why do you set the value of the media attribute of &lt;link&gt; to all?</strong><br />
367
- In case you were using @media declarations in your document, we'd have you covered. We will likely allow you to modify this attribute as subsequent features are finalized.</p>
368
- <p align="right"><a href="#toc">back to top</a></p>
369
- <p id="q65"><strong>Why can't I specify other &lt;script&gt; types or encoding?</strong><br />
370
- We have not found a use case where this appears to be of any consequence. If you're aware of one <a href="mailto:wordpressexperts@w3-edge.com">please let us know</a>.</p>
371
- <p align="right"><a href="#toc">back to top</a></p>
372
- <p id="q66"><strong>My theme doesn't call wp_head() or wp_footer(), how do I set this plugin up?</strong><br />
373
- The calls you'll want to make for the various cases are:</p>
374
- <ul>
375
- <li>w3tc_styles('header.css')<br />
376
- Inserts the minified header <acronym title="Cascading Style Sheet">CSS</acronym> group at the location you specify in your theme.</li>
377
- <li>w3tc_scripts('header')<br />
378
- Inserts the header <acronym title="JavaScript">JS</acronym> group at the location you specify in your theme.</li>
379
- <li>w3tc_scripts('header_nb'); <br />
380
- Inserts the header non-blocking <acronym title="JavaScript">JS</acronym> group at the location you specify in your theme.</li>
381
- <li>w3tc_scripts('footer')<br />
382
- Inserts the footer <acronym title="JavaScript">JS</acronym> group at the location you specify in your theme.</li>
383
- <li>w3tc_scripts('footer_nb'); <br />
384
- Inserts the footer non-blocking <acronym title="JavaScript">JS</acronym> group at the location you specify in your theme.</li>
385
- </ul>
386
- <p align="right"><a href="#toc">back to top</a></p>
387
- <p id="q67"><strong>Is this plugin compatible with other popular caching plugins?</strong><br />
388
- No. Any disk based page caching plugin you're currently using would need to be completely uninstalled (not just disabled) in order to use this plugin. So if you have a development environment where you can try this out or testing during low traffic periods to get your preferences set, that is recommended. You can always backup your full WordPress installation before testing pretty quickly if you skip the /uploads/ (media library) directory.</p>
389
- <p align="right"><a href="#toc">back to top</a></p>
390
- <p id="q68"><strong>Some WordPress caching plugins fail when markup is not well-formed, is this plugin similar?</strong><br />
391
- No, this plugin is not similar. While valid <acronym title="Hypertext Markup Language">HTML</acronym> and <acronym title="World Wide Web Consortium">W3C</acronym> standards ensure consistent behavior across user agents and promote accessibility, any invalidity that exist in the code is not going to bring your site to its knees.</p>
392
- <p align="right"><a href="#toc">back to top</a></p>
393
- <p id="q69"><strong>Won't various 3rd parties who's <acronym title="JavaScript">JS</acronym> I download and cache be concerned?</strong><br />
394
- Unlikely, you're saving them bandwidth and using their applications, so they will probably appreciate it as long as their application still works as intended and you're using their software in an authorized manner. Look at it this way, even before this plugin, you and thousands of other people were still downloading it, now you're just downloading it first.</p>
395
- <p align="right"><a href="#toc">back to top</a></p>
396
- <p id="q70"><strong>Google already minified and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compressed jQuery (and other libraries ) for me, why can't I just use their bandwidth and embed other code after it?</strong><br />
397
- You can! Just add Google's script to your minify settings use non-blocking mode and your visitors will download jQuery directly from them as you wish. And the same is obviously true for any other library you wish. Remember you are creating additional <acronym title="Domain Name System">DNS</acronym> Lookups and <acronym title="Hypertext Transfer Protocol">HTTP</acronym> transactions when you do this.</p>
398
- <p align="right"><a href="#toc">back to top</a></p>
399
- <p id="q71"><strong>I wanted to use a different version jQuery with my theme, how do I replace WordPress' jQuery with Google's minified version using your plugin?</strong><br />
400
- Currently you cannot, replacement is not yet supported.</p>
401
- <p align="right"><a href="#toc">back to top</a></p>
402
- <p id="q72"><strong>What about the wp-includes files, can those be served from the <acronym title="Content Delivery Network">CDN</acronym>?</strong><br />
403
- Yes, you can specify which file types you would like served from your <acronym title="Content Delivery Network">CDN</acronym> and they will be uploaded and always downloaded from that location. This includes the smiles, manfest.xml et al. By default we take care of them all.</p>
404
- <p align="right"><a href="#toc">back to top</a></p>
405
- <p id="q73"><strong>What if I don't want to work with a <acronym title="Content Delivery Network">CDN</acronym> right now, is there any other use for this feature?</strong><br />
406
- Yes! You can take advantage of the <a href="http://www.mozilla.org/projects/netlib/http/pipelining-faq.html">pipelining</a> support in some browsers by creating a sub-domain for the static content for your site. So you could create static.domain.com on your server (and update your <acronym title="Domain Name System">DNS</acronym> zone) and then specify the <acronym title="File Transfer Protocol">FTP</acronym> details for it in the plugin configuration panel and you're done. If you disable the scripting options on your server you'll find that your server will actually respond slightly faster from that sub-domain because it's just sending files and not processing them.</p>
407
- <p align="right"><a href="#toc">back to top</a></p>
408
- <p id="q74"><strong>Are minified files uploaded to my <acronym title="Content Delivery Network">CDN</acronym> provider?</strong><br />
409
- Yes, any <acronym title="Cascading Style Sheet">CSS</acronym> and <acronym title="JavaScript">JS</acronym> you manage with the plugin are minified before being uploaded to your <acronym title="Content Delivery Network">CDN</acronym>. You don't have to make any special changes to your theme. We encourage you to make sure that your provider supports <acronym title="Hypertext Transfer Protocol">HTTP</acronym> compression as the benefit of having your static assets available from more than one <acronym title="Point of Presence">POP</acronym> alone is not enough.</p>
410
- <p align="right"><a href="#toc">back to top</a></p>
411
- <p id="q75"><strong>Who do you recommend as a <acronym title="Content Delivery Network">CDN</acronym> provider?</strong><br />
412
- That depends on how you use your blog and where most of your readers read your blog (regionally). Here's a shortlist:</p>
413
- <ul>
414
- <li><a href="http://www.simplecdn.com/" target="_blank">Simple<acronym title="Content Delivery Network">CDN</acronym></a></li>
415
- <li><a href="http://www.edgecast.com/" target="_blank">EdgeCast</a></li>
416
- <li><a href="http://www.limelightnetworks.com/" target="_blank">Limelight Networks</a></li>
417
- <li><a href="http://aws.amazon.com/s3/" target="_blank">Amazon S3</a> / <a href="http://aws.amazon.com/cloudfront/" target="_blank">Cloudfront</a></li>
418
- <li><a href="http://www.akamai.com/" target="_blank">Akamai</a></li>
419
- <li><a href="http://www.voxel.net/products-services/voxcast-cdn" target="_blank">Voxel</a></li>
420
- </ul>
421
- <p align="right"><a href="#toc">back to top</a></p>
422
- <p id="q76"><strong>Hang on, don't I need to modify my <acronym title="Cascading Style Sheet">CSS</acronym> files so they'll work on the <acronym title="Content Delivery Network">CDN</acronym>?</strong><br />
423
- No, that is taken care of for you. Your <acronym title="Cascading Style Sheet">CSS</acronym> files will originate from your <acronym title="Content Delivery Network">CDN</acronym> provider and all paths to any images in your <acronym title="Cascading Style Sheet">CSS</acronym> will be changed from relative to absolute, making sure that they load just fine. Do nothing differently, yet reap all the benefits.</p>
424
- <p align="right"><a href="#toc">back to top</a></p>
425
- <p id="q77"><strong>I don't have time to deal with this, but I know I need it. Will you help me?</strong><br />
426
- Yes! Please <a href="mailto:wordpressexperts@w3-edge.com">reach out to us</a> and we'll get you acclimated so you can "set it and forget it."</p>
427
- <p align="right"><a href="#toc">back