Minification refers to the process of removing all unnecessary characters from a file while leaving the core functionality of the code in tact. The end result is a new file which is smaller in size to the original, yet identical from a machine perspective. The core benefit to smaller files is that they require less bandwidth and are faster for the client to download. Although not intended, the minification profess can make code more difficult for humans to read, which is why minification can also been seen as light weight obfuscation.
Want to skip the technical discussion in this article? No problem, you can try the latest version of our Minifier.
Before we begin the technical discussion we should explain where and how we use Minification. We use PHP to transfer files from our development environment to production. We opt to automate the minification process during this publication step. This approach gives us all of the benefits of minimization (smaller files which require less bandwidth for the users) without the drawbacks (forcing our developers to work with giant blobs of difficult to read code). Since minification is preformed when a page is published, and not each time a page is accessed, we're less concerned with performance. Thus we opt for readability and ease of debugging over preformance.
Being data people, we're never satisfied with a partial result.
Now we're ready to write our minification function
Line 31 prevents us from accidentally condensing two plus sins into an prefix increment, e.g. a + +b, by placing the expression +b in parentheses. Technically this can increase the size of our file, but in the practice number of bytes added is small compared to what we'll take away in the next few lines.
Next we remove unnecessary whitespace. We'll point out that the some of the following lines can be combined to fewer lines of code. When preformance doesn't matter, I generally prefer readability over code size. Lines 38 and 39 remove horizonal whitespace around non alphanumeric characters that can be used in variable names. Line 42 removes all white space (which at this point is only newlines) around open parenteses, square brackets and curley brackets. Line 43 removes the space proceeding closing parenteses, square brackets and curely brackets. We can't necessarly remove the right space (newline) because it could be the statement terminating character. Finally, line 46 removes spaces (newlines) around characters that cannot be terminators.
Finally we remove unnecessary statement terminators. Statements don't need to be terminated by both a semicolon and a newline. We could keep either, but since semicolons are less ambigous, we keep semicolons is line 49. Finally, a statement is assumed terminated by the end curelybracket, so the semi colon is not strictly necessary and can be removed that in line 50.
Want to give it a try? Use our Minifier.