Posts Tagged with: PHP

Five tips for speeding up Eclipse PDT and nWire

Eclipse Helios (3.6) includes an improved version of Eclipse PDT, labeled 2.2. It is also included in the current Zend Studio (7.1 and above). Among other enhancements, it dramatically improved the performance of code lookup-related tasks like searching references, creating a type hierarchy and even code completion. This is due to a new design, inspired by nWire, which uses the h2 database engine as a persistent storage for this data. 

The h2 database is a high-performance, low profile, Java native database engine, created as a successor to the widely used HSQLDB. It is open source and free to use. nWire uses h2 since its' early days. We gathered a lot of experience on how to optimize h2 and improve its' performance. There's a lot that can be done from the software developer side, however, even as an end user, there's still some simple techniques you can follow to improve the performance on your machine.

The database files

The h2 engine, as it is used in PDT and nWire, is running from within the Eclipse main process (in embedded mode and not as a server) and keeps the information in local storage, i.e. disk files. As a simple analogy, it is a bit like Microsoft Jet database engine used in MS Access. The database files are kept inside the workspace folder. The location of the workspace folder appears in the title of the main Eclipse window.

Under the workspace, there's a special folder called .metadata (beginning with a dot). It may be hidden on your machine. This folder contains settings and temporary files for the workspace. The database files are located in:

  • For PDT: <workspace folder>/.metadata/.plugins/org.eclipse.dltk.core.index.sql.h2/
  • For nWire: <workspace folder>/.metadata/.plugins/com.nwiresoftware.nwire.core/ndb/

The database files end with .db suffix. When you work with PDT or nWire, the IO activity around these files is intensive. Keeping the IO smooth is the key to improving your performance. These files can get pretty big. For example, I have a workspace containing the Magento code base with over 5600 PHP files and almost 450K line of code. The PDT repository occupies about 84 MB and the nWire repository is about 1 GB.

1. Disable virus scanners

The first thing you should do is disable virus scanning on database files. This has a major performance impact. The database engine will never execute code stored within the database, so there's no danger of malicious code being executed. Most virus scanners allow disabling the scan of a given folder (see the folders above) or a given suffix (the .db suffix).  

2. Use a fast storage device

Some people use a USB flash drive to store their workspace. Some store their workspace on a network drive. The impact on your performance in these cases will be substantial. If you want to achieve optimal performance, store your workspace on a fast storage device with a fast interface. Use your internal HDD (or SSD) for that purpose. Make sure the drive is properly maintained and has some free space available for the database to grow. If the file system requires it (FAT and NTFS), make sure to defragment your disk periodically.

3. Keep your JVM up to date

Keeping an updated JVM can improve the performance of h2. Especially if your are using an "ancient" version. 

4. Delete the database if your experience problems

In some cases, the database may get corrupted. This can happen, for example, in case of a power failure or a crash. When h2 loads the database, it will try to fix the corrupted data, which may take some time, depending on the database size. In case of PDT and nWire, the data is not really worth saving: it can be recreated by analyzing your source code. This means, you can safely delete the database files. Use this technique if Eclipse hangs when starting up or loading nWire. Make sure you close Eclipse first. The database will be recreated when you restart Eclipse.

5. Do not backup the database

If you are using an automated backup solution (e.g. TimeMachine, or a remote backup software), make sure to exclude the database folders from the backup.  These files are big and they will change frequently, which means it is a lot of data to back up. As I mentioned above, it is really unnecessary, since the data can be recreated. Needless to say, running the backup while working in Eclipse will seriously affect the IO performance.

Conclusion

Use the above tips to keep PDT and nWire running smoothly. If you have more tips or questions, let us know in the comments. For more information on h2 performance see this page

nWire and Aptana Studio

Aptana

Aptana Studio is one of the most popular tools for web development. It is Eclipse based and includes support for PHP. Many developers ask: Does nWire support Aptana? Well, I'm afraid the answer just got a bit more complex.

To understand the answer, one needs to be familiar with the state of PHP in Eclipse. Eclipse is an open source community. The Eclipse Platform houses many projects under its' roof. It endorses the development of external plugins and tools, some open source and some proprietary. As an example, Java development is supported by a very strong project called JDT (Java Development Tools). It is one of the first projects and a lot of person years were invested in it.

PHP development is supported by PDT (PHP Development Tools). However, unlike in the Java case, high quality PHP development tools arrived late to the Eclipse party. This opened the door for a number of PHP plugins which were developed outside the Eclipse foundation over the years. Once PDT proved to be a quality contender, most of these projects were abandoned. nWire for PHP was developed for PDT 2.1 and above with support from the PDT team. Thus, it requires the use of the official Eclipse PHP support, which is PDT.

Aptana Studio is an open source IDE based on Eclipse. It borrows some plugins from Eclipse and adds some of its' own. Version 1 of Aptana did not include PDT, but rather a different plugin known as Aptana PHP. In version 2, Aptana Studio moved to PDT, abandoning the previously developed PHP support (see the Aptana Studio 2 release notes). Users of Aptana Studio 2, which is based on PDT, can use nWire with Aptana Studio.

A couple of weeks ago, a beta version of Aptana Studio 3 was released. In this version, PDT is no longer a part of the distribution and, instead, there's a newly developed PHP editor (see the release notes). This means that the new release is incompatible with nWire for PHP, which requires PDT. Users of Aptana Studio 3 cannot use nWire at the moment.

Is this the final verdict? Probably not. Users of Aptana might still be able to use nWire in the future. It should be possible to add PDT to Aptana Studio 3 and use it instead of the Aptana developed PHP support. This will re-enable nWire. However, at the time of this writing, early beta users are reporting issues with the installation of PDT with Aptana. We hope these issues are resolved before the final release.

Finally, we are considering support for Aptana PHP (and perhaps even Ruby) in future nWire releases. If this is something which you'd be interested to see, please chime in and vote in our poll.

nWire supports the new Zend Studio 7.1

Last week, Zend Studio 7.1 was released (read the full press release). This is an important update which contains many new features. The nWire team worked with the Zend Studio team during the beta to ensure the compatibility of nWire with this latest release. nWire for PHP 1.2 fully supports Zend Studio 7.1.

Existing users will notice a nice performance boost over Zend Studio 7.0.x. Our early tests show about 15% improvement in code analysis speed. This is the result of a brand new code analysis and resolution engine. This engine will become available as part of PDT 2.2 during 2010. On a side note, this new engine is based on the H2 Database, the same database which powers nWire.

We are still working on improving the performance and resolution accuracy in nWire. A new beta version is expected shortly which will bring significant improvement in this area.

Users of Zend Studio 7.1 are invited to share their experience with us. Let us know if you encounter any performance difference in nWire operation between the versions, either by emailing our support team or in our forum.

Welcome, Aptana Users

Aptana

There are quite a few PHP plugins for Eclipse. When we started the development of nWire for PHP, we decided to focus on the official Eclipse PHP support: Eclipse PDT. However, we received numerous requests from users using Aptana, to support the Aptana Studio PHP Plugin.

Aptana is an important member of the open-source community in general and of the Eclipse ecosystem specifically. Recently, they decided to unite their efforts and join the PDT team. Aptana Studio site is now hosted in Aptana.org and the Aptana PHP installation instructions point to the installation of PDT.

For Aptana users, there's an added value: nWire for PHP can now be installed along with the rest of the Aptana toolset. So, Aptana users, go ahead and download nWire for a free, fully functional, 30 day trail.

Update: after several questions and requests, I want to make it clear: previous version of Aptana (1.5 and earlier) will not work with nWire which requires PDT. I do invite you to try out PDT.

Update 2: There's a new version 3 of Aptana Studio which moves away from PDT. For more information, read this post.

Read the official nWire for PHP Press Release!

nWire for PHP is finally getting a much deserved attention. Read the following press release which was done in cooperation with our partners at Zend.

Here's a Quote from Zeev Suraski, co-founder and CTO at Zend Technologies:

"As PHP applications scale and meet rapidly expanding requirements, the use of advanced, design-pattern based architectures is becoming more and more widespread. While advanced frameworks like Zend Framework provide great basis to build on, making the most of them can sometimes be challenging. nWire's solution, sporting tight integration with Zend Studio 7.0 and PDT, enables developers to build and maintain complex, large-scale applications while greatly reducing the time and pain normally involved with understanding existing application architecture and code. I believe many developers will find it as an invaluable addition to their toolbox."

Syndicate content