That’s the question I hear often when people are introduced to a new framework. It’s a valid concern. But it seems to me that they ask this just for fun. To my surprise, most people just don’t care, and the frameworks with the most stars often perform the worst.
Now take a look back at performance. Here are some benchmarks
From https://github.com/ibireme/YYModel, compare different JSON mappers for ObjC
From https://github.com/bwhiteley/JSONShootout, compare different JSON mappers for Swift
From https://github.com/onmyway133/DeepDiff#among-different-frameworks, compare different diffing frameworks
The many stars
Take a look at the stars, the ones with the most stars often perform the slowest 🙀
I don’t say that more stars mean better. I don’t believe in stars. Stars may just be a result of mere marketing effort. The same framework, without any code change, but after featured in some newsletters, gets additional thousand stars. The code remains the same, so what do stars really tell here?
I’m not talking about closed source. I like open source. When deciding an open source framework, there are many factors. It can be issues and pull requests that indicate how the community care about it. It can be good code and good tests, that make it easy to maintain. It can be good documentation, that says how much dedication the developers have put in.
People tend to follow those that have lots of followers, and to star a project with lots of stars. Don’t trust the stars. It means nearly nothing. The star is just the result of some marketing effort. Being featured or not in a newsletter can make 1k stars difference. Just because it was featured in a newsletter does not necessarily mean that it is good 😬
We should judge it ourselves by checking how good the source code is, how many documentation are available, and whether there is unit tests or not. The author is just human, so he can’t help maintain the library forever. We’re taking a big risk if we don’t have good picture of the library.
The system, especially iOS, changes very often. There are some libraries that try to “replicate” system APIs by exposing tons of primitives or perform type checking for every possible types. It can be that the author pick the most common use cases, or just trying to provide a cleaner APIs to the user. But if things change, will that author be willing to fix that? Will we be stuck there and making another issue asking for help? We’re making life better, not traps for everyone to fall into 🙀
Are we willing to take vaccines we don’t know about?
I like open source. I ‘ve made some and contributed to some. I also use other people ‘s open source libraries and learn a lot from them 😇
Open source can help us build better, faster and maybe more software by basing on other people ‘s hard work. We can also collaborate and make it better. But it’s also a double edges sword if we’re not judging carefully.
A little bit more dedication
We can skip this post if our project is just for fun, and we don’t care about future maintenance. If we’re making client or product projects, we should care and put a little more dedication into it. The company and our teammates trust we to do the good work.
I’ve admitted that I ‘ve done
electron.js. The choice is because it’s just a utility that I want to make quickly, and there ‘s many
node.js packages that I can use immediately. I have little experience in
node.js, so I accept the risk do get the work done. But if we’re experienced developer in our platform, and it’s our important project, then it’s a different story 💥
I’m kind of experimental person, so I always want to try new things. But I also learn the hard way to not over engineer, and to live as close to the system as possible. I just read Much ado about iOS app architecture and I agree with most of the points, that we shouldn’t fight the SDK and replace system frameworks.
To me, using 3rd libraries is like giving our life in someone else ‘s hands, that we have no control over our future. Please don’t just
pod install and consider it done 🙏.